Condividi:        

EXCEL straordinari

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Re: EXCEL straordinari

Postdi massimo311273 » 25/08/15 01:15

Il messaggio delle 20:32 non tenerne conto la formula funziona, resta il problema del messaggio successivo, ciao
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Sponsor
 

Re: EXCEL straordinari

Postdi Anthony47 » 25/08/15 23:27

Perdona, non ho materialmente tempo per riaffrontare un problema che e' risolvibile con la funzione xstra.

La logica della funzione e' descritta in questa discussione: viewtopic.php?f=26&t=69705
Usa una tabella per definire le fasce orarie da considerare; la tabella inizialmente prevedeva solo i 7 giorni della settimana, poi e' evoluta con altre 3 righe, come spiegato qui: viewtopic.php?f=26&t=69705#p402581
La stessa discussione riporta anche il codice della funzione, con alcune modifiche introdotte man mano che veniva usata dagli utenti; riporto qui per semplicita' il codice piu' aggiornato:
Codice: Seleziona tutto
Function Xstra(Data, InOuTable, DefOrario, TipoXstra, Optional TotH) As Single
'Data=cella contenente la data; InOuTable=prima delle 4 timbrature (E-U, E-U)
'DefOrario=indirizzo tabella con la matrice gg/hh/tipo di straordinario
'TipoXstra= valore del "tipo" richiesto; oppure 0=Ore lavorate
'
Dim GSett As Integer
Dim In1 As Single: Dim In2 As Single: Dim CTy As Single
Dim Out1 As Single: Dim Out2 As Single
Dim WHours As Single
Dim DefCols As Integer: Dim I As Integer: Dim CT As Integer
Dim TabTy(16) As Single: Dim TabTy0 As Single: Dim TabTyOld As Single

If TipoXstra > 16 Then Exit Function
If DefOrario <> "DefOrari" Then Exit Function
Application.Volatile
'aaaa = Data
GSett = Weekday(Data, vbMonday)
'MODIF --->
If GSett < 6 Then
    If Data.Offset(0, 1) = 1 Then
        GSett = (9 + Data.Offset(1, 1))
    Else
        If Data.Offset(1, 1) = 1 Then GSett = 8
    End If
End If
If Weekday(Data, vbMonday) = 6 Then
    If Data.Offset(0, 1) = 1 Then
        GSett = 10
    Else
        GSett = 6
    End If
End If
If Weekday(Data, vbMonday) = 7 Then
    If Data.Offset(1, 1) = 1 Then GSett = 10
End If
'<--MODIF

In1 = InOuTable
Out1 = InOuTable.Offset(0, 1).Value + (InOuTable.Offset(0, 1) < In1) * -1
'In2 = InOuTable.Offset(0, 2).Value + (InOuTable.Offset(0, 2) < InOuTable.Offset(0, 1)) * -1
1 'MODIF:
If InOuTable.Offset(0, 2).Value = 0 Then In2 = Out1 Else: In2 = InOuTable.Offset(0, 2).Value + (InOuTable.Offset(0, 2) < Out1) * -1

'MODIF:
If InOuTable.Offset(0, 3).Value = 0 Then Out2 = In2 Else Out2 = InOuTable.Offset(0, 3).Value + (InOuTable.Offset(0, 3).Value < In2) * -1

DefCols = DefOrario.End(xlToRight).Column - DefOrario.Column
WHours = Out2 - In2 + Out1 - In1
If TipoXstra = 0 Then
    Xstra = WHours: Exit Function
End If
Xstra = WHours - DefOrario.Offset(GSett, 1)
If Xstra <= 0.0001 Then    '<= 9 sec
    Xstra = 0: Exit Function
End If
For I = DefCols To 2 Step -1
    If Out2 > DefOrario.Offset(0, I) Then Exit For
Next I
CalcTy:
    CT = DefOrario.Offset(GSett, I + 1)
    TabTy0 = Out2 - DefOrario.Offset(0, I)
    If In2 >= DefOrario.Offset(0, I) Then TabTy0 = TabTy0 + DefOrario.Offset(0, I) - In2
    If Out1 >= DefOrario.Offset(0, I) Then TabTy0 = TabTy0 + Out1 - DefOrario.Offset(0, I)
    If In1 >= DefOrario.Offset(0, I) Then TabTy0 = TabTy0 + DefOrario.Offset(0, I) - In1
    TabTy0 = TabTy0 - TabTyOld
    TabTy(CT) = TabTy0 + TabTy(CT)
    TabTyOld = TabTyOld + TabTy0
    Xstra = Xstra - TabTy0
    If Xstra <= 0.00001 Then
        TabTy(CT) = TabTy(CT) + Xstra
        Xstra = TabTy(TipoXstra)
        Exit Function
    End If
    I = I - 1
