Beregn antall arbeidsdager mellom to datoer ved hjelp av VBA i Microsoft Excel

Anonim

I denne artikkelen vil vi opprette en brukerdefinert funksjon (UDF) for å telle antall arbeidsdager mellom de angitte datoene, inkludert eller unntatt lørdager og søndager som fridager.

Rådata for dette eksemplet består av en startdato og en sluttdato. Vi ønsker å telle antall virkedager mellom disse datoene.

Vi har spesifisert feriedatoene i kolonnen A i arket "Ferier".

Excel har innebygd funksjon, NETWORKDAYS for å telle antall arbeidsdager mellom intervallet.

Syntaks for NETWORKDAYS -funksjonen

NETTVERKSDAGER (StartDate, EndDate, [Holidays])

Denne funksjonen vil ekskludere datoen som er angitt i ferielisten, mens antall arbeidsdager teller.

Denne funksjonen betrakter lørdager og søndager som fridager som standard, så vi kan ikke telle antall virkedager i tilfelle vi bare har en uke fri.

Vi har opprettet “CountWorkingDays” tilpasset funksjon for å telle antall virkedager mellom intervallet. Denne egendefinerte funksjonen håndterer problemet med NETWORKDAYS -funksjonen. I denne funksjonen kan vi telle antall arbeidsdager, selv om det bare er en uke fri enten på lørdag eller søndag.

Syntaks for tilpasset funksjon

CountWorkingDays (StartDate, EndDate, InclSaturdays, InclSundays)

InclSaturdays og InclSundays er valgfrie parametere. Som standard har begge Sanne verdier. Hvis du vil endre lørdager og søndager til arbeidsdager, endrer du verdien til den respektive parameteren til FALSK.

Microsoft introduserte NETWORKDAYS.INTL -funksjonen med Excel 2010. Denne funksjonen håndterer problemet med NETWORKDAYS -funksjonen. I denne funksjonen kan vi spesifisere ukedager. Vi kan enten angi en eller to dager som fri uke.

Syntaks for NETWORKDAYS.INTL -funksjonen

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

I helgparameteren kan vi spesifisere Ukefridager.

I dette eksemplet vil vi bruke alle de tre ovennevnte funksjonene til å telle antall arbeidsdager.

Logisk forklaring

I funksjonen “CountWorkingDays” sjekker vi først om en gitt dato i parameteren finnes i den angitte ferielisten. Hvis datoen finnes i ferielisten, regnes den dagen ikke med i antall virkedager. Hvis datoen ikke finnes i ferielisten, må du sjekke om den oppgitte datoen er lørdag eller søndag. Basert på inngangsparameteren, sjekk om du skal inkludere eller ekskludere lørdager eller søndager som ferie.

Kode forklaring

Angi RngFind = Regneark ("Helligdager"). Kolonner (1) .Finn (i)

Koden ovenfor brukes til å finne stedet der den angitte datoen finnes i ferielisten.

Hvis ikke RngFind er ingenting da

GoTo ForLast

Slutt om

Koden ovenfor brukes til å kontrollere om angitt dato finnes i ferielisten. Hvis tilstanden returnerer SANN, teller den dagen ikke i antall virkedager.

Følg koden nedenfor

 Alternativ Eksplisitt Funksjon CountWorkingDays (StartDate As Long, EndDate As Long, Valgfri InclSaturdays As Boolean = True, _ Valgfri InclSundays As Boolean = True) 'Deklarasjonsvariabler Dim RngFind som Range Dim i Som Long For i = StartDate To EndDate On Error Resume Next' Finne stedet der den angitte datoen finnes i helligdagsarket Sett RngFind = Worksheets ("Holidays"). Kolonner (1) .Find (i) On Error GoTo 0 'Kontrollerer om det er ferie på den gitte datoen Hvis ikke RngFind er ingenting Deretter går GoTo ForLast End If 'Sjekker om det er lørdag på gitt dato Hvis InclSaturdays Then If Weekday (i, 2) = 6 Så GoTo ForLast End If End If' Checking if it is Sunday on given date If InclSundays Then If Weekday (i, 2) = 7 Gå deretter til ForLast End If End If CountWorkingDays = CountWorkingDays + 1 ForLast: Next End Function 

Hvis du likte denne bloggen, del den med vennene dine på Facebook. Du kan også følge oss på Twitter og Facebook.

Vi vil gjerne høre fra deg, gi oss beskjed om hvordan vi kan forbedre arbeidet vårt og gjøre det bedre for deg. Skriv til oss på e -post