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.

ArrowMain

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

ArrowHolidayList

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.

ArrowOutput

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]