Arvutage Microsoft Excelis VBA abil kahe kuupäeva vaheliste tööpäevade arv

Anonim

Selles artiklis loome kasutaja määratud funktsiooni (UDF), mis loeb määratud kuupäevade vaheliste tööpäevade arvu, kaasa arvatud laupäevad ja pühapäevad või mitte.

Selle näite toorandmed koosnevad algus- ja lõppkuupäevast. Tahame lugeda nende päevade vaheliste tööpäevade arvu.

Puhkuse kuupäevad oleme täpsustanud lehe „Pühad” veerus A.

Excelil on sisseehitatud funktsioon NETWORKDAYS, et lugeda intervallide vaheliste tööpäevade arvu.

Funktsiooni NETWORKDAYS süntaks

VÕRGUPÄEVAD (alguskuupäev, lõppkuupäev, [pühad])

See funktsioon välistab loendis Pühad määratud kuupäeva, lugedes samal ajal tööpäevade arvu.

See funktsioon peab laupäevi ja pühapäevi vaikimisi nädalapäevadeks, seega ei saa me tööpäevade arvu kokku lugeda, kui meil on ainult üks nädal vaba.

Oleme loonud kohandatud funktsiooni „CountWorkingDays”, et lugeda intervallide vaheliste tööpäevade arvu. See kohandatud funktsioon lahendab funktsiooni NETWORKDAYS probleemi. Selle funktsiooni puhul saame lugeda tööpäevade arvu isegi siis, kui laupäeval või pühapäeval on ainult üks nädal vaba.

Kohandatud funktsiooni süntaks

CountWorkingDays (alguskuupäev, lõppkuupäev, sh laupäevad, sh pühapäevad)

InclSaturdays ja InclSundays on valikulised parameetrid. Vaikimisi on mõlemal TRUE väärtused. Laupäevade ja pühapäevade muutmiseks tööpäevadeks muutke vastava parameetri väärtuseks VÄÄR.

Microsoft tutvustas programmiga Excel 2010. NETWORKDAYS.INTL. See funktsioon lahendab funktsiooni NETWORKDAYS probleemi. Selle funktsiooni abil saame määrata nädalapäevad. Võime määrata puhkepäevaks ühe või kaks päeva.

Funktsiooni NETWORKDAYS.INTL süntaks

NETWORKDAYS.INTL (alguskuupäev, lõppkuupäev, [nädalavahetus], [pühad])

Nädalavahetuse parameetris saame määrata nädalapäevad.

Selles näites kasutame kõiki ülaltoodud kolme funktsiooni tööpäevade arvu loendamiseks.

Loogiline seletus

Funktsioonis „CountWorkingDays” kontrollime kõigepealt, kas parameetris antud kuupäev on määratud puhkuste loendis olemas. Kui kuupäev on puhkuste loendis olemas, siis seda päeva tööpäevade hulka ei arvestata. Kui kuupäeva puhkusenimekirjas pole, kontrollige, kas antud kuupäev on laupäev või pühapäev. Kontrollige sisestatud parameetri põhjal, kas lisada laupäevad või pühapäevad puhkusena või mitte.

Koodi selgitus

Määra RngFind = Töölehed ("Pühad"). Veerud (1). Leia (i)

Ülaltoodud koodi kasutatakse puhkuse loendis asukoha leidmiseks, kus määratud kuupäev on olemas.

Kui ei, siis pole RngFind midagi

GoTo ForLast

Lõpp Kui

Ülaltoodud koodi abil kontrollitakse, kas puhkuste loendis on määratud kuupäev. Kui tingimus tagastab tõe, siis seda päeva ei arvestata tööpäevade hulka.

Palun järgige koodi allpool

 Valik Selgesõnaline funktsioon CountWorkingDays (alguskuupäev nii pikk, lõppkuupäev nii pikk, valikuline, sh laupäevad kui loogiline = tõene, _ valikuline kaasatud pühapäevad kui loogiline = tõene) 'Muutujate deklareerimine Dim RngFind As Range Dim i As Long For i = StartDate To EndDate On Error Resume Next' Asukoha leidmine, kus määratud kuupäev on lehel Pühad määratud RngFind = Töölehed ("Pühad"). Veerud (1). Leia (i) On Error GoTo 0 'Kontrollimine, kas antud kuupäeval on puhkus Kui mitte RngFind pole midagi Seejärel minge viimasele lõpule, kui kontrollite, kas antud kuupäeval on laupäev. Kui ka laupäeviti siis kui nädalapäev (i, 2) = 6, siis minge edasi 2) = 7 Siis Mine Viimase lõpu lõppu Kui lõpp Kui CountWorkingDays = CountWorkingDays + 1 ForLast: Järgmine lõppfunktsioon 

Kui teile see blogi meeldis, jagage seda oma sõpradega Facebookis. Lisaks saate meid jälgida Twitteris ja Facebookis.

Tahaksime sinust kuulda, andke meile teada, kuidas saaksime oma tööd paremaks muuta ja teie jaoks paremaks muuta. Kirjuta meile meilisaidile