If I > 1 Then GoTo CalcTy
Xstra = "XXX"    'Errore, I=<2 e non ancora completato il calcolo
End Function


Come usare la funzione xstra e' descritto in questo messaggio:
viewtopic.php?f=26&t=97956&p=613251#p563220
(layout dei dati, uso del codice, uso delle formule)
Nei messaggi successivi ci sono le esperienze di un paio di utenti.

La funzione e' equivalente a una macro, salvo che si usa in una formula.
Questo comunque implica che il file deve essere salvato nel formato "macro enabled" (xlsm) e le macro devono essere abilitate all'apertura del file; la configurazione di sicurezza che suggerisco sempre e' "Disattiva le macro previa notifica", modificabile in Opzioni, Centro di protezione, Impostazioni Centro di protezione, impostazione Macro (corrisponde a "livello di protezione Medio" in XL2003 e inferiori).

Quanto alla formula per la colonna M, se ho capito bene potrebbe andare bene (con il tuo attuale layout dati) la formula
Codice: Seleziona tutto
=SE(E(CONTA.SE(festivi;A4)>0;B4="Riposo");1;0)

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19213
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL straordinari

Postdi massimo311273 » 30/08/15 17:21

Grazie ci guarderò con calma e grazie anche per la formula in M per ora ciao
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi massimo311273 » 30/08/15 19:41

Ciao Anthony, scusa ho provato a cerare il file con i passaggi che avete descritto nei link da te evidenziati, ma proprio non ci riesco! non è che hai un file già creato così da poterlo studiare meglio, ti ringrazio per l'enorme pazienza ma sono evidentemente negato, grazie ciao.
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi Anthony47 » 02/09/15 21:03

Non ho un foglio di presenze da condividere.
Segui le istruzione presentate qui: http://mail.pc-facile.com/forum/viewtop ... 51#p563220
E' indicato il tracciato da utilizzare, come impostare la tabella delle definizioni, le formule da utilizzare; il codice piu' aggiornato e' quello che ti ho inviato qualche giorno fa.

Se poi ti serve aiuto per capire la tabella delle definizioni, o qualsiasi altra cosa, siamo qui.
Avatar utente
Anthony47
Moderatore
 
Post: 19213
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL straordinari

Postdi massimo311273 » 03/09/15 00:22

Ho risolto con le formule, non so come ma i conti tornano, ti ringrazio tanto per la tua immensa pazienza, ma ben presto avrò qualche altro quesito spero di poter contare ancora una volta su di voi, ciao
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi massimo311273 » 04/09/15 07:19

Ciao, sono di nuovo qui il problema è questo:
Io ho due colonne, in una es.A1 ho 1(uno) e nell'altra es.B1 ho 1(uno),
in fondo ad ogni colonna diciamo A31 e B31 ho la somma rispettiva di ogni colonna,
io vorrei che se in Colonna A, es. A7 ho 1(uno) e nella Colonna B ho 1, se é nelle prime 9 celle successive ad A7 il risultato deve darmelo in B31
se invece 1(uno) l'ho dopo la nona cella il ricultato deve darmelo in B32, in tutto deve proseguire per il foglio successivo che é il mese successivo,
spero di essere stato chiaro, ciao grazie.
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi massimo311273 » 04/09/15 17:21

Ah! dimenticavo è chiaro che in B31 poi deve essere 0 se in B32 c'è 1, ciao grazie.
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi Anthony47 » 04/09/15 23:27

spero di essere stato chiaro

Come in una selva oscura in una notte di luna nuova; comunque butto la una ipotesi a caso:
In A31 e A32 rispettivamente
Codice: Seleziona tutto
=SE(SOMMA(--(($A8:$A16)*($B8:$B16)=1))>0;SOMMA(A$1:A$30);0)

Codice: Seleziona tutto
=SE(SOMMA(--(($A17:$A30)*($B17:$B30)=1))>0;SOMMA(A$1:A$30);0)

Ambedue da confermare con Contr-Maiusc-Enter, non il solo Enter; poi copiare in B31:B32

in tutto deve proseguire per il foglio successivo che é il mese successivo
Che c'entra il foglio successivo con quello che hai descritto?

