Laske työpäivien määrä kahden päivämäärän välillä käyttämällä Microsoft Excelin VBA: ta

Anonim

Tässä artikkelissa luomme käyttäjän määrittämän toiminnon (UDF), joka laskee määritettyjen päivämäärien välisten työpäivien lukumäärän, mukaan lukien lauantait ja sunnuntait tai ei.

Tämän esimerkin raakatiedot koostuvat alkamis- ja lopetuspäivästä. Haluamme laskea työpäivien lukumäärän näiden päivämäärien välillä.

Olemme määrittäneet lomapäivät "Lomat" -arkin sarakkeessa A.

Excelissä on sisäänrakennettu toiminto, NETWORKDAYS, joka laskee välien välisen työpäivän määrän.

NETWORKDAYS -toiminnon syntaksi

VERKKOPÄIVÄT (alkamispäivä, päättymispäivä, [juhlapyhät])

Tämä toiminto sulkee pois Holidays -luettelossa määritetyn päivämäärän ja laskee samalla työpäivien määrän.

Tämä toiminto pitää lauantait ja sunnuntait oletuksena viikonloppuisin, joten emme voi laskea työpäivien määrää, jos meillä on vain yksi viikko vapaata.

Olemme luoneet "CountWorkingDays" -toiminnon, joka laskee välien välisen työpäivän määrän. Tämä mukautettu toiminto käsittelee NETWORKDAYS -toiminnon ongelman. Tässä toiminnossa voimme laskea työpäivien määrän, vaikka lauantaina tai sunnuntaina olisi vain yksi viikko vapaata.

Mukautetun toiminnon syntaksi

CountWorkingDays (StartDate, EndDate, InclSaturdays, InclSundays)

InclSaturdays ja InclSundays ovat valinnaisia ​​parametreja. Oletuksena molemmilla on TRUE -arvot. Jos haluat muuttaa lauantain ja sunnuntain työpäiviksi, muuta vastaavan parametrin arvoksi EPÄTOSI.

Microsoft esitteli NETWORKDAYS.INTL -toiminnon Excel 2010: n kanssa. Tämä toiminto käsittelee NETWORKDAYS -toiminnon ongelman. Tässä toiminnossa voimme määrittää viikon vapaapäivät. Voimme joko määrittää yhden tai kaksi päivää viikonlopuksi.

NETWORKDAYS.INTL -funktion syntaksi

NETWORKDAYS.INTL (alkamispäivä, päättymispäivä, [viikonloppu], [lomat])

Viikonloppuparametrissa voimme määrittää viikon vapaapäivät.

Tässä esimerkissä laskemme kaikki edellä mainitut kolme toimintoa työpäivien lukumäärän laskemiseen.

Looginen selitys

"CountWorkingDays" -toiminnossa tarkistamme ensin, onko parametrissa annettu päivämäärä olemassa määritetyllä lomalistalla. Jos päivämäärä on lomalistalla, sitä päivää ei lasketa työpäivien lukumäärään. Jos päivämäärää ei ole lomalistalla, tarkista, onko päivämäärä lauantai vai sunnuntai. Tarkista syötetyn syöttöparametrin perusteella, sisällytetäänkö vai suljetaanko lauantai tai sunnuntai lomana.

Koodin selitys

Aseta RngFind = laskentataulukot ("Lomat"). Sarakkeet (1). Etsi (i)

Yllä olevaa koodia käytetään etsimään paikka, jossa määritetty päivämäärä on lomalistalla.

Jos ei, RngFind ei ole sitten mitään

Siirry viimeksi

Loppu Jos

Yllä olevaa koodia käytetään tarkistamaan, onko lomapäiväluettelossa määritetty päivämäärä. Jos ehto palauttaa TOSI, kyseistä päivää ei lasketa työpäivien lukumäärään.

Seuraa koodia alla

 Vaihtoehto Explicit Function CountWorkingDays (StartDate as Long, EndDate as Long, Optional InclSaturdays as Boolean = True, _ Optional InclSundays As Boolean = True) 'Ilmoittavat muuttujat Dim RngFind As Range Dim i As Long For i = StartDate To EndDate On Error Jatka seuraavaksi' Etsi paikka, jossa määritetty päivämäärä on Lomat -taulukossa Aseta RngFind = Työarkit ("Lomat"). Sarakkeet (1). Etsi (i) On Error GoTo 0 'Tarkistetaan, onko kyseinen päivä vapaapäivä Jos ei RngFind ei ole mitään Sitten Siirry viimeiseen loppuun, jos 'Tarkistetaan onko lauantai tiettynä päivänä Jos Sisältää lauantait Sitten Jos Viikonpäivä (i, 2) = 6 Sitten Siirry Viimeiseksi Lopeta Jos Loppu Jos' Tarkistetaan onko kello sunnuntai tiettynä päivänä Jos SisältääSunnuntai Sitten Jos Viikonpäivä (i, 2) = 7 Sitten Siirry viimeiseen loppuun Jos loppu Jos CountWorkingDays = CountWorkingDays + 1 ForLast: Seuraava lopetusfunktio 

Jos pidit tästä blogista, jaa se ystävillesi Facebookissa. Voit myös seurata meitä Twitterissä ja Facebookissa.

Haluaisimme kuulla sinusta, kerro meille, kuinka voimme parantaa työtämme ja parantaa sitä sinulle. Kirjoita meille sähköpostitse