Calcola il conteggio dei giorni lavorativi tra due date utilizzando VBA in Microsoft Excel

Anonim

In questo articolo, creeremo una funzione definita dall'utente (UDF) per contare il numero di giorni lavorativi tra le date specificate, inclusi o esclusi i sabati e le domeniche come ferie settimanali.

I dati grezzi per questo esempio sono costituiti da una data di inizio e una data di fine. Vogliamo contare il numero di giorni lavorativi tra queste date.

Abbiamo specificato le date delle festività nella colonna A del foglio “Festività”.

Excel ha una funzione integrata, NETWORKDAYS per contare il numero di giorni lavorativi tra l'intervallo.

Sintassi della funzione NETWORKDAYS

GIORNI.LAVORATIVI(DataInizio,DataFine,[Festività])

Questa funzione escluderà la data specificata nell'elenco Festività, contando il numero di giorni lavorativi.

Questa funzione considera i sabati e le domeniche come Week off per impostazione predefinita, quindi non possiamo contare il numero di giorni lavorativi, nel caso in cui abbiamo solo una settimana off.

Abbiamo creato la funzione personalizzata "CountWorkingDays" per contare il numero di giorni lavorativi tra l'intervallo. Questa funzione personalizzata gestisce il problema della funzione NETWORKDAYS. In questa funzione possiamo contare il numero di giorni lavorativi anche se c'è una sola settimana di riposo sia di sabato che di domenica.

Sintassi della funzione personalizzata

CountWorkingDays (StartDate, EndDate, InclSaturdays, InclSundays)

InclSaturdays e InclSundays sono parametri facoltativi. Per impostazione predefinita, entrambi hanno valori TRUE. Per trasformare i sabati e le domeniche in giorni lavorativi, modificare il valore del rispettivo parametro in FALSE.

Microsoft ha introdotto la funzione NETWORKDAYS.INTL con Excel 2010. Questa funzione gestisce il problema della funzione NETWORKDAYS. In questa funzione, possiamo specificare i giorni di Week off. Possiamo specificare uno o due giorni come Week off.

Sintassi della funzione NETWORKDAYS.INTL

NETWORKDAYS.INTL(StartDate, EndDate, [Weekend], [Hosdays])

Nel parametro week-end, possiamo specificare i giorni di Week off.

In questo esempio, utilizzeremo tutte e tre le funzioni precedenti per contare il numero di giorni lavorativi.

Spiegazione logica

Nella funzione "CountWorkingDays", in primo luogo controlliamo se la data data nel parametro esiste nell'elenco delle festività specificato. Se la data esiste nell'elenco delle festività, quel giorno non viene conteggiato nel numero di giorni lavorativi. Se la data non esiste nell'elenco delle festività, controlla se la data indicata è sabato o domenica. In base al parametro di input fornito, verificare se includere o escludere i sabati o le domeniche come festivi.

Spiegazione del codice

Imposta RngFind = Fogli di lavoro("Vacanze").Colonne(1).Trova(i)

Il codice sopra viene utilizzato per trovare la posizione in cui esiste la data specificata nell'elenco delle festività.

Se non RngFind non è niente allora

Vai a per ultimo

Finisci se

Il codice sopra viene utilizzato per verificare se la data specificata esiste nell'elenco delle festività. Se la condizione restituisce TRUE, quel giorno non viene conteggiato nel numero di giorni lavorativi.

Si prega di seguire sotto per il codice

 Opzione Funzione esplicita CountWorkingDays(StartDate As Long, EndDate As Long, Optional InclSaturdays As Boolean = True, _ Optional InclSundays As Boolean = True) 'Dichiarazione delle variabili Dim RngFind As Range Dim i As Long For i = StartDate To EndDate On Error Resume Next ' Trovare la posizione in cui esiste la data specificata nel foglio Festività Imposta RngFind = Worksheets("Holidays").Columns(1).Find(i) On Error GoTo 0 'Verifica se è vacanza alla data indicata If Not RngFind Is Nothing Then GoTo ForLast End If 'Verifica se è sabato in una data data If InclSaturdays Then If Weekday(i, 2) = 6 Then GoTo ForLast End If End If 'Verifica se è domenica in una data data If InclSundays Then If Weekday(i, 2) = 7 Then GoTo ForLast End If End If CountWorkingDays = CountWorkingDays + 1 ForLast: Next End Function 

Se ti è piaciuto questo blog, condividilo con i tuoi amici su Facebook. Inoltre, puoi seguirci su Twitter e Facebook.

Ci piacerebbe avere tue notizie, facci sapere come possiamo migliorare il nostro lavoro e renderlo migliore per te. Scrivici al sito di posta elettronica