Calcolare il numero di giorni lavorativi tra due date utilizzando VBA in Microsoft Excel
In questo articolo, creeremo una funzione definita dall’utente (UDF) per contare il numero di giorni lavorativi tra le date specificate, inclusi o esclusi sabato e domenica 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 ferie nella colonna A del foglio “Festività”.
Excel ha una funzione incorporata, NETWORKDAYS per contare il numero di giorni lavorativi tra l’intervallo.
Sintassi della funzione NETWORKDAYS NETWORKDAYS (StartDate, EndDate, [Holidays])
Questa funzione escluderà la data specificata nell’elenco Festività, contando il numero di giorni lavorativi.
Questa funzione considera il sabato e la domenica come giorni feriali per impostazione predefinita, quindi non possiamo contare il numero di giorni lavorativi, nel caso in cui abbiamo solo una settimana di riposo.
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’è solo una settimana di riposo il sabato o la domenica.
Sintassi della funzione personalizzata
CountWorkingDays (StartDate, EndDate, InclSaturdays, InclSundays)
InclSaturdays e InclSundays sono parametri opzionali. Per impostazione predefinita, entrambi hanno valori TRUE. Per modificare il sabato e la domenica 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 chiusura della settimana. Possiamo specificare uno o due giorni come Week off.
Sintassi della funzione NETWORKDAYS.INTL
NETWORKDAYS.INTL (StartDate, EndDate, [Weekend], [Holidays])
Nel parametro weekend, possiamo specificare i giorni di chiusura della settimana.
In questo esempio, utilizzeremo tutte le tre funzioni precedenti per contare il numero di giorni lavorativi.
Spiegazione logica
Nella funzione “CountWorkingDays”, per prima cosa controlliamo se la data specificata 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 specificata è sabato o domenica. In base al parametro di input fornito, verificare se includere o escludere il sabato o la domenica come festività.
Spiegazione del codice
Set RngFind = Worksheets (“Holidays”). Columns (1) .Find (i)
Il codice sopra viene utilizzato per trovare la posizione in cui è presente la data specificata nell’elenco delle festività.
If Not RngFind Is Nothing Then GoTo ForLast End If Above viene utilizzato il codice 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.
Segui sotto per il codice
Option Explicit Function CountWorkingDays(StartDate As Long, EndDate As Long, Optional InclSaturdays As Boolean = True, _ Optional InclSundays As Boolean = True) 'Declaring variables Dim RngFind As Range Dim i As Long For i = StartDate To EndDate On Error Resume Next 'Finding the location where the specified date exist in the Holidays sheet Set RngFind = Worksheets("Holidays").Columns(1).Find(i) On Error GoTo 0 'Checking whether it is holiday on the given date If Not RngFind Is Nothing Then GoTo ForLast End If 'Checking whether it is Saturday on given date If InclSaturdays Then If Weekday(i, 2) = 6 Then GoTo ForLast End If End If 'Checking whether it is Sunday on given date 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 e Facebook.
Ci piacerebbe sentire la tua opinione, facci sapere come possiamo migliorare il nostro lavoro e renderlo migliore per te. Scrivici a [email protected]