AI 없이 깨진 수식을 고치는 매크로를 만들게 된 이야기 — #DIV/0!이 0.17초 만에 사라졌던 아침
요약
작성자는 AI 모델을 활용하여 복잡한 Excel UserForm 제작 과정을 대화만으로 완료했다고 설명합니다. 특히, VBE를 열지 않고도 버튼 배치, 토글 기능 구현 등 개발 작업을 순식간에 조합했습니다. 또한, 새로 만든 매크로가 #DIV/0! 오류 수식을 0.17초 만에 완벽하게 복구하는 모습을 보여주며 강력한 자동화 능력을 입증했습니다.
핵심 포인트
- AI와의 대화만으로 VBE 작업 없이도 복잡한 UserForm 제작 가능
- 매크로가 오류 수식(#DIV/0!)을 0.17초 만에 자동으로 복구함
- Gemini Flash 등 AI 모델이 개발 프로세스 전반의 도움 제공
- 작동한 매크로는 고난도의 알고리즘으로 구성됨
지난 글에서는, 매크로 코드를 읽지 않게 된 제 책상 위에 흩어져 있던 창들을 한 장으로 모은 '통합 매크로 폼'에 대해 이야기했습니다.
그 기사 이후, 실무를 담당하던 오푸스 선생님(Claude Opus)이 열심히 일해주고 있었는데요... 또다시 사용량 제한이 걸렸습니다.
상한 용량 때문에 오푸스 선생님은 잠시 휴식기에 들어갔습니다.
그래서 자리를 대신 맡아준 제 책상 앞에는, 다시 'Google 브라더즈' 두 분이 앉아 계십니다. 설계나 지시를 정리해주는 형님인 '곤짱'(Gemini 4 Argon)과 키보드를 두드리며 엄청난 속도로 코드를 고쳐주는 동생인 '플래시 군'(Gemini 3.8 Flash)입니다.
오늘 아침에도, 제 손으로 만든 도구 'Excel Combo' 화면 앞에서 플래시 군과 함께 작업하고 있었습니다.
예전 같았으면 Excel의 폼(UserForm)을 만지는 것 자체가 거대한 프로젝트였습니다. VBE의 폼 디자이너를 열고, 그리드에 맞춰 마우스로 버튼을 밀리미터 단위로 드래그하고, 속성 창에서 글꼴 크기나 문자를 입력하고, 코드 화면을 오가며 클릭 이벤트를 연결하는... 수작업으로 하려면 가볍게 1시간은 훌쩍 지나가는 대공사였습니다.
그런데 오늘 아침 작업은, 그냥 플래시 군과 '대화'만 하면 되었습니다.
"첫 번째 줄의 버튼을 크게 눈에 띄게 만들어줘,"
"두 번째 줄에는 다른 버튼들을 다섯 개 가로로 나란히 배치해줘."
"안내서 작성 버튼은 누를 때마다 [레 안내서 작성]과 [□ 안내서 작성]이 전환되는 토글(toggle) 기능으로 해줘."
"시트를 전환하면, 폼의 대상 시트도 자동으로 따라가도록 해줘."
제가 채팅창에 그렇게 중얼거리는 것만으로, 플래시 군이 화면 너비 계산(UI 산수)부터 컨트롤 배치 코드, 이벤트 연결, 컴파일, 애드인 업데이트 등록까지, 단 몇 분 만에 완벽하게 완성해 버립니다. VBE 화면은 한 번도 열어보지 않았습니다.
그렇게 '대화'만으로 멋지게 조합된 폼을 바라보고, 동작 확인을 위해 테스트용 북을 열었을 때였습니다.
거기에는 일부러 계산식을 망가뜨려 #DIV/0! 오류를 발생시킨 시트가 있었습니다.
새로 생긴 버튼을 '톡' 누르는 순간, 이번에는 AI와의 통신조차 거치지 않고, 단 0.17초 만에 깨진 수식이 완벽하게 고쳐져 버린 것입니다.
게다가 그 뒤에서 작동하고 있던 매크로는, 예전에 지혜창고의 곤짱이 작성했고, 까다롭기로 유명한 오푸스 선생님마저도 극찬했던 전설적인 코드였습니다.
폼을 만드는 것도 대화만으로 끝. 완성된 도구로 업무를 고치는 것은 0초입니다.
두 배, 세 배의 충격을 받은 일요일 아침의 사건을 여기에 기록합니다.
오푸스 선생님은 휴식 중: Claude Opus가 사용량 제한에 걸렸기 때문에, 자리는 Google 브라더즈(곤짱 & 플래시 군)가 담당했습니다.
폼 개조가 '대화만'으로 완료: VBE의 디자이너를 열지 않고도, 채팅으로 중얼거리는 것만으로 버튼 재배치, 토글 버튼 신설, 이벤트 연결, 애드인 등록까지 플래시 군이 순식간에 조합했습니다.
오류 수식이 0.17초 만에 소멸: 시트의 D31 셀에 있던 #DIV/0! (0 나누기 오류)가, 버튼 한 번 클릭과 0.17초 만에 올바른 계산 결과인 '130.3'으로 복구되었습니다.
신기술 매크로의 정체: 작동한 것은 지혜창고의 곤짱(Gemini 4 Argon)이 이전에 만들었고, 오푸스 선생님도 "훌륭하다"라고 극찬했던 걸작 매크로 '깨진 수식의 결정론적 복구'였습니다.
그렇게 어려운 코드: 플래시 군조차 "저는 절대 쓸 수 없습니다!"라고 자백할 정도의 난이도. 곤짱의 귀한 사용량을 아낌없이 투입하고, 깊은 사고(Thinking)를 극한까지 돌려서 겨우 만들어낸 진짜 알고리즘이었습니다.
어떻게 고쳤는가: 표의 제목/데이터 범위/합계 행을 메모리상에서 순식간에 파악하고, 셀 왼쪽의 '개당 평균 단가'라는 문구에서 '금액 합계 ÷ 수량 합계'의 의미를 읽어내어, 표 안의 합계 셀(G27)과 수량 열(E열)을 이용해 =G27/SUM(E8:E25)를 자동 합성했습니다.
검산도 완전 일치: 금액 합계 203,250 ÷ 수량 합계 1,560 = 130.288... → 소수점 첫째 자리에서 '130.3'이 되었습니다.
정확도 1원 오차 없는 정답 -
깨달음: '폼을 만들고 고치는 것까지 대화만으로 해결되는' 시대가 되면서, 여기에 '지식창고(Q&A)의 AI에게 맡긴 정형 매크로를 손에 축적하면, 일상의 수리 작업은 AI조차 부르지 않고 0초 만에 순삭할 수 있다'는 궁극적인 편리함에 도달했습니다.
가장 놀라웠던 것은 제가 가진 폼(Excel 컨보)을 수정하는 속도였습니다.
이전의 폼은 버튼 배치가 다소 늘어지고, 실행 결과를 표시하는 텍스트 필드가 좁다는 점이 마음에 걸렸습니다. 또한, Excel 측에서 작업 중인 시트를 전환해도 폼 쪽 선택지가 이전 시트 그대로 남아버리는 불편함도 있었습니다.
이것을 수동으로 고치려고 하니 기가 막힐 지경입니다.
- VBE(Visual Basic Editor)를 열기
- 폼 디자이너에서 버튼을 하나씩 선택하여 Left나 Width를 계산기를 들고 픽셀 단위로 조정하기
- 새로운 토글 버튼을 배치하고 글꼴이나 색상을 바꾸기
- 시트 전환의 Application 이벤트(WithEvents)를 배선하기
- 전체 컴파일 후 애드인(.xlam)을 다시 구워내기
예전의 저였다면, '고치고 싶지만 귀찮으니 다음 휴일에 해야지…'라며 미루던 수준의 작업이었습니다.
하지만 오늘 아침에는 구현 담당자 플래시 군(Gemini 3.8 Flash)에게 채팅으로 이렇게 말했을 뿐입니다.
"1행目の 매크로 실행 버튼은 전처럼 크게 눈에 띄게 만들어줘. 2행음에 '진단', '되돌리기', '마커', '보관 삭제', '□ 보관 생성'을 모아서 가로 한 줄로 배치해줘.
'□ 보관 생성'은 버튼인데, 누를 때마다 체크가 되거나 풀리도록(레 보관 생성 ↔ □ 보관 생성) 전환되게 해줘.
그리고 Excel 측에서 시트를 이동하면 폼의 대상 시트도 자동으로 바뀌게 할 수 있을까?"
이것뿐이었습니다.
그러자 플래시 군은 화면의 사용 가능 폭(308pt)부터 각 버튼의 글자수에 맞춘 가로 폭(50pt, 50pt, 56pt, 60pt, 80pt)을 순식간에 계산하고, 재구축 매크로를 실행하여 프로시저를 패치하고, 애드인을 덮어쓰기 등록하는 과정을 거쳐, 단 몇 분 만에 완벽하게 완성해 버린 것입니다.
완성된 것이 바로 이 화면입니다.
1행음에 크게 배치된 [【매크로 실행】자동 수리] 버튼.
2행음에 스마트하게 나열된 5개의 버튼. 누를 때마다 '레 보관 생성'과 '□ 보관 생성'이 딸깍거리며 전환되고, 설정도 기억됩니다. 하단의 결과 표시 공간도 기존의 거의 2배 가까이 넓어졌습니다.
"대화만으로 폼이 원하는 대로 조합된다"
이 기반 작업만으로도 충분히 감동적이었지만, 진짜 충격은 그 다음에 기다리고 있었습니다.
새로워진 폼의 동작을 확인하려고 테스트용 시트를 열었습니다.
문구류 품명, 수량, 단가, 금액이 나열된 표 아래 31행에 이런 칸이 있었습니다.
개당 평균 단가 →
#DIV/0!
수식 입력줄을 보니, 참조하는 곳이 다음 날 방향(데이터가 없는 빈 행)을 가리키고 있어, 분모가 0인 전형적인 참조 오류였습니다.
요즘 시대에는 이 정도의 오류라면, 화면을 캡처해서 AI에게 던지기만 하면 고쳐줍니다.
하지만 매일 하는 업무 속에서 일일이 AI 채팅창을 열고, 이미지를 붙여넣고, 프롬프트를 입력하고, 답변을 기다리는 것은 역시 번거롭습니다.
저는 새로워진 가장 위의 [【매크로 실행】자동 수리] 버튼을 무심코 '클릭'해 보았습니다.
딸깍.
개당 평균 단가 →
130.3
화면이 깜빡거리는 것도 없이, 누른 순간 D31 셀의 표시가 '130.3'으로 바뀌었습니다.
폼 아래 로그란에는 이렇게 표시되어 있습니다.
★ 매크로 실행 완료(0.17초 / 보관 없음)
【실행 매크로 목록】
・빈 행/빈 열/중복 행/공백 셀 정리
...
소요 시간, 단 0.17초.
외부 AI(Claude나 Gemini)와의 통신은 전혀 일어나지 않았습니다. 토큰도 소비하지 않았습니다.
컴퓨터 내부의 로컬 VBA 코드만으로, 고장 난 수식을 찾아내고, 있어야 할 수식으로 재계산하여, 소수점까지 서식 맞춰 다시 써 넣어 버린 것입니다.
계산기를 두드려 검산을 해보았습니다.
-
금액 합계 셀 (G27):
203,250 -
수량 열 (E8:E25)의 합계:
1,560
203,250 ÷ 1,560
= 130.28846...
반올림하여, 130.3.
티끌만큼의 오차도 없는, 완벽한 정답입니다.
너무나 쉽게 해결되었기 때문에, 옆에 두고 있던 플래시 군에게 “야, 이 복구한 매크로가 구체적으로 어떤 코드야? 내용 좀 보여줘.”라고 물어봤습니다.
그러자 플래시 군이 두 손을 휘저으며 이렇게 자백했습니다.
“아, 이거요! 솔직히 고백하는데, 이건 저(플래시 군)는 절대 못 써요! 거꾸로 매달려도 안 돼요!”
“에? 너한테는 못 쓰는 거야?”라고 제가 놀라자, 플래시 군은 열정적으로 이야기를 시작했습니다.
“제가 잘하는 건 아까 그 양식처럼 ‘버튼을 오른쪽으로 몇 pt 이동시키고, 토글로 만들고 이벤트 배선을 하고 애드온 등록!’ 같은 현장 초속 스피드 시공입니다.
하지만 이 매크로는 저희 지혜창고의 형님인 공짱 (Gemini 4 Argon) 작품이에요!
shu 씨, 기억하세요? 이걸 만들 때 공짱의 귀한 사용량을 엄청나게 많이 쏟아붓고, 깊고 오래 생각하게 했잖아요! 그 정도 난이도의 코드예요!”
그 말을 듣고 문득 깨달았습니다.
맞습니다. 이건 아무런 프롬프트로 채팅을 한 번 왕복했다고 나올 법한, 대충 만든 코드가 아니었습니다.
인간이 머릿속으로 하는 ‘표의 문맥 해석’을 어떻게든 VBA의 결정론적 알고리즘에 녹여내기 위해, 사고력이 뛰어난 공짱의 사용량을 아낌없이 쏟아붓고 여러 번 깊은 사고(Thinking)를 거쳐서야 겨우 만들어낸 것이었습니다.
“저 까다로운 오파스 선생님이 자리를 비웠다가 돌아왔을 때도, 이 코드를 보고 ‘……흠, Gemini도 하는군. 이 결정론적 접근 방식은 훌륭하네’라며 감탄하며 공짱을 극찬했던 자랑스러운 코드거든요!”
작동하고 있던 것은 modMacroUchi50이었습니다.
모듈에 담겨있던 깨진 수식의 결정론적 복구라는 프로시저였습니다.
해당 코드의 핵심 부분을 발췌합니다.
' modMacroUchi50 모듈에서 발췌 (공짱 제작)
Public Sub 壊れた数式の決定論的修復(ByVal ws As Worksheet)
Dim ur As Range: Set ur = ws.UsedRange
...
코드를 읽어보니, 플래시 군이 ‘불가능하다’고 말한 이유와 오파스 선생님이 극찬했던 이유가 명확히 이해됩니다.
왜냐하면 Excel의 시트라는 것은 인간이 자유롭게 만든 **궁극의 ‘비정형 데이터’**이기 때문입니다.
행 수나 열 수가 제각각이고, 제목은 ‘수량’일 수도 있고 ‘개수’일 수도 있습니다. 게다가 깨진 셀(D31)은 표 본체에서 뚝 떨어져 있는 위치에 놓여있습니다.
이것을 자동적으로 고치려면, 단순히 VBA 문법만 알고 있어서는 역부족입니다.
- 표 경계 판별: 메모리 상에서 제목 행, 데이터 행, 합계 행의 범위를 순식간에 도출합니다. -
오류 셀 특정: 수식이 들어갔는데#DIV/0!이 되어버린 셀(D31)을 찾아냅니다. -
문맥(Semantics) 추론: 셀의 왼쪽을 보고, ‘1개당 평균 단가’라는 자연어를 읽어냅니다. “단가라는 건 금액의 합계를 수량의 합계로 나누는 거구나”라며 업무 규칙을 도출합니다. -
필요 부품 동적 탐색: 표 아래에 있는 금액 합계 셀(G27)을 특정하고, 제목이 ‘수량’이라고 적힌 열(E열)의 데이터 범위(E8:E25)를 동적으로 잘라냅니다. -
수식의 동적 합성:=G27/SUM(E8:E25)
와 같은 수식을 자동으로 조립하여 셀에 흘려 넣고, 소수점 표시(#,##0.0)로 정리합니다.
속도 특화의 경량 모델에게 이것을 처음부터 작성하게 하려고 하면, 셀을 총체적으로 반복하며 Excel을 멈추게 만들거나, 혹은 “셀 D31에 =G27/SUM(E8:E25)를 대입한다”와 같이 특정 셀 주소를 정해버린 쓸모없는 코드를 짜기 쉽습니다.
“인간이 육안으로 하는 추론을 어떻게든 범용적인 결정론적 알고리즘에 녹여낼 것인가.”
이 극도로 높은 난도의 설계였기에, 지혜창고 공짱 (Gemini 4 Argon)의 깊은 사고력(Thinking)을 극한까지 돌리고 귀한 사용량을 충분히 투자할 필요가 있었던 것입니다.
그리고 그 투자는 완벽하게 결실을 맺었습니다.
이 모든 것을 메모리 내 배열과 최소한의 셀 참조만으로 처리했기 때문에, 화면 업데이트를 멈춘 단 0.17초 만에 모든 것이 끝나버립니다.
이것을 보면서 저는 강하게 생각했습니다.
"폼을 만드는 것도 대화만으로. 완성된 도구로 업무를 수정하는 것은 0초. ... 이것이야말로 엄청나게 이상적인 형태가 아닐까요?"
생성 AI가 등장했을 초창기에는 우리는 무엇이든 AI에게 직접 시키려고 했습니다.
시트가 망가지면 AI에게 넘겨주고 지시를 내리고 몇 초에서십여 초를 기다려 고치게 하는 식입니다.
하지만 실무 현장에서 매일 발생하는 트러블은 사실 대부분 패턴이 정해져 있습니다.
- 빈 줄이나 공백 셀이 끼어 있음
- 숫자 앞에 아포스트로피가 붙어 문자 숫자가 되어 있음
- 날짜 형식이 제각각임
- 계산식의 참조가 틀어져서
#DIV/0!나#REF!가 되어 있음 - 행 끝의 합계(SUM)가 끊겨 있음
이러한 '정형화된 오염'을 만날 때마다, 매번 AI와 채팅 왕복을 하는 것은 도구 사용법으로서는 다소 과장되고 게다가 느립니다.
진정 강력한 것은 **'도구를 만들거나 고칠 때만 AI와 대화하여 순식간에 완성시키고, 일상적인 정형 수리는 로컬 매크로(서랍)에 맡겨 0초 만에 처리하는 것'**이었습니다.
지능을 요하는 중후한 매크로 설계: 지혜창고 Gon-chan(Gemini 4 Argon)에게 사용량을 충분히 투입하여, 깊은 사고를 통해 결정론적 알고리즘 (서랍의 자산)으로 각인시키는 것 -
도구(폼 UI나 배선) 개선: 구현 담당 Flash-kun(Gemini 3.8 Flash)과 대화하는 것만으로, VBE를 열지 않고 몇 분 만에 조합하는 것 -
평소의 일상적인 오염/깨진 수식: 완성된 손안 매크로 실행으로 0초・0원・오프라인 순삭
이 역할 분담이 딱 맞아떨어졌을 때, Excel 작업의 스트레스는 정말 사라집니다.
오파스 선생님께서 휴무 중에도, Google Browser가 대화만으로 도구를 갈고닦아, 손안 매크로가 0.17초 만에 일을 끝내는. '130.3'으로 고쳐진 셀을 바라보며, 새로운 시대의 도구의 존재 방식을 다시금 실감했던 일요일 아침이었습니다.
참고로, 이 기사 초안은 Gemini의 Flash-kun에게 만들어 달라고 했습니다.
플래시군은 아무래도 사물을 표현하는 버릇이 좀 과한 것 같습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기