Ciao fabiofortitudo e benvenuto nel forum.
Non mi risulta esista una funzione che calcoli in base a 6 gg lavorativi a settimana; e tradurlo in formula e' inutilmente complicato in quanto, volendo gestire anche il calendario dei festivi la nuova data potrebbe includere ulteriori festivi, e cosi' la nuova data, e teoricamente cosi' ...avete capito: all' infinito. Anche considerando che e' poco probabile avere piu' di 4 festivi accodati, una formula del genere sarebbe alquanto complessa:
-la prima iterazione potrebbe essere
- Codice: Seleziona tutto
=A2+B2+MATR.SOMMA.PRODOTTO(--((GIORNO.SETTIMANA(A2+RIF.RIGA(INDIRETTO("1:"&B2));2)=7)))+SOMMA.SE(Z1:Z100;">="&A2;AA1:AA100)-SOMMA.SE(Z1:Z100;">="&(A2+B2);AA1:AA100)
(con Z1:Z100 con il calendario dei festivi, e AA1:AA100 una semplice formula di appoggio); poi questa formula diventa la base della seconda iterazione, e cosi' per almeno 4 volte.
Insomma, anche se uso volentieri le formule stavolta dico: No, grazie.
Si puo' fare invece con una "user defined function", che rispetto alla macro di Flash e' piu' diretta e fa qualche controllo in piu'.
Ad esempio questa:
- Codice: Seleziona tutto
Function Giorno_lavorativo6(Inizio As Date, GG As Integer, holy As Range) As Variant
'Calcola una data lavorativa futura considerando il Sabato lavorativo
'Uso:
'=Giorno_lavorativo6(Data-di-inizio;Durata in gg;Calendario festivi)
'es =Giorno_lavorativo6(A2;B2;Z1:Z100)
'Max 8500 gg di durata, please
'
'(c) by Anth 2009
Dim WKD As Integer, I As Integer
WKD = 0
For I = 0 To 10000
If Weekday(Inizio + I, 2) > 6 Then GoTo SkipDate
If Application.WorksheetFunction.CountIf(holy, Inizio + I) > 0 Then GoTo SkipDate
WKD = WKD + 1
If WKD >= GG Then
Giorno_lavorativo6 = Inizio + I: Exit Function
End If
SkipDate:
Next I
If I > 9999 Then Giorno_lavorativo6 = CVErr(xlErrNA)
End Function
Uso:
Da excel, Alt-F11 per aprire l' editor delle macro; Menu /Inserisci /Modulo; Copiare il codice e inserirlo nel frame bianco di dx; Tornare su excel e usare una formula del tipo
=Giorno_lavorativo6(Data-di-inizio;Durata in gg;Calendario festivi) es
- Codice: Seleziona tutto
=Giorno_lavorativo6(A2;B2;Z1:Z100)
Ciao.