Microsoft Excel에서 VBA를 사용하여 두 날짜 사이의 근무일 수를 계산
이 기사에서는 토요일과 일요일을 휴일로 포함하거나 제외하는 등 지정된 날짜 사이의 근무일 수를 계산하는 사용자 정의 함수 (UDF)를 만듭니다.
이 예의 원시 데이터는 시작 날짜와 종료 날짜로 구성됩니다. 이 날짜 사이의 근무일 수를 계산하려고합니다.
“공휴일”시트의 A 열에 공휴일 날짜를 지정했습니다.
Excel에는 간격 사이의 근무일 수를 계산하는 NETWORKDAYS 기능이 내장되어 있습니다.
NETWORKDAYS 함수 구문 NETWORKDAYS (StartDate, EndDate, [Holidays])
이 기능은 공휴일 목록에 지정된 날짜를 제외하고 근무일 수를 계산합니다.
이 기능은 기본적으로 토요일과 일요일을 주 휴일로 간주하므로 1 주일 만 쉬는 경우 근무일 수를 계산할 수 없습니다.
간격 사이의 근무일 수를 계산하는 “CountWorkingDays”사용자 지정 함수를 만들었습니다. 이 사용자 정의 함수는 NETWORKDAYS 함수의 문제를 처리합니다. 이 기능에서는 토요일이나 일요일에 한 주만 쉬더라도 근무일 수를 계산할 수 있습니다.
사용자 정의 함수 구문
CountWorkingDays (StartDate, EndDate, InclSaturdays, InclSundays)
InclSaturdays 및 InclSundays는 선택적 매개 변수입니다. 기본적으로 둘 다 TRUE 값을 갖습니다. 토요일과 일요일을 근무일로 변경하려면 각 매개 변수의 값을 FALSE로 변경하십시오.
Microsoft는 Excel 2010에서 NETWORKDAYS.INTL 함수를 도입했습니다.이 함수는 NETWORKDAYS 함수의 문제를 처리합니다. 이 함수에서 우리는 평일을 지정할 수 있습니다. 휴일로 하루 또는 이틀을 지정할 수 있습니다.
NETWORKDAYS.INTL 함수 구문
NETWORKDAYS.INTL (StartDate, EndDate, [주말], [공휴일])
주말 매개 변수에서 주 휴일을 지정할 수 있습니다.
이 예에서는 위의 세 가지 함수를 모두 사용하여 근무일 수를 계산합니다.
논리 설명
“CountWorkingDays”함수에서 먼저 매개 변수에 지정된 날짜가 지정된 휴일 목록에 있는지 확인합니다. 휴일 목록에 날짜가있는 경우 해당 날짜는 근무일 수에 포함되지 않습니다. 공휴일 목록에 날짜가 없으면 지정된 날짜가 토요일인지 일요일인지 확인합니다. 제공된 입력 매개 변수에 따라 토요일 또는 일요일을 공휴일로 포함할지 제외할지 확인합니다.
코드 설명
RngFind = Worksheets ( “Holidays”). Columns (1) .Find (i)
위의 코드는 공휴일 목록에서 지정된 날짜가있는 위치를 찾는 데 사용됩니다.
그렇지 않은 경우 RngFind가 아무것도 아닌 경우 GoTo ForLast End If 위 코드는 지정된 날짜가 휴일 목록에 있는지 확인하는 데 사용됩니다. 조건이 TRUE를 반환하면 해당 날짜는 근무일 수에 포함되지 않습니다.
아래 코드를 따르세요
Option Explicit Function CountWorkingDays(StartDate As Long, EndDate As Long, Optional InclSaturdays As Boolean = True, _ Optional InclSundays As Boolean = True) 'Declaring variables Dim RngFind As Range Dim i As Long For i = StartDate To EndDate On Error Resume Next 'Finding the location where the specified date exist in the Holidays sheet Set RngFind = Worksheets("Holidays").Columns(1).Find(i) On Error GoTo 0 'Checking whether it is holiday on the given date If Not RngFind Is Nothing Then GoTo ForLast End If 'Checking whether it is Saturday on given date If InclSaturdays Then If Weekday(i, 2) = 6 Then GoTo ForLast End If End If 'Checking whether it is Sunday on given date If InclSundays Then If Weekday(i, 2) = 7 Then GoTo ForLast End If End If CountWorkingDays = CountWorkingDays + 1 ForLast: Next End Function
이 블로그가 마음에 들면 Facebook 및 Facebook에서 친구들과 공유하십시오.
여러분의 의견을 듣고 싶습니다. 작업을 개선하고 더 나은 서비스를 제공 할 수있는 방법을 알려주십시오. [email protected]로 문의 해주세요