워크 시트를 개발할 때 주어진 달의 마지막 영업일을 알아야 할 수도 있습니다. 영업일이 월요일부터 금요일까지라고 가정하면 다음 수식은 원하는 날짜를 반환합니다.

=DATE(YEAR(A1),MONTH(A1)+1,0)-(MAX(0,WEEKDAY (DATE(YEAR(A1),MONTH(A1)+1,0),2)-5))

이 수식은 월요일부터 금요일까지만 날짜를 반환하고 항상 A1의 날짜로 표시되는 월의 마지막 날짜를 반환합니다. 어떤 목적을 위해 주어진 달의 마지막 금요일이 무엇인지 알아야 할 수도 있습니다. 이것은 다음 공식으로 쉽게 결정됩니다.

=DATE(YEAR(A1),MONTH(A1)+1,0)-WEEKDAY(DATE (YEAR(A1),MONTH(A1)+1,0))+(WEEKDAY(DATE (YEAR(A1),MONTH(A1)+1,0))>5)*7-1

이 수식은 A1 셀의 날짜에 대해 해당 월의 마지막 날을 계산하고 해당 날짜의 요일을 기준으로 이전 금요일을 반환 할 적절한 일 수를 뺍니다.

공휴일을 고려하고 싶다면 공식의 복잡성이 상당히 높아집니다. 따라서 마지막 영업일을 결정하고 휴일을 보완하는 사용자 정의 함수 (매크로)를 만드는 것이 가장 좋습니다.

다음 매크로는 마지막 영업일을 나타내는 월요일부터 금요일까지의 날짜를 반환합니다. 날짜는 통합 문서에서 명명 된 범위 여야하는 휴일 목록 (HolidayList)과 비교됩니다. 날짜가 공휴일 인 것으로 확인되면 종료 영업일은 적합한 날짜를 찾을 때까지 감소합니다.

Function LastWorkDay(lRawDate As Long, _     Optional rHolidayList As Range, _     Optional bFriday As Boolean = False) As Long

LastWorkDay = DateSerial(Year(lRawDate), _       Month(lRawDate) + 1, 0) - 0     If bFriday Then         LastWorkDay = MakeItFriday(LastWorkDay)

Else         LastWorkDay = NoWeekends(LastWorkDay)

End If

If Not rHolidayList Is Nothing Then         Do Until myMatch(LastWorkDay, rHolidayList) = 0             LastWorkDay = LastWorkDay - 1             If bFriday Then                 LastWorkDay = MakeItFriday(LastWorkDay)

Else                 LastWorkDay = NoWeekends(LastWorkDay)

End If         Loop     End If End Function
Private Function myMatch(vValue, rng As Range) As Long     myMatch = 0     On Error Resume Next     myMatch = Application.WorksheetFunction _         .Match(vValue, rng, 0)

On Error GoTo 0 End Function
Private Function NoWeekends(lLastDay As Long) As Long     NoWeekends = lLastDay     If Weekday(lLastDay) = vbSunday Then _       NoWeekends = NoWeekends - 2     If Weekday(lLastDay) = vbSaturday Then _       NoWeekends = NoWeekends - 1 End Function
Private Function MakeItFriday(lLastDay As Long) As Long     MakeItFriday = lLastDay     While Weekday(MakeItFriday) <> vbFriday         MakeItFriday = MakeItFriday - 1     Wend End Function

포함 된 세 가지 개인 기능이 있습니다. 이러한 함수는 기본 LastWorkDay 함수 내에서 호출됩니다. 첫 번째 myMatch는 일반 Match 메서드의 “래퍼”입니다. 이 사용법은 필수 오류 처리로 인해 포함됩니다.

두 번째 함수 인 NoWeekdends는 날짜가 토요일이나 일요일 인 경우 이전 금요일까지 날짜를 백업하는 데 사용됩니다. MakeItFriday 함수는 날짜가 항상 금요일이되도록하는 데 사용됩니다.

워크 시트에서이 사용자 정의 함수를 사용하려면 다음과 같은 수식에서 사용합니다.

=LastWorkDay(A1, HolidayList, TRUE)

첫 번째 매개 변수 (A1)는 평가할 날짜입니다. 두 번째 매개 변수 (HolidayList)는 휴일 날짜의 선택적 목록입니다. 여기에서 볼 수 있듯이 HolidayList는 워크 시트에서 명명 된 범위라고 가정합니다.

이 매개 변수가 제공되면 함수는 반환하는 날짜가 HolidayList의 날짜 목록에 없는지 확인합니다.

마지막 매개 변수도 선택 사항입니다. TRUE 또는 FALSE 일 수 있습니다.

(지정되지 않은 경우 기본값은 FALSE입니다.)이 매개 변수가 TRUE로 설정되면 함수는 항상 해당 월의 마지막 금요일을 리턴합니다. 이 매개 변수가 TRUE이고 HolidayList가 제공되면 함수는 해당 월의 마지막 비 공휴일 금요일을 리턴합니다.

_ 참고 : _

이 페이지 (또는 ExcelTips 사이트의 다른 페이지)에 설명 된 매크로를 사용하는 방법을 알고 싶다면 유용한 정보가 포함 된 특별 페이지를 준비했습니다.

link : / excelribbon-ExcelTipsMacros [새 브라우저 탭에서 특별 페이지를 열려면 여기를 클릭하세요].

_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.

이 팁 (2452)은 Microsoft Excel 97, 2000, 2002 및 2003에 적용됩니다. 여기에서 Excel (Excel 2007 이상)의 리본 인터페이스에 대한이 팁의 버전을 찾을 수 있습니다.

link : / excelribbon-The_Last_Business_Day [마지막 영업일].