수천개의 견적 데이터 비교를 자동화하는 VBA + AI
- 고객사
- 국내 엔지니어링 기업
- 산업
- 엔지니어링·구매
- 교육 대상
- 구매·계약
- 시간
- 3시간
"품목이 수천 줄입니다. 전부 대조하는 건 현실적으로 안 되니까 금액 큰 것 위주로 봅니다."
구매팀 차장님이 사전 미팅에서 하신 말씀입니다. 그러다 놓친 적이 있느냐고 여쭤보니 잠깐 뜸을 들이셨습니다. "있습니다."
이 팀의 문제는 대조가 오래 걸린다는 것이 아니었습니다. 애초에 전수 대조를 포기하고 있었다는 것이었습니다.
사전 조사에서 확인한 것
실제 견적 개정 이력을 몇 건 받아 봤습니다.
개정본은 '무엇이 바뀌었다' 는 설명 없이 파일만 옵니다. 대조는 받는 쪽 몫입니다.
① 개정본은 설명 없이 온다 — 협력사가 파일만 보냅니다. 무엇을 바꿨는지 알려주는 경우가 드뭅니다. 대조는 받는 쪽 몫입니다.
② 행 수가 달라진다 — 단가만 바뀌면 그나마 낫습니다. 품목이 추가되거나 빠지면 줄이 밀려서 눈으로 맞추기가 사실상 불가능해집니다.
③ 틀리면 돈 문제가 된다 — 이게 핵심이었습니다. 회의 자료가 틀리면 다시 만들면 되지만, 계약 단가를 놓치면 그대로 손실입니다. 그런데 전수 확인이 불가능하니 매번 위험을 안고 승인합니다.
차장님이 원한 건 시간 단축이 아니라 "전부 봤다는 확신" 이었습니다.
수천 줄을 전수로 볼 수 없어 표본만 봅니다. 나머지는 확인 못 한 채 넘어갑니다.
수천 줄을 전수 비교합니다. 달라진 칸에만 색이 칠해집니다.
설계 — 취합이 아니라 비교로 좁혔다
엑셀 자동화 교육을 하면 보통 여러 파일을 합치는 취합 자동화를 다룹니다. 이 팀에는 그게 급하지 않았습니다. 취합할 일보다 대조할 일이 훨씬 많았기 때문입니다.
그래서 3시간을 두 표의 차이를 찾는 것 하나에 집중했습니다. 대신 그 하나를 끝까지 갔습니다 — 단가만 다른 경우, 행 수가 다른 경우, 품목이 추가된 경우까지.
그리고 VBA 를 골랐습니다. 파이썬이 아니라 VBA 인 이유가 이 조직에는 분명했습니다. 설치 승인이 필요 없고, 엑셀 안에서 끝나고, 만든 것을 파일에 담아 옆자리에 그대로 넘길 수 있기 때문입니다.
진행
1단계 — 챗GPT 가 VBA 를 안다는 것부터
chatgpt.com 화면에서는 주로 파이썬으로 코딩합니다. 그래서 파이썬만 아는 줄 아는 분이 많습니다.
VBA 도 압니다. 무엇인지, 어떻게 작동하는지, 어느 메뉴에 있는지 전부 알고 있습니다. 먼저 "VBA 로 할 수 있는 일" 을 물어보는 것으로 시작했습니다.
답 중에 이 팀이 반응한 항목이 셋이었습니다.
- 여러 엑셀 파일을 자동으로 열어 데이터를 취합
- 이메일 발송 자동화
- 두 표의 변경점 찾기 ← 오늘의 목표
2단계 — 실행 방법을 먼저 손에 익혔다
코드를 받아도 어디에 넣는지 모르면 소용없습니다. 순서를 반복해서 익혔습니다.
1. Alt + F11 → VBA 편집기가 열립니다
2. 삽입 → 모듈 → 코드를 넣을 빈 공간
3. 코드 붙여넣기
4. 편집기 창 닫기
5. Alt + F8 → 코드 목록
6. 선택 → 실행
Alt + F11 을 눌렀는데 아무것도 안 뜨는 분이 두 분 계셨습니다. 그 자리에서 챗GPT 에게 "안 뜬다" 고 말하게 했습니다. 파일 → 옵션에서 개발 도구를 켜는 방법을 알려 줍니다. 이 교육에 쓰인 단축키는 전부 챗GPT 에게 물어 알아낸 것입니다.
3단계 — 쉬운 것으로 감을 잡았다
곧바로 비교로 가지 않고 간단한 것 둘을 먼저 만들었습니다.
특정 값에 색 칠하기. 견적서에서 단가가 기준선을 넘는 칸만 주황색으로 표시합니다.
엑셀 VBA 코드를 작성해줘.
1. Sheet1 의 E2:E2400 범위를 검사한다
2. 값이 1000000 을 넘는 셀을 찾는다
3. 해당 셀의 배경색을 주황색으로 칠한다
4. 다른 셀은 건드리지 않는다
열 추가하고 계산 넣기. 수량 × 단가를 새 열에 넣습니다.
이 둘의 목적은 결과물이 아니라 "설명하면 코드가 나온다" 는 감각입니다. 여기서 확신이 붙어야 본편으로 갑니다.
두 개를 만들고 나서 한 분이 이렇게 말씀하셨습니다. "제가 코딩을 한 건 아닌데 코드가 생겼네요." 정확한 표현이었습니다. 이 과정에서 참가자가 배우는 것은 문법이 아니라 하려는 일을 순서대로 쪼개어 말하는 법입니다. 그건 원래 실무자가 가장 잘하는 일입니다.
4단계 — 본편: 두 시트 비교
원본을 Sheet1, 개정본을 Sheet2 에 넣고 달라진 칸을 찾게 했습니다.
프롬프트에서 강조한 것은 동작 순서를 하나씩 끊어서 적는 것이었습니다.
엑셀 VBA 를 작성해줘.
1. Sheet1 을 원본, Sheet2 를 개정본으로 본다
2. 두 시트의 2행부터 마지막 데이터 행까지 A~F 열을 전수 비교한다
3. 같은 위치의 값이 다르면 Sheet2 쪽 셀을 노란색으로 칠한다
4. 개정본에만 있는 행은 전체를 초록색으로 칠한다
5. 원본에만 있는 행은 Sheet1 쪽을 빨간색으로 칠한다
6. 끝나면 몇 군데가 달랐는지 메시지로 알려준다
간단한 코드는 대충 말해도 잘 나옵니다. 그런데 복잡해지면 애매한 프롬프트가 반드시 오류로 이어집니다. 특히 이 넷은 정확히 적어야 합니다 — 시트 이름, 데이터 범위, 비교 기준, 표시 방법.
4번과 5번을 따로 적은 것이 중요했습니다. 처음에는 "다른 곳을 표시해줘" 로만 적었더니 단가가 바뀐 것과 품목이 추가된 것이 같은 색으로 표시됐습니다. 둘은 성격이 전혀 다른 변경입니다. 단가 변경은 협상 대상이고, 품목 추가는 범위 변경이라 결재 라인이 다릅니다.
색을 나누자는 요구는 참가자에게서 나왔습니다. 자기 업무를 아는 사람만 할 수 있는 요구이고, 이런 대목이 교육에서 가장 값진 순간입니다.
5단계 — 한 번에 성공하지 않았습니다
실행하니 오류가 났습니다. 예상한 일이었고, 이 구간이 이 교육에서 가장 중요했습니다.
실행했더니 오류가 났어. '런타임 오류 1004: 응용 프로그램 정의 오류 또는 개체 정의 오류' 디버그를 누르니 두 시트의 셀을 비교하는 줄이 노란색으로 표시돼. 개정본 시트가 원본보다 행이 40줄 더 많아. 품목이 추가된 것 같아.
' 이전 — 원본 행 수만 기준으로 돌다 범위를 벗어납니다
' For i = 2 To lastRow
' 수정 — 두 시트의 마지막 행을 각각 구해 긴 쪽을 기준으로
lastA = wsA.Cells(wsA.Rows.Count, 1).End(xlUp).Row
lastB = wsB.Cells(wsB.Rows.Count, 1).End(xlUp).Row
maxRow = IIf(lastA > lastB, lastA, lastB)
For i = 2 To maxRow
If i > lastA Then
wsB.Rows(i).Interior.Color = vbGreen ' 개정본에만 있는 행
ElseIf ...(3차 시도에서 정상 작동했습니다)
여기서 가르친 것은 코드가 아니라 오류를 설명하는 법입니다.
- 오류 메시지를 그대로 복사해 붙여넣는다
- 디버그를 눌러 어느 줄에서 멈췄는지 알려준다
- 무엇이 실행되고 무엇이 안 됐는지 적는다
"안 돼요" 라고만 하면 챗GPT 도 추측합니다. 상황을 자세히 설명할수록 수정이 빨라집니다. 대부분 2~3차 시도에서 정상 작동했습니다.
6단계 — 저장에서 다 날릴 뻔했다
완성한 뒤 반드시 이 형식으로 저장해야 합니다.
Excel 매크로 사용 통합 문서 (*.xlsm)
.xlsx 로 저장하면 VBA 코드는 저장되지 않고 사라집니다. 경고가 한 번 뜨고 지나가서 놓치기 쉽습니다. 실제로 한 분이 이걸 겪으셨고, 그 덕에 전원이 확실히 기억하게 됐습니다.
코드 자체를 메모장에 복사해 두는 방법도 함께 알려드렸습니다.
이 방식으로 안 되는 것
- 품목명이 바뀌면 못 찾습니다. 같은 품목인데 표기가 달라지면(공백·약어) 다른 품목으로 봅니다
- 정렬 순서가 다르면 어긋납니다. 개정본이 정렬을 바꿔 오면 먼저 순서를 맞춰야 합니다
- 왜 바뀌었는지는 알려주지 않습니다. 어디가 다른지까지입니다. 판단은 담당자 몫입니다
- PDF 로 오는 견적서에는 못 씁니다. 먼저 엑셀로 변환해야 합니다
그리고 마지막에 메시지 상자로 "몇 군데가 달랐습니다" 를 띄우게 한 것도 의도한 설계입니다. 색만 칠해 두면 사람이 전체를 훑어야 하는데, 개수를 알면 그만큼 찾고 멈출 수 있습니다. 확신은 여기서 나옵니다.
운영 준비 — 실제 개정본을 가져오게 했다
교육 2주 전에 최근에 받은 견적 개정본과 그 원본을 한 쌍씩 가져오시라고 요청했습니다.
예제로 하면 "되네요" 로 끝납니다. 자기가 지난주에 표본만 훑고 넘긴 그 파일이 전수로 비교되면 이야기가 달라집니다.
가져온 파일을 미리 훑어 정렬 순서가 다른 건이 있는지도 확인했습니다. 두 건이 그랬고, 그 팀에는 5단계에 시간을 더 썼습니다.
진행 중에 나온 질문
"이거 협력사한테 알려주면 안 되나요? 바뀐 곳을 표시해서 보내달라고요."
좋은 지적이었습니다. 답은 "요청은 하시되 기대지는 마세요" 였습니다.
표시해서 보내주면 가장 좋습니다. 다만 그건 협력사의 선의에 기대는 것이고, 검증 책임은 여전히 받는 쪽에 있습니다. 표시된 것만 믿고 넘어갔다가 놓치면 그 손실은 우리 것입니다. 매크로는 그 검증을 6분으로 줄이는 도구입니다.
교육이 끝났을 때 남은 것
3시간 뒤 참가자 전원이 자기가 가져온 견적 개정본을 비교한 상태로 나갔습니다. 그중 두 분이 그 자리에서 전에 못 보고 넘어간 단가 변경을 찾았습니다.
그중 한 건은 품목 하나가 조용히 빠진 경우였습니다. 행이 밀리지 않게 다른 품목이 그 자리에 들어와 있어서, 눈으로 봤다면 찾기 어려웠을 변경이었습니다.
넉 달 뒤 확인했을 때 팀에 .xlsm 파일 하나가 공유 폴더에 있었습니다. 누가 개정본을 받든 그 파일을 열어 두 시트를 붙여넣고 실행합니다.
차장님이 짚으신 변화는 시간이 아니었습니다.
"이제 전부 봤다고 말할 수 있습니다."
전에는 표본만 보고 승인하면서도 나머지가 계속 걸렸다고 합니다. 그 불안이 사라진 것이 줄어든 시간보다 체감이 컸습니다.
다룬 도구
- 챗GPT — VBA 코드를 작성하고, 오류를 설명하면 고쳐 줍니다
- 엑셀 VBA — 설치 승인이 필요 없고 파일에 담아 공유됩니다
Alt + F11·Alt + F8— 편집기 열기와 실행. 이 둘만 외우면 됩니다.xlsm저장 — 이걸 놓치면 만든 코드가 사라집니다
비슷한 교육을 검토 중이시라면
이 과정은 3시간이었습니다. 비교 하나만 필요하면 2시간으로도 됩니다. 다만 오류를 직접 겪고 고쳐 보는 구간을 빼면 현업에서 막혔을 때 되돌아갑니다.
- 같은 양식의 파일을 반복해서 대조하는가 — 견적·계약·인사정보에서 잦습니다
- 틀렸을 때의 대가가 큰가 — 클수록 확신의 가치가 큽니다
- 참가자가 자기 파일을 가져올 수 있는가 — 이 준비가 효과의 절반입니다
대조하시는 문서 종류와 월 건수만 알려주시면 어느 작업부터 자동화하면 좋을지 정리해 보내 드립니다.
CONTACT
어떤 교육이 필요한지
아직 정하지 않으셨어도 됩니다
부서 구성과 지금 하고 계신 업무만 알려주시면, 저희가 커리큘럼 초안과 견적을 만들어 보내드립니다. 사전 조사부터 함께 진행합니다.
- 업무시간
- 09:00-18:00
급하시면 전화가 가장 빠릅니다. 상담 전 무료 수준진단도 이용하실 수 있습니다.
✓ AI 활용 수준진단