Moderatori: Anthony47, Flash30005
Anthony47 ha scritto: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.
Anthony47 ha scritto:-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
massimo311273 ha scritto: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,00e 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,00in 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.
Anthony ha scritto: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.
Anthony47 ha scritto:[-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 formulache copierai fino a fine tabella, cioe' fino a fine tabella, cioe' fino a W44
- Codice: Seleziona tutto
=SOMMA(V$4:V4)-$U$2
Anthony47 ha scritto:[-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.
=INDIRETTO(INDIRIZZO(RIF.RIGA(A4);RIF.COLONNA(A4);4;1;TESTO(FINE.MESE($A13;0)+1;"mmmm")))
=SOMMA(V$4:V4)-$U$2
Erroneamente Anthony ha scritto:Infine:
-seleziona U4:U44, premi F2, quindi conferma la formula con Contr-Maiusc-Enter, non il solo Enter
in C4:C44 invece ho immaginato ci sia la data, adatta al tuo layout di dati (che non conosco).
=myRecuperi(U4:W44;A4:A44
=INDIRETTO(INDIRIZZO(RIF.RIGA(V2);RIF.COLONNA(V2);4;1;TESTO(FINE.MESE($A13;-1);"mmmm")))
=MATR.SOMMA.PRODOTTO(--(MESE(A4:A43)=MESE(A13));U4:U43)-MATR.SOMMA.PRODOTTO(--(MESE(A4:A43)=MESE(A13));V4:V43)+U2
=CONTA.SE(B4;"*Riposo/*")
=INDIRETTO(INDIRIZZO(RIF.RIGA(U4);RIF.COLONNA(U4);4;1;TESTO(FINE.MESE($A13;0)+1;"mmmm")))
=INDIRETTO(INDIRIZZO(RIF.RIGA(V4);RIF.COLONNA(V4);4;1;TESTO(FINE.MESE($A13;0)+1;"mmmm")))
=INDIRETTO(INDIRIZZO(RIF.RIGA(A4);RIF.COLONNA(A4);4;1;TESTO(FINE.MESE($A13;0)+1;"mmmm")))
=SOMMA(V$4:V4)-$U$2
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
-seleziona U4:U44, premi F2, quindi conferma la formula con Contr-Maiusc-Enter, non il solo Enter
L'istruzione giusta doveva essere (dopo aver messo la formula in X4, quella corretta che ti dico tra poco):
Infine:
-seleziona X4:X44, premi F2, quindi conferma la formula con Contr-Maiusc-Enter, non il solo Enter
Anche la formula myRecuperi considera le date come se fossero in colonna C, e l'avevo detto:
in C4:C44 invece ho immaginato ci sia la data, adatta al tuo layout di dati (che non conosco).
Quindi la formula da inserire in X4 prima di "spalmarla" sull'area X4:X44 sara'
Codice: Seleziona tutto
=myRecuperi(U4:W44;A4:A44
Per cambiare le formule in B4:B44 devi cancellare tutto il blocco (che per effetto di quella infelice istruzione ora contiene una unica formula) e ripristinare le formule originali che tu conosci bene.
Dopo queste correzioni in colonna X dovrebbero esserci, accanto agli "1" di colonna U, le voci 1 (se recupero nei termini), oppure 2 (se recupero oltre i termini) oppure "P" (che significa Pendente, cioe' non recuperato nemmeno entro i primi 10 gg del mese successivo, e quindi assimilabile a "oltre i termini").
Usa Conta.Se per contare questi valori e calcolare le maggiorazioni al 30% o 40%. Ma attenzione, perche' in colonna X sia "1" che "2" che "P" sono stringhe, quindi anche nel Conta.Se devi usare stringhe, es =Conta.Se(X4:X44;"1")
Ciao
=INDIRETTO(INDIRIZZO(RIF.RIGA(V2);RIF.COLONNA(V2);4;1;TESTO(FINE.MESE($A13;-1);"mmmm")))
=MATR.SOMMA.PRODOTTO(--(MESE(A4:A45)=MESE(A13));U4:U45)-MATR.SOMMA.PRODOTTO(--(MESE(A4:A45)=MESE(A13));V4:V45)+U2
=SOMMA(V$4:V4)-$U$2
=myRecuperi(U4:W44;A4:A44)
=INDIRETTO(INDIRIZZO(RIF.RIGA(A4);RIF.COLONNA(A4);4;1;TESTO(FINE.MESE($A13;0)+1;"mmmm")))
=DATA.VALORE("1 "&STRINGA.ESTRAI(CELLA("nomefile";A1);TROVA("]";CELLA("nomefile";A1))+1;22)&" " &A2)
=A4+1
=SE(E(MESE(A31+1)=MESE(A8);A31<>FALSO);A31+1)
Se mi permetti, questa formula restituisce un valore a caso, e lo conferma il fatto che dalle 17:00 alle 7:00 del gg dopo passano 14 ore, non 15 (ma la formula restituisce ben piu' delle 15 ore di cui parli)Es. oggi inizio alle 07:00 "D4" 14:00 "E4" 15:00 "F4" 17:00 "G4", il giorno dopo inizio di nuovo alle 07:00 "D5" le ore che non lavoro sono 15:00 ottenute con la formattazione ore e questa formula =(24-E4)+(F4-0)+(24-G4)+(D5) e fin qui ci siamo
=SE(G4<>0;(MIN(SE(D5:D7<>0;RIF.RIGA(D5:D7);""))+RIF.RIGA(D8)*(CONTA.SE(D5:D7;">0")=0)-1+1-G4-RIF.RIGA(A4)+INDICE(D$1:D7;MAX(SE(D5:D7<>0;RIF.RIGA(D5:D7);""))))*24;"")
Torna a Applicazioni Office Windows
Come impostare il formato data predefinito in excel? Autore: wallace&gromit |
Forum: Applicazioni Office Windows Risposte: 5 |
Creare un file Excel con fogli visibili in base all'accesso Autore: JanVathek |
Forum: Applicazioni Office Windows Risposte: 26 |
Screenshot automatizzato fogli excel:script?macro o...? Autore: Paolo67met |
Forum: Programmazione Risposte: 9 |
Visitano il forum: Nessuno e 21 ospiti