Beregn antallet af arbejdsdage mellem to datoer ved hjælp af VBA i Microsoft Excel

Anonim

I denne artikel opretter vi en brugerdefineret funktion (UDF) for at tælle antallet af arbejdsdage mellem de angivne datoer, inklusive eller eksklusive lørdage og søndage som fridage.

Rådata for dette eksempel består af en startdato og en slutdato. Vi vil tælle antallet af arbejdsdage mellem disse datoer.

Vi har angivet feriedatoer i kolonnen A i bladet "Ferie".

Excel har en indbygget funktion, NETWORKDAYS til at tælle antallet af arbejdsdage mellem intervallet.

Syntaks for NETWORKDAYS -funktionen

NETWORKDAYS (StartDate, EndDate, [Holidays])

Denne funktion ekskluderer den dato, der er angivet på ferielisten, mens antallet af arbejdsdage tælles.

Denne funktion betragter lørdage og søndage som week off som standard, så vi kan ikke tælle antallet af arbejdsdage, hvis vi kun har en uge fri.

Vi har oprettet "CountWorkingDays" brugerdefineret funktion til at tælle antallet af arbejdsdage mellem intervallet. Denne brugerdefinerede funktion håndterer problemet med NETWORKDAYS -funktionen. I denne funktion kan vi tælle antallet af arbejdsdage, selvom der kun er en uge fri enten lørdag eller søndag.

Syntaks for brugerdefineret funktion

CountWorkingDays (StartDate, EndDate, InclSaturdays, InclSundays)

InclSaturdays og InclSundays er valgfrie parametre. Som standard har begge SANDE værdier. Hvis du vil ændre lørdage og søndage til arbejdsdage, skal du ændre værdien af ​​den respektive parameter til FALSK.

Microsoft introducerede NETWORKDAYS.INTL -funktionen med Excel 2010. Denne funktion håndterer problemet med NETWORKDAYS -funktionen. I denne funktion kan vi angive ugedage. Vi kan enten angive en eller to dage som uge.

Syntaks for NETWORKDAYS.INTL -funktionen

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

I weekendparameteren kan vi angive ugedage.

I dette eksempel vil vi bruge alle de tre ovennævnte funktioner til at tælle antallet af arbejdsdage.

Logisk forklaring

I funktionen "CountWorkingDays" kontrollerer vi først, om en given dato i parameteren findes i den angivne ferieliste. Hvis datoen findes på ferielisten, tælles den dag ikke med i antallet af arbejdsdage. Hvis datoen ikke findes på ferielisten, skal du kontrollere, om den angivne dato er lørdag eller søndag. Baseret på den angivne inputparameter, skal du kontrollere, om du skal inkludere eller ekskludere lørdage eller søndage som ferie.

Kode forklaring

Indstil RngFind = regneark ("helligdage"). Kolonner (1). Find (i)

Ovenstående kode bruges til at finde det sted, hvor den angivne dato findes i ferielisten.

Hvis ikke RngFind er ingenting

GoTo ForLast

Afslut Hvis

Ovenstående kode bruges til at kontrollere, om den angivne dato findes på ferielisten. Hvis betingelsen returnerer SAND, tælles den dag ikke med i antallet af arbejdsdage.

Følg venligst nedenstående for koden

 Option Eksplicit funktion CountWorkingDays (StartDate As Long, EndDate As Long, Valgfri InclSaturdays As Boolean = True, _ Valgfri InclSundays As Boolean = True) 'Deklarerende variabler Dim RngFind som Range Dim i Så længe For i = StartDate To EndDate On Error Resume Next' Find den placering, hvor den angivne dato findes i feriedokumentet Indstil RngFind = Worksheets ("helligdage"). Kolonner (1) .Find (i) On Error GoTo 0 'Kontrol af, om det er ferie på den givne dato Hvis ikke RngFind er ingenting Derefter GoTo ForLast End If 'Kontrol af, om det er lørdag på den givne dato If InclSaturdays Then If Weekday (i, 2) = 6 Så GoTo ForLast End If End If' Checking it is Sunday on given date If InclSundays Then If Weekday (i, 2) = 7 Gå derefter til ForLast End If End If CountWorkingDays = CountWorkingDays + 1 ForLast: Next End -funktion 

Hvis du kunne lide denne blog, kan du dele den med dine venner på Facebook. Du kan også følge os på Twitter og Facebook.

Vi vil meget gerne høre fra dig, lad os vide, hvordan vi kan forbedre vores arbejde og gøre det bedre for dig. Skriv til os på e -mail -stedet