간트차트 엑셀로 만드는 법 — 조건부 서식으로 막대 그리기와 한계
"일정표 간트차트로 만들어서 공유해 주세요"라는 말을 들으면 대부분 엑셀부터 엽니다. 셀을 하나씩 색칠하다가 날짜가 바뀌면 다시 칠하는 일을 몇 번 겪고 나면, 수식으로 자동으로 그리고 싶어집니다. 이 글은 조건부 서식 수식 세 개로 막대·주말·오늘선을 그리는 순서, 누적 막대 차트로 만드는 요점, NETWORKDAYS로 영업일을 연동하고 진행율까지 표시하는 방법을 실제 수식과 함께 정리합니다. 마지막에는 엑셀 간트가 어디서 막히는지와, 그때 브라우저 도구로 어떻게 옮기는지도 솔직하게 적었습니다. 완성된 간트차트를 읽는 법은 간트차트 보는 법, NETWORKDAYS 함수 자체의 함정은 영업일 계산법에서 따로 다룹니다.
엑셀 간트차트의 두 가지 방식 — 무엇을 고를까
엑셀로 간트차트를 만드는 방법은 크게 둘입니다. 하나는 날짜 열을 쭉 깔아 두고 조건부 서식으로 해당 셀만 색칠하는 방식, 다른 하나는 차트 기능의 누적 가로 막대형을 변형하는 방식입니다. 둘 다 30분 안에 만들 수 있지만 쓰임새가 다릅니다.
| 비교 항목 | 조건부 서식(셀 채우기) | 누적 가로 막대 차트 |
|---|---|---|
| 만드는 난이도 | 수식 1~3개면 끝. 셀 단위라 이해가 쉬움 | 계열 숨기기·축 반전·축 최소값 등 손볼 곳이 많음 |
| 작업 추가·수정 | 행을 끼워 넣으면 대체로 그대로 따라옴 | 데이터 범위를 다시 잡아야 할 때가 있음 |
| 주말·공휴일·오늘선 | 규칙 하나씩 추가하면 됨 | 표현이 어렵거나 불가능 |
| 보기 좋음(보고용) | 표 느낌. 인쇄에 유리 | 그래프 느낌. 슬라이드에 붙이기 좋음 |
| 기간이 길 때 | 날짜 열이 수백 개로 늘어나 무거워짐 | 열 수와 무관. 장기 프로젝트에 유리 |
| 진행율 표시 | 두 번째 규칙으로 가능 | 계열을 하나 더 추가해야 해서 번거로움 |
실무에서 매주 갱신하며 관리하는 용도라면 조건부 서식 방식을 권합니다. 발표 자료에 한 번 넣고 끝낼 것이면 차트 방식이 낫습니다. 이 글은 조건부 서식 방식을 자세히, 차트 방식은 요점만 다룹니다. 메뉴 이름은 엑셀 버전(2016·2019·365, 맥 버전)에 따라 조금 다를 수 있습니다.
방식 1. 조건부 서식으로 막대 그리기 — 단계별
1단계. 시트 구조 잡기
A열에 작업명, B열에 시작일, C열에 종료일을 넣습니다. 1행은 헤더이고, 2행부터 작업이 들어갑니다. 날짜 눈금은 D1 셀부터 오른쪽으로 하루씩 놓습니다. 이 배치를 기억해 두면 아래 수식이 왜 그렇게 생겼는지 바로 보입니다.
- D1에 프로젝트 시작 날짜를 입력합니다(예: 2026-10-12, 월요일). 시작일은 공휴일이 아닌 평일로 고르세요. 예컨대 2026년 10월 5일(월)은 토요일과 겹친 개천절의 대체공휴일이라, 그날을 시작일로 두면 WORKDAY 계산이 하루씩 어긋납니다. 텍스트가 아니라 날짜로 인식되어야 하니, 입력 후 셀 서식이 '날짜'인지 확인하세요.
- E1에 =D1+1을 넣고 오른쪽으로 필요한 기간만큼 채웁니다. 두 달이면 60개 열 정도입니다.
- D1부터 날짜 열 전체를 선택하고 셀 서식 → 사용자 지정에서 표시 형식을 d(일자만) 또는 m/d로 바꿉니다. 열 너비는 2.5~3 정도로 좁혀 한 화면에 많이 보이게 합니다.
- 필요하면 D1 위에 행을 하나 추가해 월 이름을 병합 셀로 적어 둡니다. 이 글의 수식은 날짜가 1행에 있다고 가정하니, 행을 추가하면 수식의 행 번호도 함께 바꿔야 합니다.
2단계. 막대를 그리는 조건부 서식 규칙
- 막대가 그려질 영역, 예를 들어 D2:BL50을 선택합니다(왼쪽 위 셀이 D2가 되도록 드래그).
- 홈 → 조건부 서식 → 새 규칙 → 수식을 사용하여 서식을 지정할 셀 결정을 고릅니다.
- 수식 칸에 다음을 입력합니다.
=AND(D$1>=$B2, D$1<=$C2) - 서식 → 채우기에서 막대 색(파란색 계열)을 고르고 확인합니다.
수식의 뜻은 "이 열의 날짜(D$1)가 이 행의 시작일($B2) 이상이고 종료일($C2) 이하이면 색칠하라"입니다. 핵심은 혼합 참조입니다. D$1은 행만 고정해서 어느 셀에서든 1행의 날짜를 보고, $B2·$C2는 열만 고정해서 어느 셀에서든 자기 행의 시작·종료일을 봅니다. 달러 기호 위치를 하나라도 틀리면 막대가 한 줄만 나오거나 전체가 칠해지니, 결과가 이상하면 이 부분부터 봅니다.
3단계. 주말 음영 — WEEKDAY
같은 영역(D2:BL50)에 규칙을 하나 더 추가합니다. 수식은 =WEEKDAY(D$1,2)>=6, 서식은 연한 회색 채우기입니다. WEEKDAY의 두 번째 인수를 2로 주면 월요일이 1, 일요일이 7이 되어 6 이상이 토·일입니다. 규칙 관리자에서 이 주말 규칙이 막대 규칙보다 아래에 오도록 순서를 두면, 작업 기간 안의 주말은 막대 색으로, 그 밖의 주말은 회색으로 보입니다. 반대로 주말을 항상 회색으로 보이게 하려면 주말 규칙을 위로 올리고 '참일 경우 중지'를 켭니다. 공휴일까지 음영을 넣으려면 별도 시트에 공휴일 목록을 두고 =COUNTIF(공휴일!$A:$A, D$1)>0 규칙을 추가합니다.
4단계. 오늘선 — TODAY
규칙 하나를 더 추가합니다. 수식 =D$1=TODAY(), 서식은 진한 빨간 테두리(왼쪽·오른쪽) 또는 눈에 띄는 채우기입니다. 파일을 여는 날짜에 따라 자동으로 옮겨 가므로 "오늘 기준으로 어떤 막대가 왼쪽에 남아 있는가"를 바로 읽을 수 있습니다. 규칙 순서는 오늘선을 맨 위에 두고 '참일 경우 중지'를 켜야 막대 색에 가려지지 않습니다. 오늘선을 읽는 요령은 간트차트 보는 법에서 다뤘습니다.
방식 2. 누적 가로 막대 차트로 만들기 — 요점만
- 표를 작업명 / 시작일 / 기간(일수) 세 열로 준비합니다. 기간은 =C2-B2+1(달력일) 또는 아래의 NETWORKDAYS(영업일)로 계산합니다.
- 세 열을 선택하고 삽입 → 가로 막대형 → 누적 가로 막대형을 넣습니다. 시작일 막대 위에 기간 막대가 이어 붙은 모양이 나옵니다.
- 시작일 계열을 클릭해 채우기 없음, 윤곽선 없음으로 바꿉니다. 이제 기간 막대만 떠 있는 것처럼 보입니다.
- 세로축(작업명)을 더블클릭해 항목을 거꾸로에 체크합니다. 엑셀은 첫 행을 아래에 그리기 때문에, 이걸 켜야 표 순서대로 위에서 아래로 내려옵니다.
- 가로축의 최소값에 프로젝트 시작일의 날짜 일련번호를 넣습니다. 2026-10-12는 46307입니다(빈 셀에 날짜를 넣고 셀 서식을 '일반'으로 바꾸면 이 숫자가 보입니다). 이걸 안 하면 축이 1900년부터 시작해 막대가 오른쪽 끝에 몰립니다.
- 가로축 표시 형식을 날짜(m/d)로 바꾸고, 주 단위 눈금이면 주 단위를 7로 둡니다.
이 방식은 주말이나 오늘선을 넣기 어렵습니다. 오늘선이 꼭 필요하면 오늘 날짜 하나짜리 산점도 계열을 겹쳐 세로선을 그리는 요령이 있지만, 그 정도 손을 댈 바에는 조건부 서식 방식이 빠릅니다.
영업일로 계산하기 — NETWORKDAYS 연동
기간을 달력일로만 세면 주말·명절이 낀 작업의 실제 공수가 과장됩니다. 일수 열을 =NETWORKDAYS($B2, $C2, 공휴일!$A$2:$A$30)로 두면 주말과 공휴일을 뺀 영업일이 나옵니다. 거꾸로 "시작일 + 영업일 10일"로 종료일을 구하려면 =WORKDAY($B2, 일수-1, 공휴일범위)입니다. 시작일 당일을 1일째로 세기 때문에 1을 뺍니다. 함수의 상세 동작과 함정은 영업일 계산법에 정리했으니, 여기서는 간트와 엮는 요령만 덧붙입니다.
- 공휴일 목록은 별도 시트에 두고 이름을 '공휴일'로 붙입니다. 조건부 서식의 음영 규칙과 NETWORKDAYS가 같은 범위를 참조하게 하면 한 곳만 고쳐도 둘 다 반영됩니다.
- 종료일을 WORKDAY로 계산해 두면, 시작일이 밀렸을 때 종료일이 자동으로 따라 움직이고 막대도 함께 옮겨집니다. 이것이 엑셀 간트에서 얻을 수 있는 가장 큰 자동화입니다.
- 다만 선행 작업이 끝나면 다음 작업이 시작되는 식의 연결은 "다음 작업 시작일 = 앞 작업 종료일 + 1영업일"을 =WORKDAY(C2,1,공휴일범위)로 직접 걸어 줘야 합니다. 행을 삭제하면 참조가 깨지므로 연결 개수는 최소로 둡니다.
진행율 표시하기 — 두 번째 조건부 서식
막대만 있으면 계획표일 뿐입니다. 진행율을 넣으면 추적표가 됩니다. C열(종료일) 옆에 D열을 '진행율'로 삽입하면 날짜 눈금은 E1부터 시작하므로, 앞서 만든 수식의 D$1이 E$1로 바뀌었는지 규칙 관리자에서 확인합니다(열을 삽입하면 엑셀이 대체로 자동 조정합니다).
- D2부터 진행율을 0~100%로 입력합니다. 셀 서식은 백분율입니다.
- 막대 영역(E2:BM50)에 규칙을 추가합니다.
=AND(E$1>=$B2, E$1<$B2+($C2-$B2+1)*$D2) - 서식은 막대 색보다 진한 같은 계열로 두고, 규칙 순서에서 이 '진행 규칙'을 '막대 규칙'보다 위에 놓습니다.
수식은 "시작일부터 (전체 기간 × 진행율)만큼의 날짜까지 진하게 칠하라"는 뜻입니다. 60% 진행이면 막대의 앞 60%가 진해집니다. 여기에 오늘선을 겹치면, 진한 부분이 오늘선보다 왼쪽에서 끝나면 지연이라는 판단을 눈으로 할 수 있습니다. 기간진행율(오늘까지 흘러간 비율)을 따로 열에 두고 싶다면 =MAX(0, MIN(1, (TODAY()-$B2+1)/($C2-$B2+1)))을 씁니다. 이 식은 달력일 기준이라 주말이 낀 주에 숫자가 빨리 오릅니다. 영업일 기준으로 맞추려면 =IF(TODAY()<$B2, 0, NETWORKDAYS($B2, MIN(TODAY(),$C2), 공휴일범위) / NETWORKDAYS($B2, $C2, 공휴일범위))를 씁니다. 오늘을 경과일에 포함해 세는 방식이며, 이 사이트 도구의 기간진행율과 같은 결과가 나옵니다. 두 진행율을 비교해 지연을 잡는 기준은 프로젝트 진행율 계산법을 참고하세요.
흔한 문제와 해결
| 증상 | 원인 | 해결 |
|---|---|---|
| 날짜 자리에 46307 같은 숫자가 보임 | 셀 서식이 '일반'으로 돌아감 | 날짜 열 선택 → 셀 서식 → 날짜 또는 사용자 지정 d |
| 막대가 전혀 안 그려짐 | 시작·종료일이 텍스트로 입력됨('2026.10.12' 등) | 날짜를 2026-10-12 형식으로 다시 입력. =ISNUMBER(B2)가 TRUE인지 확인 |
| 행을 추가했더니 새 행에는 막대가 없음 | 조건부 서식의 '적용 대상' 범위 밖에 추가됨 | 규칙 관리자에서 적용 대상을 넉넉히(50행이면 200행) 잡거나, 표(Ctrl+T)로 변환하면 행 추가 시 서식이 자동 확장됨 |
| 막대가 한 칸 밀려서 그려짐 | 선택 영역의 왼쪽 위 셀과 수식 기준 셀이 다름 | 규칙 삭제 후 D2(또는 E2)부터 다시 선택해 규칙 재생성 |
| 인쇄하면 오른쪽이 잘림 | 날짜 열이 페이지 폭을 넘음 | 페이지 레이아웃 → 방향 가로, 배율 '한 페이지에 모든 열 맞추기', 인쇄 영역을 막대 끝 열까지 지정 |
| 파일이 느려짐 | 날짜 열 수백 개 × 행 수백 개에 규칙 4~5개 | 적용 대상을 실제 쓰는 범위로 좁히고, 주 단위 눈금으로 바꾸거나 기간이 끝난 구간을 삭제 |
| 다른 사람이 열면 오늘선이 다른 위치 | 정상. TODAY()는 여는 날 기준 | 보고용으로 고정하려면 별도 셀에 기준일을 입력하고 TODAY() 대신 그 셀을 참조 |
엑셀 간트의 한계 — 어디서 막히는가
여기까지 만들면 10~30개 작업 규모는 충분히 관리됩니다. 문제는 그 다음부터입니다. 실제로 엑셀 간트를 몇 달 운영하면 다음 세 지점에서 손이 많이 갑니다.
- 계층 구조. "1. 설계 > 1.2 화면 설계 > 1.2.3 상세 화면"처럼 단계를 나누면 들여쓰기와 번호를 손으로 유지해야 합니다. 중간에 행을 끼우면 번호가 다 밀리고, 그룹을 접었다 펴는 것도 '그룹' 기능으로 따로 설정해야 합니다.
- 상위 항목 자동 집계. 상위 작업의 시작일은 하위의 MIN, 종료일은 MAX, 진행율은 업무량 가중평균으로 계산돼야 합니다. MIN·MAX·SUMPRODUCT로 만들 수는 있지만, 하위 범위가 바뀔 때마다 수식 범위를 고쳐야 하고 한 번 틀리면 티가 안 납니다. WBS를 제대로 쪼개는 원칙은 WBS 작성법에 있는데, 그 원칙을 엑셀에서 유지하기가 어렵다는 게 요지입니다.
- 공유와 버전. 메일로 돌리는 순간 '일정_v3_최종_수정.xlsx'가 생깁니다. 누가 어느 버전을 보고 있는지 모르고, 조건부 서식은 구글 시트나 다른 뷰어에서 깨지기도 합니다.
브라우저 도구로 옮기는 법 — 엑셀은 내보내기용으로
이 사이트의 WBS·간트차트 도구는 위의 세 한계를 겨냥해 만든 것입니다. 4단계 계층에 번호가 자동으로 붙고, 시작·종료일을 넣으면 등록한 공휴일을 뺀 영업일이 계산되며, 상위 항목의 기간·진행율이 하위에서 집계됩니다. 진행율과 기간진행율을 함께 보여 주고 상태(완료·진행중·지연·예정)를 자동으로 판정합니다. 설치·가입 없이 브라우저에서 열리고 데이터는 브라우저에만 저장됩니다.
엑셀에서 옮기는 순서는 이렇습니다. 솔직히 말하면 엑셀(.xlsx) 파일을 그대로 불러오는 기능은 없습니다. 도구가 불러올 수 있는 것은 [💾 저장]으로 만든 JSON 파일뿐이고, 반대 방향, 즉 도구에서 만든 일정을 엑셀로 내려받는 것은 버튼 하나입니다.
- 엑셀 표에서 작업명·시작일·종료일·진행율 네 열만 남기고 정리합니다. 계층은 들여쓰기 수준(1~4)만 메모해 둡니다.
- 도구에서 상위 항목부터 행을 추가하고, 하위 항목은 들여쓰기 버튼으로 레벨을 내립니다. 20~30행이면 10분 정도 걸립니다. 행이 많다면 아래 "수식으로 JSON 만들기" 방법이 빠릅니다.
- 공휴일 달력에 회사 휴무일을 추가합니다. 업무량(영업일)이 엑셀의 NETWORKDAYS 결과와 같은지 한두 행만 대조합니다.
- 보고할 때는 엑셀 다운로드로 .xlsx를 만들어 첨부하고, 편집은 도구에서만 합니다. 이렇게 하면 엑셀은 '보는 파일', 도구는 '고치는 곳'으로 역할이 나뉘어 버전 문제가 사라집니다.
- 동료에게 보여 줄 때는 링크 공유를, 백업은 JSON 저장을 씁니다. 공유 링크는 그 시점 일정의 사본이라 받은 사람이 고쳐도 원본은 바뀌지 않으므로, 원본을 고치는 사람은 한 명으로 정해 둡니다.
행이 많을 때 — 수식으로 JSON 만들기
작업이 100행을 넘으면 손으로 옮기기 번거롭습니다. 이때는 엑셀 수식으로 도구의 저장 파일(JSON) 형식을 직접 만들어 [📂 불러오기]로 여는 방법이 있습니다. E열에 레벨(1~4)을 숫자로 적었다고 가정하면, 빈 열에 다음 수식을 넣고 아래로 채웁니다.
="{""level"":"&$E2&",""name"":"""&$A2&""",""start"":"""&TEXT($B2,"yyyy-mm-dd")&""",""end"":"""&TEXT($C2,"yyyy-mm-dd")&""",""rate"":"&ROUND($D2*100,0)&"},"
- 메모장을 열고 첫 줄에 {"title":"프로젝트명","opts":{},"rows":[를 씁니다. opts 항목은 비어 있어도 반드시 있어야 파일이 인식됩니다.
- 수식 열의 결과를 복사해 그 아래에 붙여 넣고, 마지막 줄 끝의 쉼표 하나를 지웁니다. 쉼표가 남으면 "올바른 저장 파일이 아닙니다"라는 오류가 납니다.
- 마지막 줄에 ]}를 쓰고 확장자를 .json으로, 인코딩을 UTF-8로 저장한 뒤 도구의 [📂 불러오기]로 엽니다. 현재 데이터를 교체할지 묻는 창이 뜹니다.
작업명에 큰따옴표(")가 들어 있으면 JSON이 깨지므로 먼저 작은따옴표로 바꿔 두세요. 담당자와 비고는 생략해도 빈 칸으로 들어오고, 공휴일은 불러온 뒤 공휴일 관리에서 추가하면 됩니다. 날짜 셀이 텍스트로 되어 있으면 TEXT 함수가 형식을 못 바꿔 해당 행의 날짜가 비게 되니, 불러온 뒤 막대가 없는 행이 있는지 확인합니다.
조건부 서식 템플릿 구조 한눈에 보기
아래 표대로 시트를 만들면 이 글의 수식을 그대로 붙여 넣을 수 있습니다. 진행율 열을 포함한 최종 버전입니다.
| 열 | 내용 | 수식·서식 |
|---|---|---|
| A | 작업명 | 텍스트. 하위 작업은 앞에 공백 2칸으로 들여쓰기 |
| B | 시작일 | 날짜 서식. 직접 입력 또는 =WORKDAY(앞작업종료일,1,공휴일범위) |
| C | 종료일 | 날짜 서식. 직접 입력 또는 =WORKDAY(B2,일수-1,공휴일범위) |
| D | 진행율 | 백분율 서식, 0~100% |
| E1 → 오른쪽 | 날짜 눈금 | E1에 시작 날짜, F1부터 =E1+1. 표시 형식 d, 열 너비 2.5 |
| E2:BM50 규칙 1(맨 위) | 오늘선 | =E$1=TODAY(), 빨간 테두리, 참일 경우 중지 |
| E2:BM50 규칙 2 | 진행 부분 | =AND(E$1>=$B2, E$1<$B2+($C2-$B2+1)*$D2), 진한 파랑 |
| E2:BM50 규칙 3 | 막대 | =AND(E$1>=$B2, E$1<=$C2), 연한 파랑 |
| E2:BM50 규칙 4 | 주말·공휴일 | =OR(WEEKDAY(E$1,2)>=6, COUNTIF(공휴일!$A:$A,E$1)>0), 연회색 |
| 시트 '공휴일' A열 | 공휴일 목록 | 날짜 서식으로 한 줄에 하나. 매년 갱신 |
자주 묻는 질문
조건부 서식 수식에서 D$1과 $B2의 달러 위치는 왜 다른가요?
D$1은 행(1행)만 고정해 어느 셀에서든 자기 열의 날짜 헤더를 읽고, $B2는 열(B열)만 고정해 어느 셀에서든 자기 행의 시작일을 읽기 위해서입니다. 조건부 서식은 선택 영역의 왼쪽 위 셀 기준으로 수식을 쓰면 나머지 셀에 상대 이동시켜 적용하므로, 이 혼합 참조가 맞아야 막대가 행마다 제 위치에 그려집니다. 막대가 한 줄만 나오거나 전체가 칠해지면 달러 위치부터 확인하세요.
행을 추가했는데 새 행에는 막대가 안 그려집니다.
조건부 서식의 적용 대상 범위 밖에 행이 추가된 경우입니다. 홈 → 조건부 서식 → 규칙 관리에서 적용 대상을 실제보다 넉넉하게(예: 50행을 쓰면 200행까지) 잡아 두거나, 표 전체를 Ctrl+T로 '표'로 변환하면 행을 추가할 때 서식과 수식이 자동으로 확장됩니다.
엑셀 간트에서 주말과 공휴일을 빼고 기간을 계산할 수 있나요?
가능합니다. 일수 열에 =NETWORKDAYS(시작일, 종료일, 공휴일범위)를 쓰면 주말과 공휴일 범위에 적은 날짜를 뺀 영업일 수가 나오고, 종료일을 =WORKDAY(시작일, 일수-1, 공휴일범위)로 두면 영업일 기준 종료일이 자동 계산됩니다. 공휴일 목록은 별도 시트에 두고 조건부 서식의 음영 규칙과 같은 범위를 참조하게 하면 한 곳만 고쳐도 됩니다.
엑셀로 만든 간트차트를 브라우저 도구로 그대로 가져올 수 있나요?
엑셀 파일을 직접 불러오는 기능은 없습니다. 작업명·시작일·종료일·진행율을 정리해 도구에 행으로 입력하고 들여쓰기로 계층을 잡는 방식이며, 20~30행이면 10분 정도 걸립니다. 행이 많으면 엑셀 수식으로 도구의 JSON 저장 형식을 만들어 불러오기로 여는 우회 방법도 있습니다. 반대로 도구에서 만든 일정은 버튼 하나로 엑셀(.xlsx)로 내려받을 수 있어, 편집은 도구에서 하고 보고용 파일만 엑셀로 내보내는 흐름을 권합니다.
정리
엑셀 간트차트는 조건부 서식으로 만드는 것이 관리용으로 가장 실용적입니다. A~C열에 작업·시작·종료를 두고 D1부터 날짜를 깐 뒤, =AND(D$1>=$B2, D$1<=$C2) 규칙 하나면 막대가 그려지고, WEEKDAY로 주말, TODAY()로 오늘선, 진행율 열을 곱한 두 번째 규칙으로 진척까지 표시할 수 있습니다. 기간은 NETWORKDAYS·WORKDAY로 영업일 기준을 유지하세요. 다만 계층 번호, 상위 항목 집계, 버전 공유는 엑셀에서 유지하기 어려운 부분이라, 작업이 30개를 넘고 매주 갱신한다면 브라우저 도구에서 관리하고 엑셀은 내보내기용으로 쓰는 편이 시간을 아낍니다.
수식 없이 4단계 계층·영업일 자동 계산·진행율 집계·상태 판정까지 — 브라우저에서 바로 만들고, 보고용은 엑셀(.xlsx)로 내려받으세요. 내려받은 파일에는 일정 시트와 공휴일 시트가 함께 들어 있습니다.
WBS·간트차트 도구 열기