Izračunajte število delovnih dni med dvema datumoma z uporabo VBA v programu Microsoft Excel

Anonim

V tem članku bomo ustvarili uporabniško določeno funkcijo (UDF), ki bo štela število delovnih dni med določenimi datumi, vključno z ali izključitvijo sobote in nedelje kot proste tedne.

Neobdelani podatki za ta primer so sestavljeni iz začetnega in končnega datuma. Od teh datumov želimo šteti število delovnih dni.

Datume počitnic smo določili v stolpcu A na listu »Prazniki«.

Excel ima vgrajeno funkcijo NETWORKDAYS za štetje števila delovnih dni med intervalom.

Sintaksa funkcije NETWORKDAYS

NETWORKDAYS (StartDate, EndDate, [Holidays])

Ta funkcija bo izključila datum, določen na seznamu praznikov, hkrati pa štela število delovnih dni.

Ta funkcija privzeto obravnava sobote in nedelje kot proste tedne, zato ne moremo šteti števila delovnih dni, če imamo le en teden dopusta.

Ustvarili smo funkcijo po meri »CountWorkingDays« za štetje števila delovnih dni med intervalom. Ta funkcija po meri obravnava problem funkcije NETWORKDAYS. V tej funkciji lahko štejemo število delovnih dni, tudi če je v soboto ali nedeljo prost teden.

Sintaksa funkcije po meri

CountWorkingDays (StartDate, EndDate, InclSaturdays, InclSundays)

InclSaturdays in InclSundays sta izbirna parametra. Privzeto imata obe vrednosti TRUE. Če želite sobote in nedelje spremeniti v delovne dni, vrednost ustreznega parametra spremenite v FALSE.

Microsoft je predstavil funkcijo NETWORKDAYS.INTL z Excelom 2010. Ta funkcija obravnava problem funkcije NETWORKDAYS. V tej funkciji lahko določimo proste tedne. Za teden dopusta lahko določimo en ali dva dni.

Sintaksa funkcije NETWORKDAYS.INTL

NETWORKDAYS.INTL (začetni datum, končni datum, [vikend], [prazniki])

V parametru vikend lahko določimo proste dni.

V tem primeru bomo za štetje števila delovnih dni uporabili vse zgornje tri funkcije.

Logična razlaga

V funkciji “CountWorkingDays” najprej preverimo, ali v navedenem prazničnem seznamu obstaja podani datum v parametru. Če datum obstaja na dopustnem seznamu, se ta dan ne šteje v število delovnih dni. Če datum ni na seznamu počitnic, preverite, ali je dan sobota ali nedelja. Na podlagi podanega vhodnega parametra preverite, ali sobote ali nedelje vključiti ali izključiti kot praznike.

Razlaga kode

Nastavi RngFind = delovne liste ("počitnice"). Stolpci (1). Najdi (i)

Zgornja koda se uporablja za iskanje lokacije, kjer je na seznamu počitnic določen datum.

Če ni, potem RngFind ni nič

Pojdi na zadnji

Konec Če

Zgornja koda se uporablja za preverjanje, ali je na prazničnem seznamu določen datum. Če se stanje vrne kot TRUE, se ta dan ne šteje v število delovnih dni.

Za kodo sledite spodaj

 Možnost Eksplicitna funkcija CountWorkingDays (StartDate As Long, EndDate As Long, Neobvezni InclSaturdays As Boolean = True, _ Optional InclSundays As Boolean = True) 'Razglasitev spremenljivk Dim RngFind kot obseg Dim i As Long Za i = StartDate za konec datuma ob nadaljevanju napake Naprej' Iskanje lokacije, kjer obstaja določen datum na počitniškem listu Nastavite RngFind = delovne liste ("Prazniki"). Stolpci (1). Poiščite (i) Napaka GoTo 0 'Preverjanje, ali je na določen datum praznični dan, če ne RngFind ni nič Potem Pojdi na ForLast End If 'Preverjanje, ali je na določen datum sobota If InclSaturdays Then If Weekday (i, 2) = 6 Potem GoTo ForLast End If End If' Preverjanje, ali je na določen datum nedelja If InclSundays Then If Weekday (i, 2) = 7 Potem Pojdi na ForLast End If End Če CountWorkingDays = CountWorkingDays + 1 ForLast: Next End Funkcija 

Če vam je bil ta blog všeč, ga delite s prijatelji na Facebooku. Prav tako nam lahko sledite na Twitterju in Facebooku.

Radi bi slišali od vas, nam sporočite, kako lahko izboljšamo svoje delo in ga izboljšamo za vas. Pišite nam na spletnem mestu e -pošte