Vypočítajte počet pracovných dní medzi dvoma dátumami pomocou VBA v programe Microsoft Excel

Anonim

V tomto článku vytvoríme funkciu definovanú používateľom (UDF), ktorá bude počítať počet pracovných dní medzi zadanými dátumami vrátane sobôt a nedieľ ako voľných dní týždňa.

Surové údaje pre tento príklad pozostávajú z dátumu začiatku a dátumu ukončenia. Chceme spočítať počet pracovných dní medzi týmito dátumami.

Dátumy sviatkov sme špecifikovali v stĺpci A v liste „Sviatky“.

Excel má vstavanú funkciu NETWORKDAYS na počítanie počtu pracovných dní medzi intervalom.

Syntax funkcie NETWORKDAYS

NETWORKDAYS (dátum začiatku, dátum konca, [sviatky])

Táto funkcia vylúči dátum uvedený v zozname Sviatky a zároveň bude počítať počet pracovných dní.

Táto funkcia štandardne považuje soboty a nedele za týždňové voľno, takže nemôžeme počítať počet pracovných dní, v prípade, že máme iba jeden týždeň voľna.

Vytvorili sme vlastnú funkciu „CountWorkingDays“ na počítanie počtu pracovných dní medzi intervalom. Táto vlastná funkcia rieši problém funkcie NETWORKDAYS. V tejto funkcii môžeme počítať počet pracovných dní, aj keď je v sobotu alebo nedeľu iba jeden týždeň voľna.

Syntax vlastnej funkcie

CountWorkingDays (StartDate, EndDate, InclSaturdays, Incl Sundayes)

InclSaturdays a InclSundays sú voliteľné parametre. Štandardne majú obidve hodnoty PRAVDIVÉ. Ak chcete zmeniť sobotu a nedeľu na pracovné dni, zmeňte hodnotu príslušného parametra na hodnotu FALSE.

Spoločnosť Microsoft zaviedla v programe Excel 2010 funkciu NETWORKDAYS.INTL. Táto funkcia rieši problém s funkciou NETWORKDAYS. V tejto funkcii môžeme určiť Týždeň voľna. Ako týždeň voľna môžeme určiť jeden alebo dva dni.

Syntax funkcie NETWORKDAYS.INTL

NETWORKDAYS.INTL (dátum začiatku, dátum konca, [víkend], [sviatky])

V parametri víkend môžeme špecifikovať dni pracovného pokoja.

V tomto prípade použijeme všetky tri vyššie uvedené funkcie na počítanie počtu pracovných dní.

Logické vysvetlenie

Vo funkcii „CountWorkingDays“ najskôr skontrolujeme, či daný dátum v parametri existuje v uvedenom zozname sviatkov. Ak dátum existuje v zozname sviatkov, tento deň sa nezapočítava do počtu pracovných dní. Ak dátum neexistuje v zozname prázdnin, skontrolujte, či je daný dátum sobota alebo nedeľa. Na základe poskytnutého vstupného parametra skontrolujte, či sa sobota alebo nedeľa má zahrnúť alebo nevylúčiť ako sviatok.

Vysvetlenie kódu

Nastaviť RngFind = pracovné listy („prázdniny“). Stĺpce (1). Nájsť (i)

Vyššie uvedený kód sa používa na nájdenie miesta, kde je uvedený dátum v zozname prázdnin.

Ak nie je RngFind nič, potom

GoTo ForLast

Koniec Ak

Vyššie uvedený kód sa používa na kontrolu, či je v zozname sviatkov uvedený dátum. Ak podmienka vráti PRAVDU, potom sa tento deň nezapočítava do počtu pracovných dní.

Pri kódovaní postupujte podľa nižšie uvedených pokynov

 Option 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' Hľadanie miesta, kde v hárku Sviatky existuje určený dátum RngFind = Pracovné listy ("Prázdniny"). Stĺpce (1). Nájsť (i) Pri chybe GoTo 0 'Kontrola, či je v daný dátum sviatok Ak nie RngFind nie je nič Potom GoTo ForLast End If 'Kontrola, či je sobota v daný dátum Ak InclSaturdays Then If Weekday (i, 2) = 6 Then GoTo ForLast End If End If' Kontrola, či je nedeľa v daný dátum Ak InclSundays Then If Weekday (i, 2) = 7 Potom GoTo ForLast End If End If CountWorkingDays = CountWorkingDays + 1 ForLast: Next End Function 

Ak sa vám tento blog páčil, zdieľajte ho so svojimi priateľmi na Facebooku. Môžete nás tiež sledovať na Twitteri a Facebooku.

Budeme radi, ak sa nám ozvete, dajte nám vedieť, ako môžeme zlepšiť našu prácu a zlepšiť ju pre vás. Napíšte nám na emailovú stránku