Condividi:        

[excel] Data dopo un numero di giorni lavorativi

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

[excel] Data dopo un numero di giorni lavorativi

Postdi fabiofortitudo » 22/05/09 16:40

Ciao a tutti !!! :)
Questo è il mio primo topic quindi scusate se non sarò molto bravo ad esporre il mio problema... vedrò di diventare più esperto nei prossimi topic .... ;)

So che esiste una funzione di Excel (es. GIORNO.LAVORATIVO) che, partendo da una data (es.01/01/2009) ed aggiungendole un determinato numero di giorni (es.10) ti restituisce la data tenendo conto solo dei giorni lavorativi (es.15/01/2009), cioè non considera come giorni il sabato e la domenica.
Il mio problema consiste nel fatto che vorrei il risultato della precedente funzione, considerando però la settimana lavorativa composta da 6 giorni (e non da 5 come nella formula precedente), cioè considerando come giorno lavorativo anche il sabato.
Se fosse possibile vorrei anche escludere dai giorni lavorativi i giorni festivi infrasettimanali dovuti alle varie feste nazionali (es. 25 aprile,1°maggio,15 agosto, ecc.), come era possibile nella funzione GIORNO.LAVORATIVO.

Grazie 1000 a chiunque mi voglia rispondere !!!!!
fabiofortitudo
Newbie
 
Post: 1
Iscritto il: 22/05/09 16:12

Sponsor
 

Re: [excel] Data dopo un numero di giorni lavorativi

Postdi Flash30005 » 22/05/09 22:48

Non credo esista la funzione Giorno.Lavorativo che comprenda anche i sabati comunque puoi fare una macro mettendo nel foglio1
in A1 data inizio
In D1 metterai la seguente formula
Codice: Seleziona tutto
=GIORNO.LAVORATIVO(A1;E1-F1;0)

(al posto dello 0 vanno inserite le vacanze: celle con la data vacanze)

In E1 i giorni lavorati
in F1 la macro scriverà il numero dei sabati tra le date calcolate
Codice: Seleziona tutto
Sub Sabati()
Worksheets("Foglio1").Range("F1").Value = 0
Ini = Worksheets("Foglio1").Range("A1").Value
GL = Worksheets("Foglio1").Range("E1").Value
Sab = Worksheets("Foglio1").Range("F1").Value
For I = Ini To Ini + GL + Sab
If Weekday(I) = 6 Then
Worksheets("Foglio1").Range("F1").Value = Worksheets("Foglio1").Range("F1").Value + 1
End If
Next
End Sub

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] Data dopo un numero di giorni lavorativi

Postdi Anthony47 » 23/05/09 02:56

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.
Avatar utente
Anthony47
Moderatore
 
Post: 19223
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "[excel] Data dopo un numero di giorni lavorativi":


Chi c’è in linea

Visitano il forum: Nessuno e 67 ospiti