Excel のマクロ(VBA)を直したいとき、「VBE を開いてコードを読んで、直して、F5 で動かして、セルを目で確かめる」という往復を AI に丸ごと任せられたら楽です。自作の Markdown エディタ MDium に、それをやる「マクロチャット」を実装したので、実際の画面を交えて紹介します。
本記事の操作とスクリーンショットは、自作の Windows GUI 操作 MCP サーバー winuse を使って、Claude Code に MDium を実機操作させながら撮ったものです。
MDium とは
MDium は Tauri(Rust + React)製のデスクトップ Markdown エディタです。opencode / Claude Code / Codex / GitHub Copilot をひとつのパネルで切り替えられる AGENT CHAT、RAG、Office ドキュメントの変換やプレビュー、フロー(ワークフロー)エディタなどを載せています。Windows 向けのインストーラーを Releases で配布しています。
この記事で扱うのは、そのうちの Excel VBA マクロチャット です。
できること
-
.xlsm/.xlamをファイルツリーで開くと、タブが「シートプレビュー | マクロチャット」に分かれる - チャットに変更内容を書くだけで、AI がモジュールを展開(
vba_pull)→.bas/.clsを編集 → ブックへ書き戻し(vba_push)まで行う - 標準モジュール・クラスモジュールの追加と削除にも対応(ドキュメントモジュールは編集のみ)
- 書き戻しのたびに
<ブック名>.xlsm.bakを作る - 「動作確認までお願いします」と頼むと、AI がブックのコピー上でマクロを実行し(
vba_run)、セルの値を読んで期待どおりかを自分で判断する。ずれていれば直して再実行する - ブックが Excel で開かれている間は書き戻しを拒否し、チャット上に警告を出す
- 展開・書き戻しに Excel は不要(
vbaProject.binを直接読み書き)。マクロ実行だけ Windows + Excel が必要
試してみる
用意したブック
売上集計.xlsm に「売上」シート(商品名・数量・単価の 5 行)と、ヘッダー行を太字にするだけの FormatHeader マクロを入れた Module1 を用意しました。
Option Explicit
' 売上シートのヘッダー行を太字にする
Public Sub FormatHeader()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("売上")
ws.Range("A1:C1").Font.Bold = True
End Sub
ブックを開く
MDium でフォルダを開き、ファイルツリーの 売上集計.xlsm をクリックすると、左にシートのプレビュー、右に「マクロ編集」ペインが出ます。ヘッダーにはブックのモジュール一覧(ThisWorkbook / Sheet1 / Module1)が種別つきで並びます。
指示を送る
右ペインの入力欄に、こう書いて送信しました。
売上シートの D 列に「金額」(数量×単価) を各行に書き、最終行の下に合計行を追加する CalcSales マクロを Module1 に追加してください。実装から動作確認までお願いします。
パスやモジュール名の指定、「展開してから」といった手順の指示は要りません。アクティブなタブがブックなので、送信文には自動でブックのパスが付きます。
AI の動き
送信直後、AI はブックのモジュール一覧を取り(vba_list)、<ブック名>_assets/macros/ に .bas / .cls を展開し(vba_pull)、シートの現在値を読みます(xlsx_read)。
続いて Module1.bas を編集し、vba_run で CalcSales をブックのコピー上で実行して A1:D7 を読み取ります。ファイルツリーには runs/<時刻>_<マクロ名>/ に実行用コピーができているのが見えます。
完了後にツール呼び出しを展開すると、全体の流れが一列に並びます。
- スキル
vba-mdium-flowとvba-coding-conventionsを読み込む -
vba_list→vba_pull→xlsx_read→read(展開したソースを読む) -
編集前に
vba_runで既存のFormatHeaderを走らせて基準を取る(退行チェック用) -
editでModule1.basにCalcSalesを追加 -
vba_runでCalcSalesを実行し、セル値を読む - 期待どおりなので
vba_pushで原本に書き戻す
vba_run の結果には、実行後のセル値がそのまま入っています。AI はこれを「数量×単価」の期待値と突き合わせます。
vba_push の結果には、更新・追加・削除されたモジュールとバックアップのパスが入ります。今回は Module1 の更新だけです。
最後にチャットへ、追加したコードと動作確認結果がまとめて報告されます。ファイルツリーにも 売上集計.xlsm.bak が増えています。
Excel で確かめる
書き戻されたブックを Excel で開いて Alt+F8 から CalcSales を実行すると、D 列と合計行がそのとおりに入りました。
Excel で開いたままだと
ブックを Excel で開いたまま MDium に戻ると、ペインに「Excel で開かれています。閉じてから編集してください」が出て、「マクロを取り込み」ボタンも無効になります。AI 側も vba_push が workbook_locked で拒否されるので、展開と編集は進めつつ、書き戻しだけ閉じるのを待ちます。
仕組み
opencode (LLM)
.opencode/tools/vba_list.ts / vba_pull.ts / vba_push.ts / vba_run.ts / xlsx_read.ts
skills/vba-mdium-flow, vba-coding-conventions ← 接続時に MDium が自動導入
│ HTTP (127.0.0.1, Bearer token)
▼
MDium (Tauri / Rust)
/vba/list, /vba/pull, /vba/push … vbaProject.bin を直接読み書き (MS-OVBA)
/vba/run … コピーを組み立て → シム注入 → PowerShell + Excel COM(非表示)
/xlsx/read … calamine で保存済みセル値を読む
展開と書き戻しは Excel なしで
pull / push は xl/vbaProject.bin(OLE 複合ファイル)を Rust で直接扱います。dir ストリームのレコードを分解してモジュールの追加・削除・差し替えを行い、/PROJECT と /PROJECTwm も合わせて更新します。ソースは MS-OVBA の圧縮形式でコードページ(日本語なら cp932)に変換して書きます。VBE のエクスポート形式(VERSION 1.0 CLASS ヘッダなど)との違いは push 側で吸収します。
実行は必ずコピー上で
vba_run は「原本 + マクロフォルダの現在のソース」からコピーを <ブック名>_assets/runs/<時刻>_<マクロ名>/ に組み立て、そこに MdiumShim という標準モジュールを注入してから Excel COM で実行します。シムは MsgBox / InputBox を横取りして、あらかじめ渡された応答を返し、未処理エラーをラッパーで捕まえます。それでも出てしまうダイアログ(実行時エラーなど)は Rust 側が Excel プロセスのウィンドウを監視して閉じます。原本には vba_push まで一切触りません。
暴走させないための制約
AI にマクロの試行錯誤を任せると、課金が膨らんだり、似た関数が増殖したり、On Error Resume Next で握りつぶして通したりしがちです。これはスキルの文面だけでなく、ツール側で抑えています。
-
vba_runは利用者の 1 回の指示につき 6 回まで。超えるとrun_budget_exhaustedを返し、AI は状況を報告して止まる(次の指示を送ると戻る) -
push時の lint がduplicate_procedure(同名プロシージャの増殖)とon_error_resume_next_addedを警告する - ファイル削除・シェル実行・通信などブックの外に影響する呼び出しが含まれていれば
side_effects_detectedを返し、実行するには MDium 側の承認ダイアログで利用者が許可する - スキルは「編集前に既存マクロの基準を取り、編集後に同じ範囲を比べて退行を検出する」「修正と再実行は 3 回まで」「期待値をコードに合わせない」と指示する
制限
- マクロ実行(
vba_run)は Windows + Microsoft Excel が必要。展開・書き戻しは OS を問わない - ユーザーフォーム(
.frm)は展開も書き戻しも対象外。UserForm を出すマクロは自動検証できない - マクロチャットは opencode 接続専用(Claude Code / Codex / Copilot タブからは使えない)
-
ThisWorkbook.Pathで隣のファイルを参照するマクロは、コピー上では失敗することがある(スキルに注意書きあり)
おわりに
「展開 → 編集 → コピーで実行 → セルを読んで検証 → 書き戻し」までをツールで固めると、AI にマクロを任せる心理的ハードルがかなり下がりました。手元の .xlsm で試してみたい方は MDium の Releases からどうぞ。