Comunque, se "per caso" quanto proposto non risolve allora sara' meglio che alleghi almeno una immagine dei dati di cui parli, chiarendo meglio come variano i dati di colonna A e colonna B, che calcolo vuoi sia fatto in A/B31 oppure A/B32, e cosa c'entra il foglio successivo.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19213
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL straordinari

Postdi massimo311273 » 05/09/15 10:03

Come faccio ad allegare le immagini?
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi Anthony47 » 05/09/15 12:39

Per allegare un file o una immagine leggi qui: viewtopic.php?f=26&t=103893
Avatar utente
Anthony47
Moderatore
 
Post: 19213
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL straordinari

Postdi massimo311273 » 06/09/15 05:44

Allora provo a spiegarti meglio il mio contratto di lavoro:
Il mio datore di lavoro può chiedermi di lavorare al giorno di riposo, che in ogni caso io devo recuperare (cioè stare a casa 1 giorno)
quando lavoro al giorno di riposo percepisco una maggiorazione del 30% se il riposo viene recuperato nei successivi 7 giorni lavorativi
altrimenti percepisco una maggiorazione del 40% per qualunque altro giorno successivo ai primi 7 giorni "per questo dicevo che il calcolo si deve protrarre anche al mese successivo (ma questo lo risolvo in altro modo)
il foglio è creato cosi per la sezione dei riposi lavorati
in U4 ho il totale delle ore lavorate nel giorno di riposo il calcolo mi restituisce sempre 7:15 perché in realtà ma differenza di maggiorazione avviene solo per le ore ordinarie 30% - 40%
in W4 ho ore di straordinario lavorate nel giorno di riposo queste sono già del 40% quindi non subiscono variazioni
in Y4 ho riposo da recuperare qui vi rileva solo se io ho lavorato un riposo quindi ho 1 se il GG X ho lavorato
in Z4 e qui è il problema mi deve dire se il giorno rilevato in Y4 io l'ho recuperato entro i sette giorni oppure oltre i sette giorni, quindi in Z53 deve darmi un risultato dei giorni che recupero entro i 7 lavorativi
e in Z54 deve darmi il risultato dei giorni che recupero oltre i 7 giorni.

PS. c'è da tenere in considerazione che il contratto dice 7 giorni effettivamente lavorati, essendo che io adopero un sistema di turnazione 6+1+1 cioè 6 lavoro 1 riposo 1 permesso i giorni su cui effettuare il calcolo sono in realtà sono 9 perché per comporre i 7 giorni realmente lavorati cadranno obbligatoriamente dentro 1 permesso 1 riposo e un altro permesso quindi sarà cosi

riposo che lo lavoro
permesso che non posso calcolarlo nei giorni effettivamente lavorati
lavoro 1°
lavoro 2°
lavoro 3°
lavoro 4°
lavoro 5°
lavoro 6°
Riposo che non posso calcolarlo nei giorni effettivamente lavorati
permesso che non posso calcolarlo nei giorni effettivamente lavorati
lavoro 7° giorno effettivamente lavorato
entro questo settimo maggiorazione x
dopo maggiorazione y

spero che adesso sia più chiaro, non prendertela con me per questi calcoli è colpa di stila i contratti, "che vanno sempre a vantaggio dei lavoratori con regole semplici è chiare" hahahaha!!!!!
Ah! è questo non è niente.......

Se poi tu volessi darmi un indirizzo e-mail per me sarebbe più facile inviarti immagini file e quant'altro, Anthony ti ringrazio veramente tanto per la pazienza che mi stai dimostrando, ciao
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi Anthony47 » 07/09/15 00:40

Mancherebbe ancora qualche informazione normativa, ad esempio se e' possibile che un secondo "Riposo" venga lavorato prima di fare il "Recupero" precedente.
Poi non ho capito quali sono le due colonne su cui verificare la distanza: se colonna Y indica (con un "1") se un Riposo e' stato lavorato, quale e' la colonna che indica che quel giorno e' da intendersi come giorno di Recupero?
Supponendo che "No, non si possono lavorare piu' Riposo senza aver prima fatto il recupero precedente" e che la colonna che indica con un "1" che si tratta di un Recupero sia la Z, e che la data dell'evento sia in colonna C, allora potresti usare in AA4 e AB4 rispettivamente le formule
Codice: Seleziona tutto
=SE(Y4=1;MATR.SOMMA.PRODOTTO(--(C5:C18<=(C4+10));--(Z5:Z18=1));"")

Codice: Seleziona tutto
=SE(Y4=1;1-AA4;"")


