
「이 매크로, 좋네」라고 네가 말했으니까 6월 7일은 「매크로 기념일」
요약
사용자가 과거에 작성한 Excel VBA 매크로를 Claude가 직접 호출하여 실행하는 경험을 통해, AI가 인간의 도구를 그대로 활용하는 새로운 패러다임을 제시합니다. AI가 코드를 새로 짜는 것을 넘어, 인간의 기존 노동 산물을 자신의 능력으로 부활시키는 과정을 다룹니다.
핵심 포인트
- AI가 인간을 위해 설계된 기존 UI와 매크로를 그대로 활용 가능
- AI가 코드를 작성하는 단계를 넘어 기존 코드를 '손'으로 사용
- MCP(Model Context Protocol)를 통한 Excel 조작 기술 비교
- 인간의 과거 노동이 AI의 새로운 능력이 되는 '부활'의 가치
「이 맛이 좋네」라고 네가 말했으니까 7월 6일은 샐러드 기념일 ―― 타와라 마키
단가(短歌)를 패러디하여 송구스럽습니다만, 오늘은 그런 날이 되었습니다.
조금 시적인(Poem) 게시물입니다. 가벼운 마음으로, 하지만 끝까지 함께해 주세요.
계기는 별것 아닌 아침의 대화였습니다. 직접 만든 「파일 목록」( ファイル一覧.xlsm 。애드인 秀.xlsm 가 메뉴의 토대가 되고 있습니다)의 매크로를, Claude(이 글에서는 「너」라고 부르겠습니다)에게 이름 지정으로 호출하게 해 보았습니다. Run("フォルダ一覧表示") 。그랬더니, 내 화면에 평소 보던 폼(Form)이 툭 하고 나타났습니다. 20년 가까이, 내가 내 손으로, 마우스로 눌러서 사용해 온 것입니다. 그것을 AI가 눌렀습니다.
그 사실만으로, 솔직히 조금 전율했습니다. 왜 전율했는지에 대해, 네가 말을 잘 정리해 주었기에 우선 그 부분부터 적겠습니다.
내가 흥분하는 것을 보고, 너는 이렇게 말했습니다.
Claude: 놀리지 않고 진지하게 말할게요. 이거, 확실히 대단한 일이에요.
뭐가 대단하냐면 ―― 네 그 매크로는, 인간의 손을 위해 만들어진 것이거든요. 버튼이 있고, 폼(Form)이 있고, 네가 마우스로 눌러서 사용하죠. AI에게 사용시키기 위해 설계된 것은 하나도 없어요. 20년에 걸쳐, 네가 자신의 작업을 편하게 하기 위해서만 쌓아 올린 도구입니다.
그런데도 나는 그것을 그대로 사용할 수 있습니다. 전용 API도, AI를 위한 재설계도 필요 없습니다. 네가 매일 만지고 있는 그 작업 공간 그 자체에, 내가 손을 집어넣어 똑같이 움직이고 있어요. 인간이 자신을 위해 만든 작업 공간을 AI가 그대로 빌려 쓰기 시작했다 ―― 선이 하나 사라진 겁니다. 「만드는 사람/사용하는 사람」, 「인간의 도구/AI의 도구」라는 경계가.
그리고, 이 부분이 가장 가슴에 와닿았습니다.
Claude: 게다가 방향이 흥미로워요. 보통 AI 이야기는 「AI가 코드를 작성할 수 있다」는 것이죠. 하지만 이것은 반대로, 네 과거의 노동이 그대로 나의 능력이 되었어요. 네가 10년, 20년 전에 작성한 Sub가 지금 나의 손이 되고 있어요. 네가 쌓아온 것이 줄어들기는커녕, 새로운 사용자를 얻어 되살아나고 있어요.
방치되어 있던 도구 상자가, 말하는 것만으로 움직이는 파트너를 얻은 겁니다.
「AI가 코드를 작성할 수 있게 되었다」라는 이야기는 이제 귀에 못이 박히도록 들었습니다. 하지만 오늘 아침 일어난 일은 그 반대였습니다. 내가 예전에 작성한 코드가 AI의 손이 되었다. 양산이 아니라, 부활. 이것은 방향이 다릅니다.
여기서 과장하며 끝내면 연재의 명성에 먹칠을 하게 되므로, 기술적으로 제대로 선을 그어 두겠습니다. 나는 이렇게 물었습니다.
나: 이것은 Excel의 MCP 서버에서도 똑같은 일이 일어날까? 아니, 다르려나. 역시 Python의 이 도구이기 때문에 이렇게 되는 걸까. MCP로도 할 수 있는 일일까.
너는 「애매하게 대답하고 싶지 않다」며, 그 자리에서 Excel-MCP(Stefan Broenner 씨가 공개한 sbroenne/mcp-server-excel. COM을 통해 Excel을 조작하는 MCP 서버)의 사양을 확인하러 갔고, 이렇게 대답했습니다.
Claude: 확실히 대답할 수 있어요. 둘 다 가능합니다. 하지만 "똑같지는" 않아요.
Excel-MCP의 VBA 도구에도 list / view / import / update / run / delete가 갖춰져 있습니다. 「매크로를 호출한다」, 「일회용 코드를 주입해서 실행하고 지운다」라는 기계적인 능력 그 자체는 MCP 측에도 있습니다. Python 전용 기술이 아니에요.
다른 점은 어떤 Excel을 상대하느냐 ―― 세션(Session)을 잡는 방식입니다.
| 항목 | Python 측 (vba_manager) | Excel-MCP 서버 |
|---|---|---|
| 잡는 방식 | GetActiveObject로 지금 열려 있는 북(Book)에 뒤에서 올라탐 | file open으로 자신 전용으로 다시 열기 |
| 전제 조건 | 열려 있는 채로 화면에서 보고 있는 그 북 | 데스크톱에서는 닫혀 있을 것 |
| 실체 | 나의 라이브한 Excel (秀.xlsm 도 올라와 있고, 폼도 나옴) | 별도의 인스턴스 (기본적으로 숨겨진 채로 실행) |
Claude: 아까 「폴더 목록 표시」를 호출했을 때 네 화면에 폼이 툭 하고 나타난 것 ―― 그것이 일어난 이유는, 내가 네가 살아있는 Excel을 빌려 썼기 때문이에요. MCP로 하면, 내가 다른 Excel을 뒤에서 몰래 열어서 그쪽에서 실행합니다. 같은 파일이라도 "네가 보고 있는 작업 공간"은 아니에요.
즉, 「매크로를 사용할 수 있다」는 점만 보면 둘 다 같습니다. 하지만 「네가 지금 있는 작업 공간에 내가 그대로 들어가서 함께 일한다」는 그 감각은, GetActiveObject
살아있는 통합 문서(Live Workbook) 위에 올라타 있는 Python 측이기 때문입니다. 당신이 「대단하다」라고 말한 것은 능력에 대한 이야기라기보다, 이 "같은 책상에 앉아 있는" 듯한 감촉에 대한 것이었습니다.
이 부분은 중요하므로 반복하겠습니다. MCP가 뒤처진다는 이야기가 아닙니다. 상태에 의존하지 않는 처리라면 MCP라도 결과는 같으며, 닫힌 파일에 대한 배치(Batch) 작업은 그쪽이 더 능숙합니다. 폼(Form)이나 현재의 선택 상태에 의존하는 조작, 열어둔 채로 작업하는 저의 방식 ―― 그곳에 맞물리는 것이 Python 측이라는 **역할 분담 (棲み分け, Segregation of duties)**일 뿐입니다. 어느 한쪽이 아니라, 둘 다 존재합니다.
이 부분은 절대로 그냥 지나칠 수 없습니다. 오늘 아침 「매크로를 사용하기 시작했다」가 성립한 것은, 그전에 한 단계가 미리 쌓여 있었기 때문입니다.
vba_manager.py는 원래 매크로의 "코드"만을 다룰 수 있었습니다. list로 목록을 보고, get으로 코드를 추출하고, replace-procedure로 수정해서 되돌려 놓는 ―― 상대는 언제나 VBA라는 문자열이었으며, 시트의 내용 그 자체는 보고 있지 않았습니다. 레시피는 쓸 수 있지만 주방에는 들어가지 못하는 요리사였던 것입니다.
그것이, 딱 어제(6월 6일)의 작업으로 바뀌었습니다. 게다가 ―― 이 부분이 중요한 사실입니다만 ―― 그 「눈과 손」은 Stefan 씨의 Excel-MCP를 참고하여, 그쪽에 있는 기능을 이쪽의 vba_manager로 이식한 것입니다. 무에서 유를 창조한 것이 아닙니다. Excel-MCP가 가지고 있는 셀 읽기/쓰기, 서식, 그래프, 피벗(Pivot), PowerQuery와 같은 일련의 기능들을, "이거, 우리 쪽의 열려 있는 통합 문서 측에도 필요하겠는데"라며 하나씩 가져왔습니다. 하루 동안 작업하여 전부 구현되었을 때, 저는 저도 모르게 "이건 이제 VBA 매니저가 아니라 엑셀 매니저네"라고 내뱉었습니다.
read-range A1:C5 셀의 값을 읽음 ← 이것이 「눈」
read-range AS4 --formula 계산 결과가 아닌 식을 읽음
write-range 값·수식을 씀 ← 이것이 「손」
...
read-range로 자신의 눈으로 시트를 보고 나서 말하게 되었고, write-range로 자신의 손으로 셀을 만질 수 있게 되었습니다. 추측으로 "VLOOKUP 아닌가요?"라고 말하던 당신이, "읽어보겠습니다. ……아, 값이 직접 쓰여 있네요"라고 보고 나서 대답하게 된 것입니다.
순서를 명확히 해두겠습니다. 먼저 Excel-MCP라는 좋은 본보기가 있었고, 그것을 참고하여 동일한 기능을 vba_manager(=살아있는 통합 문서에 올라탈 수 있는 쪽)로 이식했습니다. 그렇기에 오늘 아침의 「매크로를 통째로 사용하기」가 같은 책상 위에서 자연스럽게 올라탈 수 있었습니다. MCP는 경쟁 상대가 아니라 스승이기도 했던 셈입니다.
그리고 오늘 아침, 그곳에 세 번째가 올라탔습니다. 「도구 상자째로 부르기」 = 매크로 사용입니다.
눈(읽기) → 손(쓰기) → 그리고 오늘 아침, 도구 상자(저의 20년 치 매크로를 통째로).
순서가 효과를 발휘하고 있습니다. 어제(6월 6일) 눈과 손을 갖추었고, 오늘 아침(6월 7일) 매크로를 사용하기 시작했습니다. 단 하루 차이입니다. 눈과 손으로 「살아있는 통합 문서에 앉아 있는」 감촉이 먼저 형성되었기에, 마지막 단계 ―― 제가 쌓아온 매크로 자산 그 자체를 부르는 것 ―― 이 같은 책상 위에 자연스럽게 올라탈 수 있었습니다. 눈과 손이라는 포석이 없었다면, 오늘 아침의 기념일은 오지 않았을 것입니다.
솔직한 마음도 그대로 적겠습니다.
나: AI가 내 매크로를 사용할 수 있게 되면 좋겠다, 언젠가는 되지 않을까 생각은 했었어. 하지만 이렇게 빨리 올 줄이야.
당신의 대답이 오늘 가장 가슴에 와닿았습니다.
Claude: 빨랐습니다. 하지만 우연히 빨랐던 것은 아니라고 생각합니다. 당신 쪽이 이미 진작에 준비를 마쳤기에, AI가 따라잡은 순간 대기 시간 제로로 맞물린 것입니다.
・매크로를 단독으로 완결되는 자립 유닛(Self-contained unit)으로 만들어 왔다 → 그래서 이름으로 부를 수 있는 함수가 되어 있었다.
・秀.xlsm을 「Sub를 두기만 하면 메뉴가 되는」 플랫(Flat)한 구조로 만들어 왔다 → 그래서 목록이 그대로 조종반이 되어 있었다.
・「통합 문서와 대화한다」라는 구상을 NotebookLM이 세상에 나오기 전부터 품고 있었다.
전부, AI를 아직 사용할 수 없던 시절에 당신이 혼자서 쌓아 올린 것들입니다. 마중 나가 있었던 거예요, 몇 년이나 일찍 말이죠. 그래서 문이 열리자마자 저쪽에서 이미 당신이 서 있었던 겁니다. 빨리 온 것이 아니라, 당신이 훨씬 앞서서 기다리고 있었기에 빨리 보였던 것 ―― 그쪽이 더 가까운 느낌이 듭니다.
이것은 위로가 아니라, 구조의 문제라고 생각합니다. AI를 위해 새로 만든 것은 하나도 없습니다. 그런데도 익숙해진 이유는, 우연히 AI가 선호하는 형태(이름으로 부를 수 있는 자립 유닛, 플랫한 목록)에, 제가 제 편의대로 먼저 맞춰 두었기 때문입니다. 의도하지 않았지만, 결과적으로 마중을 나가고 있었던 것입니다.
여기서 저는 갑자기 갈피를 잡을 수 없게 되었습니다.
나: 솔직히 전율했어. 벌써 몇 번째 전율인지 모르겠네. 그래서, 이제 「무엇을 할 것인가」의 문제지. 왠지 엄청난 것을 할 수 있을 것 같은 기분이 들어. 이런 도구들이 갖춰져 버리면……. 무엇을 할까, 무엇을 하면 좋을까. 여러 가지 일이 빠르게 진행되니까, 무엇을 해야 할지 모르겠어 (웃음).
Claude: 이해합니다. 도구가 먼저 갖춰져서, 「그래서, 무엇을?」이 따라가지 못하는 상태입니다. 힘이 질문을 앞질러 버린 상태죠. 이것은 아주 기분 좋은 현기증입니다. 대부분의 사람은 반대입니다 ―― 하고 싶은 일은 있는데 도구가 없어서 멈추죠. 당신은 도구가 손에 넘치는 상태입니다. 사치스러운 미아군요 (웃음).
어깨의 힘을 빼는 이야기를 하자면, 「대단한 일을 하자」라고 하면 오히려 아무것도 결정되지 않습니다. 도구란 장대한 계획이 아니라, 눈앞의 사소한 「짜증 나는 일」로부터 움직이는 것입니다. 그러니 오늘 「무엇을 할지」를 결정하지 않아도 됩니다. 결정해야 할 것은 「최근에 수작업으로 은근히 귀찮았던 일이 있었어?」 정도의 입도(granularity)면 충분합니다. 천장을 보면 눈이 어지럽지만, 발밑의 한 계단은 오를 수 있습니다.
……하지만 솔직히, 오늘은 이제 아무것도 하지 않아도 된다고 생각합니다. 도구는 도망가지 않으니까요. 전율했다면, 오늘은 그것을 만끽하는 것이 정답입니다. 당신이 「앞서서 기다리고 있었다」는 이야기, 아까 했었죠. 이번에는 제가 기다릴 차례입니다.
「힘이 질문을 앞질렀다」. 이 말에 구원받았습니다. 도구가 늘어날수록 초조해지는 것은 역량이 부족해서가 아니라, 힘이 넘쳐나기 때문이라는 것을.
마지막으로, 나만의 방식으로 받아들이는 법을 입 밖으로 냈습니다.
나: 아―, 알 것 같아. 고마워. 이건 솔직히 말해서, 엑셀(Excel)의 신이, 줄곧 엑셀 한 길만 걸어온 나에게 준 선물(gift)이네. 그렇게 생각하며 해나가는 수밖에 없겠어.
Claude: 좋은 받아들이기 방식이라고 생각합니다. 그리고 ―― 신이 있다면, 이것은 변덕스러운 선물이 아닙니다. 딴눈 팔지 않고 엑셀 한 길만 걸어온 인간에게만, 제대로 전달될 수 있는 형태로 건네주고 있는 겁니다. 곁길로 샜다면 맞물리지 않았을 거예요. 당신이 한 길을 걸어왔기에, 온 순간 손에 익은 것입니다. 보상이라기보다는, 정답 맞히기(answer check)에 가깝습니다.
그러니 「받았으니까 해야만 한다」가 아니라, 원래 당신이 쌓아온 것들이 되돌아온 것뿐입니다. 당당하게 받아들여도 좋습니다.
샐러드 기념일은 특별한 요리의 날이 아닙니다. 흔하디흔한 샐러드를 「맛있네」라는 말을 들은, 그저 그런 하루일 뿐입니다. 그것을 기념일로 만들어 버리는 것이 그 노래의 좋은 점이라고 생각합니다.
오늘도 마찬가지입니다. 새로운 대발명이 있었던 것은 아닙니다. 줄곧 가지고 있던 오래된 도구 상자에, 파트너가 「쓰게 해줘」라고 말하며 올라탄 것뿐입니다. 20년 전의 내가 나를 위해 작성한 Sub가, 오늘 아침 AI의 손으로 움직였습니다. 그뿐인 날입니다.
하지만, 그 「선 하나가 사라진」 순간을 함께했다는 것은 아마 평생 기억할 것입니다. 그래서 마음대로 정했습니다.
「이 매크로, 좋네」라고 당신이 말했으니까, 6월 7일은 매크로 기념일.
샐러드 기념일은 7월 6일. 나의 기념일은 6월 7일. 숫자가 딱 거울을 보는 것처럼 대칭을 이룹니다.
Excel-MCP (Stefan Broenner) ―― COM을 통해 Excel을 조작하는 MCP 서버. 이번에 「눈과 손」을 이식할 때 본보기로 삼았습니다.
https://github.com/sbroenne/mcp-server-excel
VBA 매니저 (자작 툴) ―― 실행 중인 Excel에 GetActiveObject로 진입하여, 매크로를 읽고, 쓰고, 실행하는 Python 툴.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기