- 최초 작성일: 2001-03-20
- 최종 수정일: 2026-09-29
- 조회수: 28 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 월별 요일수 구하기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
특정 월에 각 요일이 몇 번이나 들어있는지 쉽게 파악할 수는 없을까?
달력을 가만히 들여다 보다가 이런 생각이 들더군요. (Exceller는 가끔 달력을 뚫어져라 들여다보는 버릇이 있습니다. 대개의 분들이 삶의 의욕을 다시 다지기 위해 시장을 가는 경향이 있지요? Exceller는 달력을 들여다 보며 지금까지 살아온 날들과 앞으로 살아갈 날들을 생각하곤 합니다. ^^)
해서 자료를 뒤적이다 보니 Exceller보다 먼저 이것이 궁금했던 사람이 있었나 봅니다. 아래의 자료는 John Walkenbach님의 자료를 약간 수정해서 만들어 본 것입니다. 아래의 표 중에서 콤보박스를 통해 년도를 선택하면 해당 년도의 각 월별로 특정 요일이 몇번이나 있는지 즉시 알 수 있습니다.
월별 요일수 구하기
핵심 요약
- 선택한 연도의 각 월에 특정 요일이 몇 번 들어 있는지는 DATE, WEEKDAY, ROW, INDIRECT를 조합한 배열 수식으로 계산할 수 있습니다.
- DATE로 해당 월의 마지막 일을 구하고 ROW(INDIRECT())로 1일부터 말일까지의 일자 배열을 만든 뒤 WEEKDAY로 요일 번호를 얻습니다.
- 원하는 요일 번호와 일치하는 값만 합산하면 월별 일요일·월요일 등 각 요일의 횟수를 표 형태로 계산할 수 있습니다.
| 107 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
| =INDEX(InputData,A20) | =TEXT(B20,"aaaa") | =TEXT(C20,"aaaa") | =TEXT(D20,"aaaa") | =TEXT(E20,"aaaa") | =TEXT(F20,"aaaa") | =TEXT(G20,"aaaa") | =TEXT(H20,"aaaa") | 日數 |
| 1 | {=SUM((WEEKDAY(DATE($A$21,$A22,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A22+1,0))))))=B$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A22,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A22+1,0))))))=C$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A22,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A22+1,0))))))=D$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A22,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A22+1,0))))))=E$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A22,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A22+1,0))))))=F$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A22,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A22+1,0))))))=G$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A22,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A22+1,0))))))=H$20)*1)} | =SUM(B22:H22) |
| 2 | {=SUM((WEEKDAY(DATE($A$21,$A23,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A23+1,0))))))=B$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A23,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A23+1,0))))))=C$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A23,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A23+1,0))))))=D$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A23,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A23+1,0))))))=E$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A23,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A23+1,0))))))=F$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A23,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A23+1,0))))))=G$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A23,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A23+1,0))))))=H$20)*1)} | =SUM(B23:H23) |
| 3 | {=SUM((WEEKDAY(DATE($A$21,$A24,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A24+1,0))))))=B$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A24,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A24+1,0))))))=C$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A24,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A24+1,0))))))=D$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A24,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A24+1,0))))))=E$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A24,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A24+1,0))))))=F$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A24,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A24+1,0))))))=G$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A24,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A24+1,0))))))=H$20)*1)} | =SUM(B24:H24) |
| 4 | {=SUM((WEEKDAY(DATE($A$21,$A25,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A25+1,0))))))=B$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A25,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A25+1,0))))))=C$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A25,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A25+1,0))))))=D$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A25,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A25+1,0))))))=E$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A25,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A25+1,0))))))=F$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A25,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A25+1,0))))))=G$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A25,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A25+1,0))))))=H$20)*1)} | =SUM(B25:H25) |
| 5 | {=SUM((WEEKDAY(DATE($A$21,$A26,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A26+1,0))))))=B$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A26,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A26+1,0))))))=C$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A26,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A26+1,0))))))=D$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A26,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A26+1,0))))))=E$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A26,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A26+1,0))))))=F$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A26,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A26+1,0))))))=G$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A26,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A26+1,0))))))=H$20)*1)} | =SUM(B26:H26) |
| 6 | {=SUM((WEEKDAY(DATE($A$21,$A27,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A27+1,0))))))=B$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A27,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A27+1,0))))))=C$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A27,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A27+1,0))))))=D$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A27,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A27+1,0))))))=E$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A27,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A27+1,0))))))=F$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A27,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A27+1,0))))))=G$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A27,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A27+1,0))))))=H$20)*1)} | =SUM(B27:H27) |
| 7 | {=SUM((WEEKDAY(DATE($A$21,$A28,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A28+1,0))))))=B$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A28,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A28+1,0))))))=C$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A28,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A28+1,0))))))=D$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A28,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A28+1,0))))))=E$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A28,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A28+1,0))))))=F$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A28,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A28+1,0))))))=G$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A28,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A28+1,0))))))=H$20)*1)} | =SUM(B28:H28) |
| 8 | {=SUM((WEEKDAY(DATE($A$21,$A29,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A29+1,0))))))=B$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A29,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A29+1,0))))))=C$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A29,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A29+1,0))))))=D$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A29,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A29+1,0))))))=E$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A29,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A29+1,0))))))=F$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A29,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A29+1,0))))))=G$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A29,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A29+1,0))))))=H$20)*1)} | =SUM(B29:H29) |
| 9 | {=SUM((WEEKDAY(DATE($A$21,$A30,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A30+1,0))))))=B$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A30,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A30+1,0))))))=C$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A30,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A30+1,0))))))=D$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A30,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A30+1,0))))))=E$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A30,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A30+1,0))))))=F$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A30,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A30+1,0))))))=G$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A30,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A30+1,0))))))=H$20)*1)} | =SUM(B30:H30) |
| 10 | {=SUM((WEEKDAY(DATE($A$21,$A31,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A31+1,0))))))=B$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A31,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A31+1,0))))))=C$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A31,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A31+1,0))))))=D$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A31,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A31+1,0))))))=E$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A31,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A31+1,0))))))=F$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A31,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A31+1,0))))))=G$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A31,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A31+1,0))))))=H$20)*1)} | =SUM(B31:H31) |
| 11 | {=SUM((WEEKDAY(DATE($A$21,$A32,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A32+1,0))))))=B$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A32,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A32+1,0))))))=C$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A32,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A32+1,0))))))=D$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A32,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A32+1,0))))))=E$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A32,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A32+1,0))))))=F$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A32,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A32+1,0))))))=G$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A32,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A32+1,0))))))=H$20)*1)} | =SUM(B32:H32) |
| 12 | {=SUM((WEEKDAY(DATE($A$21,$A33,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A33+1,0))))))=B$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A33,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A33+1,0))))))=C$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A33,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A33+1,0))))))=D$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A33,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A33+1,0))))))=E$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A33,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A33+1,0))))))=F$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A33,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A33+1,0))))))=G$20)*1)} | {=SUM((WEEKDAY(DATE($A$21,$A33,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A33+1,0))))))=H$20)*1)} | =SUM(B33:H33) |
| 요일수 | =SUM(B22:B33) | =SUM(C22:C33) | =SUM(D22:D33) | =SUM(E22:E33) | =SUM(F22:F33) | =SUM(G22:G33) | =SUM(H22:H33) | =SUM(I22:I33) |
일단 콤보박스를 오른쪽 마우스 버튼으로 클릭하신 다음, 컨트롤 서식 메뉴에서 컨트롤 탭을 선택하고 입력 범위와 연결된 셀 항목에 어떤 범위가 지정이 되어 있는지 먼저 살펴 보시기 바랍니다.
B22셀(노란색 셀)에는 다음과 같은 약간 복잡한 배열수식이 입력되어 있습니다.
=SUM((WEEKDAY(DATE($A$21,$A22,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A22+1,0))))))=B$20)*1)
긴 수식은 맨 안쪽부터 토막을 내어서 살펴보면 이해하기 쉽습니다.
① Date($A$21,$A22+1,0) 전월의 마지막 일을 돌려받습니다.
② Row(Indirect("1:" & Date(…)) 1(일)부터 해당 월의 마지막 일까지를 배열의 형태로 지정합니다. 즉 1월이라면 {1;2;3;4;…31}이라는 값이 구해지게 됩니다.
③ Sum((Weekday(Date($A$21,$A22,Row(…))))))=B$20)*1) Weekday 함수는 날짜에 해당하는 요일을 숫자의 형태로 되돌려주는 함수입니다. 특별한 Return Type을 지정하지 않을 경우, 일요일은 1, 월요일은 2,… 토요일은 7을 리턴합니다.
B20 셀에는 일요일에 대한 Weekday 리턴값인 1이 숨겨져 있습니다. 따라서 1~31일 중에서 요일값이 1, 즉 일요일인 값만 합산을 하게 됩니다.
잘 살펴보시고 많이 응용하시기 바랍니다.
오늘은 여기까지…
정리 — 월별 요일수 구하기
| 구분 | 내용 |
|---|---|
| 목적 | 선택한 연도의 월별로 각 요일이 몇 번 있는지 계산 |
| 핵심 수식 | {=SUM((WEEKDAY(DATE($A$21,$A22,ROW(INDIRECT("1:"&DAY(DATE($A$21,$A22+1,0))))))=B$20)*1)} |
| 1단계 | DATE로 전월의 마지막 일을 구함 |
| 2단계 | ROW(INDIRECT())로 1일부터 말일까지 배열 생성 |
| 3단계 | WEEKDAY 결과가 기준 요일 번호(일요일은 1)와 같은 값만 합산 |
자주 묻는 질문 (FAQ)
Q1. 월별 요일수는 어떻게 계산하나요?
DATE 함수로 해당 월의 마지막 일을 구하고 ROW와 INDIRECT로 1일부터 말일까지의 배열을 만든 뒤 WEEKDAY 결과가 원하는 요일과 일치하는 개수를 합산합니다.
Q2. WEEKDAY 함수는 요일을 어떻게 표시하나요?
특별한 반환 유형을 지정하지 않으면 일요일은 1, 월요일은 2, 이런 식으로 토요일은 7을 반환합니다.
Q3. 긴 수식은 어떻게 이해하나요?
맨 안쪽 함수부터 토막을 내어 하나씩 살펴보면 이해하기 쉽습니다.
마치며
긴 수식은 안쪽부터 나누어 분석하는 습관을 들이면 응용하기가 쉬워집니다. VBA에 대한 기초 지식을 공부하실 분은 아이엑셀러 닷컴 사이트 상단 메뉴에서 [Excel 강의] - [Excel 입문]을 먼저 보시면 이해하기 쉽습니다.