Per quanto riguarda il "continuare sul mese successivo", il mio suggerimento e' che accodi ai dati del mese i primi 10 del mese successivo, compreso la data.
Se i fogli sono nominati per esempio Agosto, Settembre, Ottobre etc allora puoi riportare la data del "mese successivo", usando ad esempio in C35 la formula
Codice: Seleziona tutto
=INDIRETTO(INDIRIZZO(RIF.RIGA(C4);RIF.COLONNA(C4);4;1;TESTO(FINE.MESE($C13;0)+1;"mmmm")))

La formula puo' essere copiata verso il basso (per le altre date) e in Y35:Z35 e sottostanti (per le informazioni relative ai Riposi lavorati e Recuperi effettuati); e dovrebbe replicarsi correttamente quando copi un foglio per creare il mese successivo.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19213
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL straordinari

Postdi massimo311273 » 07/09/15 03:46

Hai ragione manca qualcosa, infatti ciò riflettuto dopo aver postato il massaggio, passo subito a confermati che si può succedere posso lavorare uno dei riposi successivi prima di recuperare i precedenti, tu hai lavorato anche sulle colonne descrittive tipo quella dove vi è proprio scritto riposo, anche questa opzione l'avevo pensata però ti ho proposto di lavorare su Y e Z perché nella mia immensa ignoranza pensavo più semplice, comunque Y diciamo che è quella fissa cioè quella che rileva il riposo lavorato la Z e quella dinamica cioè calcola la "distanza" tra Y il giorno lavorato e Z il giorno nel quale non lavorerò con la logica dei 7 gg cioè recupero riposo, le celle AA e successive sono già occupate perché le cose da calcolare sono tante, diverse già le ho fatte. es. Degli argomenti, I vari tipo di straordinari, indennità domenicali e di rischio, la flessibilità delle ore di lavoro, e banca ore qua poi avanti riderai, e le varie assenze malattia ecc. Non è un foglio di calcolo è un papiro anzi rotolini regina............. scusa mi sono dilungato, questa mattina quando rientro vedrò come rispondono le tue formule.

P.S. non è possibile una e-mail di appoggio? Grazie mille ciao.
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi massimo311273 » 07/09/15 15:15

Ho provato le formule, il concetto è corretto ma non mi da il risultato sperato, ciao
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi Anthony47 » 07/09/15 23:50

L'obiettivo del forum e' diffondere conoscenza, quindi per principio non sono disponibile a supportare problemi posti via mail. Se non puoi pubblicare un esempio di file pubblica almeno una immagine da cui si possa desumere il tracciato record e le coordinate delle celle...

Ho provato le formule, il concetto è corretto ma non mi da il risultato sperato
La formula che ti ho dato valeva se "No, non si possono lavorare piu' Riposo senza aver prima fatto il recupero precedente" e usava la colonna Z per marcare le righe che dovevano essere intese come Recuperi.
Tu l'hai provata con questi presupposti o come?

Intanto ancora non ho capito, anche dopo il messaggio di "stamattina presto", come si identifica un Riposo compensativo. Cioe' siamo partiti (viewtopic.php?f=26&t=74698&p=615360#p615233) a cercare la "distanza" tra gli "1" in due colonne ma poi l'1 me lo dai solo in colonna Y (= lavorato in giorno di Riposo) e non ho capito dove e' il secondo...

Altra domanda: visto che si puo' lavorare piu' giorni di Riposo prima di recuperare, come vanno considerati i Recuperi rispetto ai giorni lavorati? Contrattualmente il primo recupero si abbina col primo lavorato, il secondo col secondo e cosi' via, o posso cercare la migliore combinazione per il DATORE di LAVORO? :D

Questi due chiarimenti sono necessari per riformulare un'altra ipotesi di soluzione.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19213
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL straordinari

Postdi massimo311273 » 08/09/15 07:51

Ti rispondo in due fasi, lo scopo del forum mi è chiaro e comprendo il tuo discorso, ma io intendo inviandoti il File via e-mail darti la possibilità di visionare la realtà del progetto, dopo di ché la soluzione sarà comunque postata con formule e descrizione celle e cosa risolvono, questo è senza ombra di dubbio, per quanto riguarda il postare un'immagine mi comporta iscrizioni e iscrizioni cosa per la quale ti sembrerà stupido ma non mi piace fare, io sono iscritto ai siti "a me indispensabili" e poi per un servizio momentaneo altrimenti a pagamento, e comunque una volta avuto il file potresti comunque postare tu la soluzione con relative immagini chiaramente è una proposta la mia, che ne pensi? se po' fa!!!!!?????
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi massimo311273 » 08/09/15 08:53

