휴가일은 시작일 ~ 종료일 까지의 기간 중 휴일 및 법정 공휴일을 제외하여야 한다.
Weekday 함수를 사용하여 현재 요일이 주말인지를 확인할 수 있다.
1. 선택된 날짜가 주말인지 아닌지 확인하는 방법
아래 예제는 날짜를 선택하면 주말인지 평일인지를 확인해 주는 예제이다.
If( Weekday(DatePicker1,StartOfWeek.Monday)= 6 Or Weekday(DatePicker1,StartOfWeek.Monday)= 7, "주말","평일" ) |
2. 시작과 종료일을 선택했을 때 주말을 뺀 일수 값 계산
DateDiff는 날짜의 차이를 계산하게 되는데 시작과 종료일이 같으면 0이 됨으로 1을 더한다.
DateDiff(StartDate,EndDate) + 1 & "일" |
3. 선택된 기간을 나타내는 컬렉션을 만들기
이제 선택된 기간의 날짜 중 휴일이 있는지를 확인해야 한다.
위의 방법으로 날짜만큼 컬렉션을 만든다.
Clear(ColWeekendCheck); ForAll( Sequence( DateDiff(StartDate,EndDate) + 1 ), Collect( ColWeekendCheck, {Date : DateAdd(StartDate,Value -1)} ) ); |
4. 컬렉션을 만들 때 주말을 체크하는 컬럼의 추가
Clear(ColWeekendCheck); ForAll( Sequence( DateDiff(StartDate,EndDate) + 1 ), Collect( ColWeekendCheck, { Date : DateAdd(StartDate,Value -1), Weekend : If( Weekday(DateAdd(StartDate,Value -1),StartOfWeek.Monday)= 6 Or Weekday(DateAdd(StartDate,Value -1), StartOfWeek.Monday)= 7, "true","false" ) } ) ); |
5. 일수 값 변경
//DateDiff(StartDate,EndDate) + 1 & "일" CountIf(ColWeekendCheck,!Weekend) & "일" //Weekend 값이 false인 경우 카운트해라 |
6. 공휴일 추가
공휴일을 확인하기 위해서는 공휴일을 데이터베이스가 필요하다.
아래 관련자료 링크에 오빠두엑셀님의 자료에서 휴일 엑셀 파일을 다운 받아 사용했으니 참고
아래와 같이 VacHoliday 목록 생성
7. 목록의 날짜를 확인해서 휴일인지 아닌지를 확인하는 Collection을 만들기
ClearCollect( ColVacHoliday, Filter( AddColumns( VacHoliday,"Weekend",If(Weekday(Holiday),StartOfWeek.Monday)= 6 Or Weekday(Holiday,StartOfWeek.Monday)= 7,"true","false" ), HolidayYear=Text(Today(),"yyyy") //올해 데이터만 필터링 ) ) |
ColVacHoliday 컬렉션에는 기존 값에 Weekend 컬럼이 추가되고 주말이면 true 아니면 false 값이 들어가게 된다.
올해 데이터만 필터해서 값을 나타나게 된다.
8. ColVacHoliday 컬렉션에서 선택한 날짜 기간에서 공휴일에 주말이 아닌 날짜 계산
CountIf( Filter(ColVacHoliday,!Weekend), Holiday >= StartDate, Holiday <= EndDate ) |
9. 선택 기간의 공휴일과 주말을 제외한 일수를 계산한 결과
CountIf(ColWeekendCheck,!Weekend) - CountIf( Filter(ColVacHoliday,!Weekend), Holiday >= StartDate, Holiday <= EndDate )& "일" |
10. StartDate를 변경하게 되면 EndDate는 값은 StartDate로 변경
DefaultDate = StartDate.SelectedDate |
11. StartDate와 EndDate의 값을 변경하게 되면 컬렉션을 만들기
OnChange 값을 아래와 같이 변경
Clear(ColWeekendCheck); ForAll( Sequence( DateDiff(StartDate,EndDate) + 1 ), Collect( ColWeekendCheck, { Date : DateAdd(StartDate,Value -1), Weekend : If( Weekday(DateAdd(StartDate,Value -1),StartOfWeek.Monday)= 6 Or Weekday(DateAdd(StartDate,Value -1), StartOfWeek.Monday)= 7, "true","false" ) } ) ); |
[관련자료]
Day, Month, Year, Hour, Minute, Second 및 Weekday 함수https://learn.microsoft.com/ko-kr/power-platform/power-fx/reference/function-datetime-parts
Sequence 함수https://learn.microsoft.com/ko-kr/power-platform/power-fx/reference/function-sequence
엑셀 평일 주말 공휴일, 함수 하나로 관리하는 방법https://www.oppadu.com/%EC%97%91%EC%85%80-%ED%8F%89%EC%9D%BC-%EC%A3%BC%EB%A7%90-%EA%B3%B5%ED%9C%B4%EC%9D%BC-%EA%B5%AC%EB%B6%84/
Excluding weekends and holidays in date differences in PowerAppshttps://powerapps.microsoft.com/en-us/blog/excluding-weekends-and-holidays-in-date-differences-in-powerapps/
댓글