Beräkna antalet arbetsdagar mellan två datum med VBA i Microsoft Excel

Anonim

I den här artikeln kommer vi att skapa en användardefinierad funktion (UDF) för att räkna antalet arbetsdagar mellan de angivna datumen, inklusive eller exkludera lördagar och söndagar som helgdagar.

Rådata för detta exempel består av ett startdatum och ett slutdatum. Vi vill räkna antalet arbetsdagar mellan dessa datum.

Vi har angett semesterdatum i kolumn A i bladet "Semester".

Excel har inbyggd funktion, NETWORKDAYS för att räkna antalet arbetsdagar mellan intervallet.

Syntax för funktionen NETWORKDAYS

NETWORKDAYS (StartDate, EndDate, [Holidays])

Denna funktion utesluter det datum som anges i helgdagslistan, samtidigt som antalet arbetsdagar räknas.

Denna funktion betraktar lördagar och söndagar som veckor som standard, så vi kan inte räkna antalet arbetsdagar om vi bara har en ledig vecka.

Vi har skapat "CountWorkingDays" anpassad funktion för att räkna antalet arbetsdagar mellan intervallet. Denna anpassade funktion hanterar problemet med NETWORKDAYS -funktionen. I den här funktionen kan vi räkna antalet arbetsdagar även om det bara är en vecka ledig antingen på lördag eller söndag.

Syntax för anpassad funktion

CountWorkingDays (StartDate, EndDate, InclSaturdays, InclSundays)

InclSaturdays och InclSundays är valfria parametrar. Som standard har båda TRUE -värden. För att ändra lördagar och söndagar till arbetsdagar, ändra värdet på respektive parameter till FALSE.

Microsoft introducerade NETWORKDAYS.INTL -funktionen med Excel 2010. Denna funktion hanterar problemet med NETWORKDAYS -funktionen. I den här funktionen kan vi ange veckodagarna. Vi kan antingen ange en eller två dagar som ledig vecka.

Syntax för funktionen NETWORKDAYS.INTL

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

I helgparametern kan vi ange veckodagar.

I det här exemplet kommer vi att använda alla ovanstående tre funktioner för att räkna antalet arbetsdagar.

Logisk förklaring

I funktionen "CountWorkingDays" kontrollerar vi först om ett visst datum i parametern finns i den angivna semesterlistan. Om datumet finns i semesterlistan räknas den dagen inte i antalet arbetsdagar. Om datumet inte finns i semesterlistan, kontrollera om datumet är lördag eller söndag. Baserat på den angivna inmatningsparametern, kontrollera om du vill inkludera eller utesluta lördagar eller söndagar som semester.

Kodförklaring

Ställ in RngFind = Worksheets ("Holidays"). Kolumner (1) .Find (i)

Ovanstående kod används för att hitta platsen där det angivna datumet finns i semesterlistan.

Om inte RngFind är ingenting då

GoTo ForLast

Avsluta om

Ovanstående kod används för att kontrollera om angivet datum finns i semesterlistan. Om villkoret returnerar SANT, räknas den dagen inte i antalet arbetsdagar.

Följ koden nedan

 Alternativ 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' Hitta platsen där det angivna datumet finns i semesterbladet Ställ in RngFind = Arbetsblad ("Helgdagar"). Kolumner (1) .Find (i) Vid fel Gå till 0 'Kontrollera om det är semester på det angivna datumet Om inte RngFind är ingenting Därefter går GoTo ForLast End If 'Kontrollerar om det är lördag på givet datum If InclSaturdays Then If Weekday (i, 2) = 6 Sedan GoTo ForLast End If End Om' Kontrollerar om det är söndag på givet datum If InclSaturays Then If Weekday (i, 2) = 7 Gå sedan till ForLast End If End If CountWorkingDays = CountWorkingDays + 1 ForLast: Next End -funktion 

Om du gillade den här bloggen, dela den med dina vänner på Facebook. Du kan också följa oss på Twitter och Facebook.

Vi vill gärna höra från dig, låt oss veta hur vi kan förbättra vårt arbete och göra det bättre för dig. Skriv till oss på e -postwebbplatsen