조건부 서식을 적용해서 특정한 셀에 색칠하는 경우가 일반적이고, 조건을 충족하는 한 줄 전체에 색칠하는 경우도 있는데 이 글을 참고 바랍니다.
1. 공휴일 여부 판단하기
근무일을 구하는 함수만 Workday, Workday.Intl, NetworkDays, NetWorkdays.Intl 등이 있기 때문에 공휴일은 근무일이 아닌 날로 정의하면 됩니다.
각각의 구문은 아래와 같습니다.
가. WORKDAY(start_date, days, [holidays])
start_date(시작일)로부터 며칠 후(days) 근무일을 구하는 함수인데, 옵션인 holidays는 Workday함수에 등록되지 않은 공휴일, 예를 들어, 설날, 광복절, 제헌절 등 우리나라 또는 기업에 특수한 휴일을 일정한 범위에 등록하는 것입니다.
workday(start_date-1, days)=start_date라고, start_date에서 하루 전날에서 근무일로 하루 더한 날이 start_date라면 start_date는 근무일이고, 아니면 공휴일이 됩니다.
나. NETWORKDAYS(start_date, end_date, [holidays])
end_date(종료일)와 start_date(시작일) 사이의 근무일수를 구해주는 함수로, 마찬가지로 특별한 공휴일을 등록한 범위를 세번째 인수로 입력합니다.
다. WORKDAY.INTL(start_date, days, [weekend], [holidays])
시작일로부터 몇 일후의 근무일을 구하는 함수인데, 세 번째 인수를 제외하고는 Workday함수와 동일한데, 나라별로 한 주의 시작일, 다시 말해 휴일이 다르므로 weekend(주말)을 의미하는 숫자를 세 번째 인수로 입력하는 것만 다릅니다.
생략하면 토,일이 휴일인 주 5일제 근무형태입니다. 따라서, 주 6일제 근무라면 11, 다시 말해 일요일만 휴일에 해당하는 숫자를 입력해야 합니다.
weekend-number | Weekend days |
1 or omitted | Saturday, Sunday |
2 | Sunday, Monday |
3 | Monday, Tuesday |
4 | Tuesday, Wednesday |
5 | Wednesday, Thursday |
6 | Thursday, Friday |
7 | Friday, Saturday |
11 | Sunday only |
12 | Monday only |
13 | Tuesday only |
14 | Wednesday only |
15 | Thursday only |
16 | Friday only |
17 | Saturday only |
라.NETWORKDAYS.INTL(start_date, end_date, [weekend], [holidays])
end_date(종료일)와 start_date(시작일) 사이의 근무일수를 구해주는 함수인데, Workdays.Intl함수와 마찬가지로 세 번째 인수인 Weekend만 Networkdays함수와 다르며, Weekend에 해당하는 숫자는 Workday.Intl 함수와 동일합니다.
2. 휴일에 해당하는 날짜에 색칠하기
일반적으로는 토,일이 휴일이지만, 광복절인 8/15일이 공휴일이므로 요일을 기준으로 휴일여부를 판단할 수 없습니다.
가. 요일명 구하기
=CHOOSE(WEEKDAY(DATE(2023,8,B1)),"일","월","화","수","목","금","토")
요일을 구하는 함수는 Weekday이며, 숫자를 반환하는데 1이 일요일, 2는 월요일 식이 됩니다. 그런데, 숫자를 요일명으로 바꿔야 하므로 Choose함수를 이용해 1부터 숫자에 해당하는 요일명을 두 번째 인수부터 입력했습니다.
또한 2023년도 휴일을 AH2셀부터 AH16셀까지 입력했습니다.
나. Workday 함수 이용
B11셀에 =WORKDAY(DATE(2023,8,B1)-1,1,$AH$2:$AH$17)=DATE(2023,8,B1)라고 입력하면 True가 반환됩니다.
① WORKDAY(DATE(2023,8,B1)-1,1,$AH$2:$AH$17)는 8/1에서 하루를 뺀 7/31일부터 1일 후는 8/1인데 근무일이므로 8/1이 그대로 반환됩니다. 이때 토, 일이거나 휴일 범위인 $AH$2:$AH$17에 해당하는 날짜가 있다면 휴일을 지난 후 첫 번째 근무일이 반환됩니다.
예를 들어 8/15일이라면 8/16일이 반환됩니다.
수식 탭의 수식 분석 그룹에서 수식 계산 명령을 누른 후 계산 버튼을 계속 누르면 WORKDAY(DATE(2023,8,B1)-1,1,$AH$2:$AH$17)의 값은 45139가 되며,
② DATE(2023,8,B1)의 계산값도 45139로서 같기 때문에
③ True가 반환됩니다.
닫기 버튼을 눌러 수식 계산 창을 닫습니다.
AH19셀에 45139라고 입력하면 2023-08-01이라고 표시됩니다. 1900-01-01부터 45139번째 날은 2023-08-01입니다.
B11셀의 채우기 핸들을 AF열까지 끌면 열 너비가 좁아서 True 또는 False 값이 안보이므로 A열과 1행 사이 모퉁이를 클릭한 다음 B열과 C열 사이의 경계선을 더블 클릭합니다.
그러면 근무일을 True, 휴일은 False가 반환됩니다.
토, 일이 False인데, 8/15만 화요일인데 False입니다.
다. Networkdays 함수 이용
B12셀에 =NETWORKDAYS(DATE(2023,8,B1),DATE(2023,8,B1),$AH$2:$AH$17)=1라고,
시작일과 종료일을 모두 2023/8/1로 입력하면 8/1이 근무일이기 때문에 근무일수가 1이 되고 1과 같으므로 True가 반환됩니다.
마찬가지로 8/15은 공휴일이기 때문에 근무일수는 0이 반환되고, 1과 다르므로 False가 반환됩니다.
라. Workday.Intl 함수 이용
B13셀에 =WORKDAY.INTL(DATE(2023,8,B1)-1,1,,$AH$2:$AH$17)=DATE(2023,8,B1)라고 입력하는데,
토, 일이 휴일인 경우 1이지만 생략가능하므로 세 번째 인수를 비워두었습니다.
11행부터 13행까지의 결과가 같습니다.
B13셀에 수식 입력할 때 B11셀의 수식 입력줄을 복사한 후 Esc키를 누르고,
B13셀의 수식 입력줄에 붙여 넣고,
workday 다음에 .intl을 붙이고, 세 번째 인수 자리를 비워두고 쉼표만 입력하거나, 1을 입력하고 쉼표를 입력한 다음
엔터키를 누르면 쉽게 수식을 입력할 수 있습니다.
마. Networkdays.Intl 함수 이용
B12셀의 수식을 복사해서 B14셀에 붙여 넣고,
.intl을 추가하고, 세 번째 인수를 빈자리로 두고 쉼표를 입력한 다음 엔터키를 누릅니다.
그리고 B14셀의 채우기 핸들을 AF열까지 끌어 수식을 채웁니다.
바. 조건부 서식 적용
B11 셀의 수식입력줄의 수식을 마우스로 끌어서 선택한 다음 Ctrl + C키를 눌러 복사하고 Esc키를 누릅니다.
조건부 서식을 적용할 B1셀에서 AF10셀까지를 선택한 다음
홈 탭 > 스타일 그룹에서 조건부 서식 명령을 누른 다음 새 규칙을 클릭합니다.
그러면 새 서식 규칙 창이 열리는데, '수식을 사용하여 서식을 적용할 셀 결정'을 클릭한 다음
수식 입력 줄에 붙여 넣습니다.
여기서 중요한 것은 B열 1행부터 10행까지 모두 색이 채워져야 하므로
B1셀이 오른쪽으로 갈 때는 C, D 등으로 변하는데, 아래로 내려갈 때는 1행이 변하면 안 되므로 $1로 1을 고정해야 한다는 것입니다.
따라서 수식은
=WORKDAY(DATE(2023,8,B$1)-1,1,$AH$2:$AH$17)=DATE(2023,8,B$1)로
$1로 두 군데를 고쳐야 합니다.
이번에는 서식 버튼을 누른 후 채우기 탭에서 색을 분홍색으로 선택합니다. 그리고 확인 버튼을 누르고,
새 서식 규칙 창이 열리면 확인 버튼을 누릅니다.
그런데 True인 근무일에 색이 칠해졌으므로
홈 탭 > 조건부 서식 > 규칙 관리를 선택한 다음
규칙 편집 버튼을 누른 다음
수식에서 =(같음)을 <>(다름)으로 바꾸고 확인 버튼을 누릅니다.
그러면 '조건부 서식 규칙 관리자' 창이 열리는데, 다시 확인 버튼을 누르면
휴일에만 색이 칠해졌습니다.
Networkdays 등 다른 함수를 적용해서도 해보기 바랍니다.
'Excel' 카테고리의 다른 글
피벗 테이블 창이 분리되었을 때? (0) | 2023.09.10 |
---|---|
한글과 영문을 기준으로 숫자 분리하기 (0) | 2023.09.01 |
이름관리자에서 VBA의 Evaluate 함수 사용하기 (0) | 2023.08.21 |
공백의 코드 값이 여러 가지입니다. (0) | 2023.08.20 |
Microsoft 365의 달라진 메모 기능 (0) | 2023.08.19 |