Apskaičiuokite darbo dienų skaičių tarp dviejų datų naudodami „Microsoft Excel“ VBA

Anonim

Šiame straipsnyje mes sukursime vartotojo apibrėžtą funkciją (UDF), kad darbo dienų skaičius tarp nurodytų datų, įskaitant šeštadienius ir sekmadienius, būtų įtrauktas į savaitės pertraukas arba neįtrauktas.

Neapdorotus šio pavyzdžio duomenis sudaro pradžios data ir pabaigos data. Norime suskaičiuoti darbo dienų skaičių tarp šių datų.

Mes nurodėme atostogų datas lapo „Atostogos“ skiltyje A.

„Excel“ turi integruotą funkciją - NETWORKDAYS, kad būtų galima skaičiuoti darbo dienų skaičių tarp intervalo.

Funkcijos NETWORKDAYS sintaksė

TINKLO DIENOS (pradžios data, pabaigos data, [atostogos])

Ši funkcija neįtrauks atostogų sąraše nurodytos datos ir skaičiuos darbo dienų skaičių.

Ši funkcija šeštadienius ir sekmadienius pagal numatytuosius nustatymus laiko savaitės pertraukomis, todėl negalime suskaičiuoti darbo dienų skaičiaus, jei turime tik vieną poilsio savaitę.

Mes sukūrėme „CountWorkingDays“ pasirinktinę funkciją, kad būtų galima skaičiuoti darbo dienų skaičių tarp intervalo. Ši pasirinktinė funkcija sprendžia NETWORKDAYS funkcijos problemą. Naudodami šią funkciją, mes galime suskaičiuoti darbo dienų skaičių, net jei šeštadienį arba sekmadienį yra tik viena poilsio savaitė.

Individualizuotos funkcijos sintaksė

„CountWorkingDays“ (pradžios data, pabaigos data, įskaitant šeštadienius, įskaitant sekmadienius)

„InclSaturdays“ ir „InclSundays“ yra pasirenkami parametrai. Pagal numatytuosius nustatymus abu turi TRUE reikšmes. Norėdami pakeisti šeštadienius ir sekmadienius į darbo dienas, pakeiskite atitinkamo parametro reikšmę į FALSE.

„Microsoft“ su „Excel 2010.“ pristatė funkciją „NETWORKDAYS.INTL“. Ši funkcija sprendžia NETWORKDAYS funkcijos problemą. Šioje funkcijoje galime nurodyti poilsio savaitės dienas. Vieną ar dvi dienas galime nurodyti kaip savaitgalį.

Funkcijos NETWORKDAYS.INTL sintaksė

NETWORKDAYS.INTL (pradžios data, pabaigos data, [savaitgalis], [atostogos])

Savaitgalio parametre galime nurodyti Savaitės poilsio dienas.

Šiame pavyzdyje mes naudosime visas pirmiau nurodytas tris funkcijas, kad skaičiuotume darbo dienų skaičių.

Loginis paaiškinimas

Funkcijoje „CountWorkingDays“ pirmiausia patikriname, ar nurodyta parametro data yra nurodytame atostogų sąraše. Jei data yra atostogų sąraše, ta diena neįskaičiuojama į darbo dienų skaičių. Jei atostogų sąraše šios datos nėra, patikrinkite, ar nurodyta data yra šeštadienis ar sekmadienis. Remdamiesi pateiktu įvesties parametru, patikrinkite, ar šeštadienius ar sekmadienius įtraukti į atostogas, ar neįtraukti.

Kodo paaiškinimas

Nustatykite RngFind = darbalapiai („Šventės“). Stulpeliai (1). Rasti (i)

Viršuje esantis kodas naudojamas surasti vietą, kurioje atostogų sąraše yra nurodyta data.

Jei ne, tada „RngFind“ yra niekas

„GoTo ForLast“

Pabaiga Jei

Aukščiau pateiktas kodas naudojamas patikrinti, ar atostogų sąraše yra nurodyta data. Jei sąlyga grąžina TIESA, ta diena neįskaičiuojama į darbo dienų skaičių.

Sekite toliau pateiktą kodą

 Parinktis Aiškių funkcijų skaičiusWorkingDays (pradžios data tiek laiko, pabaigos data tiek laiko, pasirinktinai, įskaitant šeštadienius kaip loginis = tiesa, _ pasirinktinai, įskaitant sekmadienius kaip Boolean = tiesa) „Kintamųjų deklaravimas Dim RngFind As Range Dim i As Long for i = StartDate To EndDate On Error Resume Next“ Raskite vietą, kurioje nurodyta data yra atostogų lape. Nustatykite RngFind = darbalapiai ("Šventės"). Stulpeliai (1). Rasti (i) On Error GoTo 0 'Tikrinimas, ar tam tikrą dieną yra atostogos Jei ne RngFind yra nieko Tada eikite į paskutinį pabaigą, jei „Tikrinama, ar tam tikrą dieną šeštadienis“ Įskaitant šeštadienius Tada „Jei savaitės diena (i, 2) = 6“ Tada „Eikite į paskutinę pabaigą, jei pabaiga“ Jei tikrinama, ar nurodytą dieną sekmadienis. 2) = 7 Tada eikite į paskutinę pabaigą, jei pabaiga Jei CountWorkingDays = CountWorkingDays + 1 ForLast: kita pabaigos funkcija 

Jei jums patiko šis tinklaraštis, pasidalykite juo su draugais „Facebook“. Be to, mus galite sekti „Twitter“ ir „Facebook“.

Mes norėtume išgirsti jūsų nuomonę, praneškite mums, kaip galime pagerinti savo darbą ir padaryti jį geresnį. Rašykite mums el