Calculați numărul de zile lucrătoare între două date folosind VBA în Microsoft Excel

Anonim

În acest articol, vom crea o funcție definită de utilizator (UDF) pentru a număra numărul de zile lucrătoare între datele specificate, inclusiv sau excluzând sâmbăta și duminica ca concedii săptămânale.

Datele brute pentru acest exemplu constau dintr-o dată de începere și o dată de încheiere. Vrem să numărăm numărul de zile lucrătoare dintre aceste date.

Am specificat datele sărbătorilor în coloana A din foaia „Sărbători”.

Excel are funcția încorporată, NETWORKDAYS pentru a număra numărul de zile lucrătoare dintre interval.

Sintaxa funcției NETWORKDAYS

NETWORKDAYS (StartDate, EndDate, [Holidays])

Această funcție va exclude data specificată în lista Sărbători, în timp ce se numără numărul de zile lucrătoare.

Această funcție consideră sâmbăta și duminica ca opțiuni săptămânale în mod implicit, deci nu putem număra numărul de zile lucrătoare, în cazul în care avem o singură săptămână liberă.

Am creat funcția personalizată „CountWorkingDays” pentru a număra numărul de zile lucrătoare dintre interval. Această funcție personalizată tratează problema funcției NETWORKDAYS. În această funcție, putem număra numărul de zile lucrătoare chiar dacă există o singură săptămână liberă sâmbătă sau duminică.

Sintaxa funcției personalizate

CountWorkingDays (StartDate, EndDate, InclSabdays, InclSundays)

InclSdays și InclSundays sunt parametri opționali. În mod implicit, ambele au valori ADEVĂRATE. Pentru a schimba sâmbăta și duminica în zile lucrătoare, schimbați valoarea parametrului respectiv la FALS.

Microsoft a introdus funcția NETWORKDAYS.INTL cu Excel 2010. Această funcție gestionează problema funcției NETWORKDAYS. În această funcție, putem specifica zilele libere săptămânale. Putem specifica fie una, fie două zile ca săptămână liberă.

Sintaxa funcției NETWORKDAYS.INTL

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

În parametrul de weekend, putem specifica zilele libere de săptămână.

În acest exemplu, vom folosi toate cele trei funcții de mai sus pentru a număra numărul de zile lucrătoare.

Explicație logică

În funcția „CountWorkingDays”, verificăm mai întâi dacă data dată din parametru există în lista de sărbători specificată. Dacă data există în lista de sărbători, atunci acea zi nu se ia în considerare în numărul de zile lucrătoare. Dacă data nu există în lista de sărbători, verificați dacă data dată este sâmbătă sau duminică. Pe baza parametrului de intrare furnizat, verificați dacă să includeți sau să excludeți sâmbăta sau duminica ca sărbătoare.

Explicarea codului

Setați RngFind = foi de lucru („Sărbători”). Coloane (1). Găsiți (i)

Codul de mai sus este utilizat pentru a găsi locația în care există data specificată în lista de sărbători.

If Not RngFind is Nothing Atunci

GoTo ForLast

End If

Codul de mai sus este utilizat pentru a verifica dacă data specificată există în lista de sărbători. Dacă condiția returnează ADEVĂRAT, atunci acea zi nu este luată în considerare în numărul de zile lucrătoare.

Vă rugăm să urmați codul de mai jos

 Opțiune Explicit Funcție CountWorkingDays (StartDate As Long, EndDate As Long, Optional InclSdays as Boolean = True, _ Optional InclSundays As Boolean = True) 'Declaring variables Dim RngGăsiți ca interval Dim i As Long for i = StartDate To EndDate On Error Resume Next' Găsirea locației în care există data specificată în foaia Holidays Set RngFind = Worksheets ("Holidays"). Coloane (1). Find (i) On Error GoTo 0 'Verificarea dacă este vacanță la data dată Dacă nu RngFind is Nothing Apoi GoTo ForLast End If 'Verificarea dacă este sâmbătă la data dată If IncSabate Then If Weekday (i, 2) = 6 Then GoTo ForLast End If End If' Verificarea dacă este duminică la data dată If IncSundays Then If Weekday (i, 2, 2) = 7 Apoi GoTo ForLast End If End If Count If CountWorkingDays = CountWorkingDays + 1 ForLast: Next End Function 

Dacă ți-a plăcut acest blog, distribuie-l prietenilor tăi de pe Facebook. De asemenea, ne puteți urmări pe Twitter și Facebook.

Ne-ar plăcea să aflăm de la dvs., să ne anunțați cum putem îmbunătăți munca noastră și o putem îmbunătăți. Scrieți-ne pe site-ul de e-mail