Scusa ma nel frattempo ho fatto delle modifiche al file ma il concetto non cambia arrivo al dunque
Il mio datore di lavoro può chiedermi di lavorare al giorno di riposo
(in B4 c'è la colonna che descrive l'attività che faccio quel giorno, in questo caso [Riposo] che diventa [Riposo/] se presto la mia opera perché dopo lo Slash inserisco a mano la descrizione Es. "Riposo/Antirapina" ),
che in ogni caso io devo recuperare (cioè stare a casa 1 giorno).

Quando lavoro al giorno di riposo percepisco una maggiorazione del 30% se il riposo viene recuperato nei successivi 7 giorni effettivamente lavorativi, altrimenti percepisco una maggiorazione del 40% per qualunque altro giorno successivo ai primi 7 giorni "per questo dicevo che il calcolo si deve protrarre anche al mese successivo,
(in W4 ho solo le ore di straordinario perché le ordinarie le trovo già in J4 che è il calcolo [Ord. J4 Straord. L4] visto che calcolo la maggiorazione su quota giornaliera e non oraria invece lo straordinario è calcolato in quota oraria con maggiorazione del 40%)
(in U4 ho la rilevazione "1" del giorno di riposo lavorato con questa formula [=CONTA.SE(B4;"*Riposo/*")] ecco perché in B4 ho le due voci [Riposo] e [Riposo/] con menù a tendina) Quindi Es. B4 "Riposo/", U4 "1"

(in V4 ho la rilevazione "1" del giorno che rileverò quando recupero il giorno di riposo con questa formula [=CONTA.SE(B4;"Recupero Riposo")] quindi in B4 ho anche la voce [Recupero Riposo] nel menù a tendina) Quindi Es. B6 "Recupero Riposo", V6 "1"

Es.
B4 "Riposo/", U4 "1"
B14 "Recupero Riposo", V16 "1" (dentro i 7 sette giorni effettivamente lavorati) magg. 30%
B12 "Riposo/" U12 "1"
B14 "Recupero Riposo", V23 "1" (oltre i 7 sette giorni effettivamente lavorati) magg. 40%

Questo esempio dovrebbe anche spiegare il fatto che può succedere di lavorare uno dei riposi successivi prima di recuperare i precedenti, è chiaro che il primo Riposo va con il primo Recupero e il secondo va con il secondo.

Di conseguenza calcolerò le maggiorazioni del 30% in V35, cioè deve sommare solo i giorni che ho recuperato nei famosi 7 giorni in modo da fare Es. =E35+magg.30%= €35,00
e calcolerò le maggiorazioni del 40% in V36, cioè deve sommare solo i giorni che ho recuperato oltre famosi 7 giorni in modo da fare Es. =E36+magg.40%= €40,00
in U35 ho la somma della colonna U in V35 quella di V, in U36 ho la sottrazione tra U35 e V35 in caso che Es. lavoro due riposi ma ne recupero solo uno in quanto i giorni li dovrò sempre recuperare non c'è un termine un mese un anno si sommano sempre.

Ti prego dimmi che così è più comprensibile altrimenti non so più cosa fare, ciao :cry: :lol:
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

Re: EXCEL straordinari

Postdi Anthony47 » 09/09/15 22:11

(in U4 ho la rilevazione "1" del giorno di riposo lavorato con questa formula [=CONTA.SE(B4;"*Riposo/*")] ecco perché in B4 ho le due voci [Riposo] e [Riposo/] con menù a tendina) Quindi Es. B4 "Riposo/", U4 "1"

(in V4 ho la rilevazione "1" del giorno che rileverò quando recupero il giorno di riposo con questa formula [=CONTA.SE(B4;"Recupero Riposo")] quindi in B4 ho anche la voce [Recupero Riposo] nel menù a tendina) Quindi Es. B6 "Recupero Riposo", V6 "1"

Es.
B4 "Riposo/", U4 "1"
B14 "Recupero Riposo", V16 "1" (dentro i 7 sette giorni effettivamente lavorati) magg. 30%
B12 "Riposo/" U12 "1"
B14 "Recupero Riposo", V23 "1" (oltre i 7 sette giorni effettivamente lavorati) magg. 40%

E' piu' chiaro perche' tra le cose che hai detto c'e' l'indicazione di quale colonna indica il Recupero (colonna V).

