In dit artikel zullen we een door de gebruiker gedefinieerde functie (UDF) maken om het aantal werkdagen tussen de opgegeven datums te tellen, inclusief of exclusief zaterdagen en zondagen als vrije week.
Ruwe gegevens voor dit voorbeeld bestaan uit een startdatum en een einddatum. We willen het aantal werkdagen tussen deze data tellen.
We hebben de vakantiedata vermeld in kolom A in het blad “Vakanties”.
Excel heeft een ingebouwde functie, NETWORKDAYS om het aantal werkdagen tussen het interval te tellen.
Syntaxis van de NETWORKDAYS-functie
NETWERKDAGEN(Begindatum, Einddatum,[Feestdagen])
Deze functie zal de datum uitsluiten die is gespecificeerd in de lijst met feestdagen, terwijl het aantal werkdagen wordt geteld.
Deze functie beschouwt zaterdag en zondag standaard als vrije week, dus we kunnen het aantal werkdagen niet tellen als we maar één week vrij hebben.
We hebben de aangepaste functie "CountWorkingDays" gemaakt om het aantal werkdagen tussen het interval te tellen. Deze aangepaste functie behandelt het probleem van de NETWORKDAYS-functie. In deze functie kunnen we het aantal werkdagen tellen, zelfs als er maar één week vrij is op zaterdag of zondag.
Syntaxis van aangepaste functie
CountWorkingDays (StartDate, EndDate, InclSaturdays, InclSundays)
InclSaturdays en InclSundays zijn optionele parameters. Beide hebben standaard TRUE-waarden. Om zaterdag en zondag in werkdagen te veranderen, wijzigt u de waarde van de respectieve parameter in FALSE.
Microsoft introduceerde de functie NETWERKDAGEN.INTL met Excel 2010. Deze functie behandelt het probleem van de functie NETWERKDAGEN. In deze functie kunnen we de vrije weekdagen specificeren. We kunnen één of twee dagen specificeren als Week vrij.
Syntaxis van de functie NETWORKDAYS.INTL
NETWORKDAYS.INTL(Begindatum, Einddatum, [Weekend], [Feestdagen])
In de weekendparameter kunnen we vrije dagen specificeren.
In dit voorbeeld gebruiken we alle drie bovenstaande functies om het aantal werkdagen te tellen.
Logische uitleg
In de functie "CountWorkingDays" controleren we eerst of de opgegeven datum in de parameter bestaat in de opgegeven vakantielijst. Staat de datum in de vakantielijst, dan telt die dag niet mee in het aantal werkdagen. Als de datum niet voorkomt in de vakantielijst, controleer dan of de opgegeven datum zaterdag of zondag is. Controleer op basis van de opgegeven invoerparameter of u zaterdagen of zondagen als feestdag wilt opnemen of uitsluiten.
Code uitleg
Stel RngFind = Worksheets ("Feestdagen") in. Kolommen(1).Find(i)
Bovenstaande code wordt gebruikt om de locatie te vinden waar de opgegeven datum voorkomt in de vakantielijst.
Als niet RngFind niets is, dan
Ga naar voor het laatst
Stop als
Bovenstaande code wordt gebruikt om te controleren of de opgegeven datum in de vakantielijst voorkomt. Als de voorwaarde TRUE retourneert, wordt die dag niet meegeteld in het aantal werkdagen.
Volg hieronder voor de code:
Optie Expliciete functie CountWorkingDays(StartDate As Long, EndDate As Long, Optioneel InclSaturdays As Boolean = True, _ Optioneel InclSundays As Boolean = True) 'Variabelen declareren Dim RngFind As Range Dim i As Long For i = StartDate To EndDate On Error Resume Next' De locatie zoeken waar de opgegeven datum bestaat in het vakantieblad Set RngFind = Worksheets("Holidays").Columns(1).Find(i) On Error GoTo 0 'Controleren of het een feestdag is op de opgegeven datum Indien niet RngFind niets is Dan GoTo ForLast End If 'Controleren of het zaterdag is op een bepaalde datum If InclSaturdays Dan If Weekday(i, 2) = 6 Dan GoTo ForLast End If End If 'Controleren of het zondag is op een bepaalde datum If InclSundays Dan If Weekday(i, 2) = 7 Ga dan naar ForLast End If End If CountWorkingDays = CountWorkingDays + 1 ForLast: Next End-functie
Als je deze blog leuk vond, deel hem dan met je vrienden op Facebook. Ook kunt u ons volgen op Twitter en Facebook.
We horen graag van u, laat ons weten hoe we ons werk kunnen verbeteren en voor u kunnen verbeteren. Schrijf ons op de e-mailsite