V tomto článku vytvoříme uživatelem definovanou funkci (UDF), která bude počítat počet pracovních dnů mezi zadanými daty, včetně nebo bez sobot a nedělí, jako týdenní volna.
Nezpracovaná data pro tento příklad se skládají z počátečního data a koncového data. Chceme spočítat počet pracovních dnů mezi těmito daty.
Termíny svátků jsme specifikovali ve sloupci A v listu „Prázdniny“.
Excel má vestavěnou funkci NETWORKDAYS pro počítání počtu pracovních dnů mezi intervalem.
Syntaxe funkce NETWORKDAYS
NETWORKDAYS (datum zahájení, datum ukončení, [svátky])
Tato funkce vyloučí datum uvedené v seznamu svátků a počítá počet pracovních dnů.
Tato funkce ve výchozím nastavení považuje soboty a neděle za týdenní volna, takže nemůžeme počítat počet pracovních dnů v případě, že máme pouze jeden týden volna.
Vytvořili jsme vlastní funkci „CountWorkingDays“ pro počítání počtu pracovních dnů mezi intervalem. Tato vlastní funkce řeší problém s funkcí NETWORKDAYS. V této funkci můžeme spočítat počet pracovních dnů, i když je v sobotu nebo v neděli pouze jeden týden volna.
Syntaxe vlastní funkce
CountWorkingDays (StartDate, EndDate, InclSaturdays, InclSundays)
InclSaturdays a InclSundays jsou volitelné parametry. Ve výchozím nastavení mají oba TRUE hodnoty. Chcete -li změnit sobotu a neděli na pracovní dny, změňte hodnotu příslušného parametru na FALSE.
Společnost Microsoft představila v aplikaci Excel 2010 funkci NETWORKDAYS.INTL. Tato funkce řeší problém s funkcí NETWORKDAYS. V této funkci můžeme určit dny v týdnu. Můžeme buď zadat jeden nebo dva dny jako týden volna.
Syntaxe funkce NETWORKDAYS.INTL
NETWORKDAYS.INTL (datum zahájení, datum ukončení, [víkend], [svátky])
V parametru víkend můžeme specifikovat dny volna.
V tomto příkladu použijeme všechny výše uvedené tři funkce k počítání počtu pracovních dnů.
Logické vysvětlení
Ve funkci „CountWorkingDays“ nejprve zkontrolujeme, zda dané datum v parametru existuje v uvedeném seznamu svátků. Pokud datum v seznamu dovolených existuje, pak se tento den nezapočítává do počtu pracovních dnů. Pokud datum v seznamu prázdnin neexistuje, zkontrolujte, zda je dané datum sobota nebo neděle. Na základě zadaného vstupního parametru zkontrolujte, zda chcete jako svátek zahrnout nebo vyloučit soboty nebo neděle.
Vysvětlení kódu
Nastavit RngFind = pracovní listy („svátky“). Sloupce (1). Najít (i)
Výše uvedený kód slouží k vyhledání místa, kde v seznamu svátků existuje zadané datum.
Pokud Not RngFind není nic, pak
GoTo ForLast
Konec If
Výše uvedený kód slouží ke kontrole, zda uvedené datum existuje v seznamu svátků. Pokud podmínka vrátí hodnotu TRUE, pak se tento den nezapočítává do počtu pracovních dnů.
Pro kód prosím postupujte níže
Možnost Explicitní funkce 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' Hledání místa, kde v listu svátků existuje zadané datum Nastavit RngFind = Pracovní listy („Prázdniny“). Sloupce (1). Najít (i) Při chybě Přejít 0 'Kontrola, zda je v dané datum svátek Pokud není RngFind není nic Pak GoTo ForLast End If 'Kontrola, zda je sobota v dané datum Pokud InclSaturdays Then If Weekday (i, 2) = 6 Then GoTo ForLast End If End If' Kontrola, zda je neděle v daný den If InclSundays Then If Weekday (i, 2) = 7 Pak GoTo ForLast End If End If CountWorkingDays = CountWorkingDays + 1 ForLast: Next End Function
Pokud se vám tento blog líbil, sdílejte ho se svými přáteli na Facebooku. Také nás můžete sledovat na Twitteru a Facebooku.
Rádi bychom od vás slyšeli, dejte nám vědět, jak můžeme zlepšit naši práci a zlepšit ji pro vás. Napište nám na e -mail