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