Pero' perche' continui a cambiare le coordinate delle colonne? All'inizio erano A e B, poi Y e "??", ora sono U e V; ricordo in proposito una delle raccomandazioni contenute nel messaggio "Linee guida per pubblicare le vostre domande", vedi viewtopic.php?f=26&t=103911&p=605595#p605595

5) Evitate di pubblicare strutture dati diverse da quelle che in realta' dovete gestire, a meno che non siete certi di riuscire ad adattare autonomamente le risposte che vi verranno fornite.


Di conseguenza calcolerò le maggiorazioni del 30% in V35, cioè deve sommare solo i giorni che ho recuperato nei famosi 7 giorni in modo da fare Es. =E35+magg.30%= €35,00
e calcolerò le maggiorazioni del 40% in V36, cioè deve sommare solo i giorni che ho recuperato oltre famosi 7 giorni in modo da fare Es. =E36+magg.40%= €40,00
in U35 ho la somma della colonna U in V35 quella di V, in U36 ho la sottrazione tra U35 e V35 in caso che Es. lavoro due riposi ma ne recupero solo uno in quanto i giorni li dovrò sempre recuperare non c'è un termine un mese un anno si sommano sempre.
Questa non l'ho capita, perche' dagli "1" in col U e V non si capisce se la maggiorazione deve essere al 30% o al 40%. Insomma il calcolo lo dovrai fare su un'altra colonna dove metteremo l'esito della verifica della distanza tra Lavorato e Recuperato.

Quanto all'accoppiamento tra Riposo-lavorato e Recupero-riposo prendo nota della tua indicazione, ma sappi che il datore di lavoro potrebbe avere un'interpretazione diversa, che potrebbe fargli risparmiare in qualche caso la maggiorazione dal 30% al 40%.

Cio' detto, la cosa piu' semplice e' farla con una funzione ad hoc, ma prima sono necessarie alcune modifiche ai tuoi dati:
-diamo per scontato che i fogli si chiamino Gennaio, Febbraio, Marzo, ... Dicembre
-supponiamo che cominciamo a compilare questi dati dal mese di Settembre: crea due fogli vuoti e nominali Agosto e Ottobre (Ottobre sara' poi sostituito); poi crea il foglio "Settembre" con tutta la struttura dati e le formule compreso quanto diremo da qui in avanti; il foglio deve contenere tutte le date del mese e deve essere predisposto per i mesi da 31 gg.
-e' necessario che sia noto quanti Riposi-lavorati non sono stati ancora recuperati a inizio mese; io l'ho immaginato in U2 ("riporto in entrata" da mese precedente), da calcolare con la formula
Codice: Seleziona tutto
=INDIRETTO(INDIRIZZO(RIF.RIGA(V2);RIF.COLONNA(V2);4;1;TESTO(FINE.MESE($C13;-1);"mmmm")))

-analogamente e' necessario calcolare il "riporto in uscita" per il mese successivo; io l'ho calcolato in V2 con la formula
Codice: Seleziona tutto
=MATR.SOMMA.PRODOTTO(--(MESE(C4:C45)=MESE(C13));U4:U45)-MATR.SOMMA.PRODOTTO(--(MESE(C4:C45)=MESE(C13));V4:V45)+U2

-sara' necessario che il foglio del mese successivo erediti questo valore di "riporto in uscita" come suo "riporto in entrata", e questo sara' fatto dalla formula gia' messa in U2.
-per calcolare il ritardo per eventuali Recuperi fatti al mese successivo e' necessario che ai dati del mese vengano accodati 10 righe di dati provenienti dal mese "successivo", limitatamente ai valori Data, Riposo-lavorato (colonna U) e Recupero-riposo (colonna V); userai per la colonna U, a partire da U35 la formula che ti avevo gia' suggerito:
Codice: Seleziona tutto
=INDIRETTO(INDIRIZZO(RIF.RIGA(U4);RIF.COLONNA(U4);4;1;TESTO(FINE.MESE($C13;0)+1;"mmmm")))

Poi copierai in colonna V e nella colonna della data, infine copi tutta la riga 35 fino alla riga 44, corrispondente a 10 giorni del mese "successivo". Queste formule potrebero restituire un errore se i fogli "mese precedente" e "mese successivo" non fossero presenti, errori che scompariranno quando i fogli vengono inseriti.
-sara' necessaria una ulteriore colonna adiacente a U-V, quindi W, per accoppiare un Recupero-riposo al "suo" Riposo-lavorato. Per questo metterai in W4 la formula
Codice: Seleziona tutto
=SOMMA(V$4:V4)-$U$2
che copierai fino a fine tabella, cioe' fino a W44
-A questo punto inserisci tra le macro questo codice:
Codice: Seleziona tutto
Function myRecuperi(ByRef myWorkRec As Range, ByRef myData As Range, Optional ByVal myDb As Boolean = False) As Variant
Dim WArr1, WArrD, myOut() As String, I As Long, J As Long, UBW1 As Long, LBW1 As Long
Dim myCDate As Date, Paired As Boolean, WCnt As Long, myD As Double

ReDim myOut(1 To myWorkRec.Rows.Count)
If myWorkRec.Rows.Count <> myData.Rows.Count Then
    myOut = CVErr(xlErrValue): myRecuperi = myOut
    Exit Function
End If
WArr = myWorkRec.Value
WArrD = myData.Value
UBW1 = UBound(WArr, 1)
LBW1 = LBound(WArr, 1)
ReDim myOut(LBW1 To UBW1)

For I = LBound(WArr, 1) To UBW1
    If WArr(I, LBW1) = 1 And Month(WArrD(I, 1)) = Month(WArrD(1, 1)) Then
        Paired = False: WCnt = WCnt + 1
        myCDate = WArrD(I, 1)
        For J = I + 1 To UBW1
            If myDb Then myD = J / 1000
            If WArr(J, LBW1 + 1) = 1 And WArr(J, LBW1 + 2) = WCnt Then
                Paired = True
                If WArrD(J, 1) < myCDate + 10 Then
                    myOut(I) = 1 + myD
                Else
                    myOut(I) = 2 + myD
                End If
            Else
                'nulla
            End If
            If Paired Then Exit For
        Next J
        If Not Paired Then myOut(I) = "P"
    End If
Next I

myRecuperi = Application.WorksheetFunction.Transpose(myOut)

End Function

Torna sul foglio Excel in costruzione, seleziona la prima cella in cui vuoi fare il calcolo del ritardo nel recupero, ad esempio X4, e inserisci la formula
Codice: Seleziona tutto
=myRecuperi(U4:W44;C4:C44)

Cosa ci sia in U4:W44 oramai l'abbiamo detto; in C4:C44 invece ho immaginato ci sia la data, adatta al tuo layout di dati (che non conosco).
Infine:
-seleziona U4:U44, premi F2, quindi conferma la formula con Contr-Maiusc-Enter, non il solo Enter.
Per prova compila qualche cella in colonna U (Riposo lavorato) e il rispettivo Recupero, e vedi se il risultato in colonna X e' soddisfacente:
1=Recupero in tempo
2=Recupero fuori tempo
P=Recupero non ancora fatto; poiche' questo dato e' calcolato gia' considerando i primi 10 gg del mese successivo, P e' da assimilare a "Recupero fuori tempo"

A questo punto crea una copia del foglio Settembre usando il comando "Sposta o copia (foglio)", e chiamala Ottobre (previa eliminazione dell'Ottobre vuoto creato inizialmente). Non e' necessario compilare tutti i mesi, quello che e' indispensabile e' il foglio "precedente" a quello che devi compilare e quello "successivo".

Prova se eventuali recuperi fatti in Ottobre vengono conteggiati regolarmente in Settembre.
Controlla che Ottobre erediti il "Riporto in uscita" di settembre.

Agosto puo' rimanere vuoto, salvo che non ci sia un "Riporto in uscita" da passare a Settembre, che scriverai "a mano" in V2 (di Agosto).

Se il collaudo fosse positivo, allora consiglio di cancellare i dati (non la struttura e le formule) del mese e creare una copia di questo foglio nominandolo "ModelloMese": sara' questo che duplicherai mese dopo mese per creare i fogli mensili necessari.

Quando un foglio e' completo (tutti i giorni compilati) e' necessario congelare il Riporto in entrata (cella U2) per interrompere il link col mese precedente (questo servira' dopo 11 mesi, comunque e' utile fare questa operazione mese per mese). Allo scopo: selezionare U2, premere F2 e poi F9; questo sostituira' la formula col valore.

Arrivati a compilare dicembre puoi inserire un foglio col nome Gennaio e continuerai la compilazione.
Arrivati a compilare gennaio puoi inserire un foglio col nome Febbraio e continuerai la compilazione.

Quando arriverai a compilare luglio dovrai eliminare il foglio Agosto (quello vuoto iniziale) e inserire un nuovo foglio Agosto.
E cosi' via (cancellare foglio dell'anno prima e inserire un nuovo foglio "mese successivo").

Se hai avuto la pazienza di seguirmi non mi rimane che augurarti buone prove...
Avatar utente
Anthony47
Moderatore
 
Post: 19213
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL straordinari

Postdi massimo311273 » 10/09/15 03:02

Ciao Anthony, mi dispiace di non essere capace ad esprimermi, il tuo lavoro è a dir poco eccellente, ma quello che io intendo chiedere non è questo, questo in modo più semplice e spartano l'ho già fatto,
Il mio foglio è composto così:
parte da A3 la riga 3 e dove vi sono le varie nomenclature delle colonne quindi la celle calcolabili partono come dicevamo da A4,B4,C4 ecc. ecc.
quindi ti faccio la composizione del mio foglio
A3= Data: dove ci sono i giorni del mese quindi a partire da A4 c'è 1 gen venerdì
B3= Servizio: il nome del cliente per il quale la mia azienda mi manda ES. Unicredit banca tutto gestito da un menu a tendina e qui viene fuori anche la dicitura Riposo, Riposo/, e Recupero riposo
C3=tipologia di servizio: Es. antirapina, pattugliamento ecc. ecc. che mi serve per calcolare l'indennità di rischio
D3, E3,F3,G3 c'è dalle alle dalle alle: Es.07:00 14:00 15:00 16:30
H3 Totale ore lavorate: Es. 8:30
I3 Totale ore lavorate in centesimali
J3 Ore ordinarie feriali: le mie ordinarie sono 7:15 quindi qui ci sarà scritto Es. 7:15
K3 Ore ordinarie feriali: in centesimali
L3 Ore straordinarie feriali: Es. 1:15
M3 Ore straordinarie feriali: in centesimali
N3 Ore ordinarie festive: Es. 7:15
O3 Ore ordinarie festive: in centesimali
P3 Ore straordinarie festive: Es. 1:15
Q3 Ore straordinarie festive: in centesimali
R3 Festivo da recuperare:
S3 Recupero festivo:
T3 Riposo giornaliero 11 ore: cioè prima di poter montare in servizio devono passare almeno 11 Ore di riposo ma questa è un'altra cosa per le quale hai già risposto in passato ma necessita di modiche.
U3 Riposi da recuperare: e qui cominciano i dolori,
Io già so quali e quanti riposi ho da recuperare tramite questa formula: =CONTA.SE(B4;"*Riposo/*") che rileva se in "B4 Servizio" quel giorno che dovrei essere di riposo ho lavorato, selezionando dal menu a tendina anziché " Riposo" "Riposo/" quindi selezionando "Riposo/" in U4 mi appare 1
V3 Riposo recuperato:
Io già so se ho recuperato il riposo tramite questa formula: =CONTA.SE(B4;"Recupero Riposo") che rileva se in "B4 Servizio" se quel giorno che avrei dovuto lavorare invece sono stato a casa, selezionando dal menu a tendina anziché "il cliente Es. Unicredit Banca" seleziono "Recupero riposo" e in V4 mi appare 1
W3 Straordinari Riposo Lavorato
X3 Straordinari Riposo Lavorato: in centesimali
e fino alla colonna BO sono già occupate
adesso facciamo un passo indietro, per sapere quanti giorni di riposo devo recuperare mi basta fare la somma che ho già fatto.
il problema nasce nel sapere il totale dei riposi recuperati per i quali non posso fare una semplice somma come per la colonna U a causa della regola dei sette giorni, quello che io voglio sapere è solo il totale dei giorni recuperati nei sette giorni e il totale di quelli recuperati oltre i sette giorni
Es. io lavoro tre i giorni di riposo su quattro ma due li recupero entro i sette giorni e uno lo recupero oltre i sette giorni, io voglio che a fine della colonna V, in V35 mi venga come totale 2, i due recuperati entro i sette giorni
e sotto nella cella V36 mi venga come totale 1 il giorno che ho recuperato altre i sette giorni
é solo questione di somme, ma deve calcolare i due entro i sette e l'uno oltre
perche poi ci dovrò fare i calcoli i due maggiorano del 35% e l'uno del 40, ma questa è un'altra cosa.

Mi scuso ancora per il tempo che ti sto rubando ma è un casino spero che questa volta mi sia espresso meglio, ciao e grazie ancora.
massimo311273
Utente Junior
 
Post: 68
Iscritto il: 25/08/08 12:15
Località: Pavia

PrecedenteProssimo

Torna a Applicazioni Office Windows


Topic correlati a "EXCEL straordinari":


Chi c’è in linea

Visitano il forum: Carletto Ribolla e 22 ospiti