AIにマクロを書いてもらう5ステップ

  1. 1手作業の手順を書き出すクリックや入力の順番を、自分が実際にやっている通りに言葉にする
  2. 2AIにコードを書いてもらう対象シート名・列・保存先を具体的に伝える
  3. 3コピーしたファイルで実行する本番データではなく、必ず複製したファイルで試す
  4. 4エラーを1つずつAIに直してもらうエラーメッセージをそのまま貼って修正を依頼する
  5. 5マクロ有効ブックとして保存し共有する他の人が実行しても安全か、入力チェックの有無を確認する

ExcelのVBAマクロは、「使えば数時間の作業が数分で終わる」と言われる一方、「コードが読めないから手が出せない」という理由で後回しにされがちな機能です。ChatGPTやCopilotにコードを書いてもらえる今は、この壁がかなり低くなっています。ただし、関数・数式をAIに作ってもらう場合(Excelの関数・数式をAIに作ってもらう方法)と違い、マクロはファイルを削除・上書きする処理も書けてしまうため、試し方を間違えると被害が大きくなる点に注意が必要です。

この記事では、AIにVBAマクロを書いてもらう具体的な手順と、実際によく出てくるコード例、エラーの直し方、そして「マクロではなく他の手段を選んだ方がよい場面」を整理します。

マクロが向いている作業、数式では無理な作業

数式とマクロは、似ているようで役割が異なります。

作業の特徴 向いている方法
セルの値を見て計算結果を表示するだけ 数式(SUMIFS、XLOOKUPなど)
ファイルを開く・保存する・別ファイルを作る マクロ(VBA)
シートの書式や行・列そのものを操作する(行の削除、色分けなど) マクロ(VBA)
ボタン1つで複数の処理を順番に実行したい マクロ(VBA)
毎日決まった時間に自動実行したい マクロでは不十分、Power Automateやタスクスケジューラが必要

「ボタンを押すだけで、複数シートの転記・集計・保存まで一括で終わらせたい」という要望は、数式では実現できずマクロの領域になります。

具体例:複数シートのデータを1つにまとめるマクロ

よくある依頼として、「月別に分かれた複数のシートを、1つの集計シートにまとめたい」という処理を例にします。

プロンプト例

Excelで次のVBAマクロを書いてください。
- ブック内に「4月」「5月」「6月」というシートがある
- 各シートのA列(日付)、B列(取引先)、C列(金額)を
- 「集計」という新しいシートに、上から順に結合して貼り付けたい
- 1行目はヘッダーなので各シートで2行目以降だけ対象にする
- マクロを実行するたびに「集計」シートの内容は一度クリアしてから書き直す

生成されるコードの例

Sub 月別シートを集計する()
    Dim wsSrc As Worksheet
    Dim wsDst As Worksheet
    Dim sheetNames As Variant
    Dim i As Long
    Dim lastRowSrc As Long
    Dim lastRowDst As Long

    sheetNames = Array("4月", "5月", "6月")
    Set wsDst = ThisWorkbook.Sheets("集計")

    ' 既存データをクリア(ヘッダー行は残す)
    wsDst.Range("A2:C10000").ClearContents

    For i = LBound(sheetNames) To UBound(sheetNames)
        Set wsSrc = ThisWorkbook.Sheets(sheetNames(i))
        lastRowSrc = wsSrc.Cells(wsSrc.Rows.Count, "A").End(xlUp).Row
        lastRowDst = wsDst.Cells(wsDst.Rows.Count, "A").End(xlUp).Row + 1

        If lastRowSrc >= 2 Then
            wsSrc.Range("A2:C" & lastRowSrc).Copy wsDst.Range("A" & lastRowDst)
        End If
    Next i

    MsgBox "集計が完了しました"
End Sub

このコードは妥当な出発点ですが、実務ではそのままでは不十分なことが多いです。たとえば「4月」シートが存在しない年がある場合、Sheets("4月")の行でエラーになります。AIに「シートが存在しない場合はスキップするようにしてください」と一言追加するだけで、On Error Resume Nextやシート存在チェックを入れた、より安全なコードに直してもらえます。

よくあるエラーとAIへの直し方

初めてマクロを実行すると、次のようなエラーに遭遇しやすいです。

エラー・症状 典型的な原因 AIへの頼み方の例
「実行時エラー’9’: インデックスが有効範囲にありません」 シート名が間違っている、またはそのシートが存在しない 「このエラーが出ました:(エラー文をそのまま貼る)。シート名のタイプミスがないか確認し、存在しない場合はメッセージを出して処理を止めるコードに直してください」
マクロ実行後、ファイルを保存しても「有効化」ボタンが毎回出る ファイル形式が.xlsxのままで、マクロ有効ブック(.xlsm)で保存していない (AIへの質問ではなく)「ファイル」→「名前を付けて保存」で「Excel マクロ有効ブック(*.xlsm)」を選び直す
処理が重く、実行中にExcelが固まる 画面の再描画やセルごとのループが多い 「処理中は画面更新を止めて、終わったら戻すコードを追加してください」と頼むとApplication.ScreenUpdating = Falseを入れてもらえる

エラーメッセージは要約せず、表示された文章をそのまま貼ってAIに渡すのが近道です。要約してしまうと、AIが見当違いの原因を推測してしまうことがあります。

検証・修正にかかる時間の目安(あくまで目安)

次の時間感覚は実測ではなく、あくまで目安としての参考値です。

  1. 単純な繰り返し処理(決まった範囲のコピー・貼り付けなど):コード生成から動作確認まで15〜30分程度
  2. 複数シートをまたぐ処理、条件分岐が2〜3個ある処理:30分〜1時間程度(エラー修正のやり取りを含む)
  3. 複数人のPCで共有し、ファイルパスやシート構成の違いに対応させる作業:さらに1〜2時間程度

「最初から完璧なマクロを一度で作ってもらう」のではなく、「まず単純な処理で動かし、例外処理を後から追加する」方が、結果的に早く仕上がります。

マクロ以外を選んだ方がよい場面

AIにコードを書いてもらえるからといって、何でもマクロで解決しようとすると、後で保守できなくなります。

配布・共有する前に確認すること

AIが書いたマクロを自分のPCだけで使うなら試行錯誤しやすいですが、他の担当者に配布する場合は次を確認してから渡してください。

まとめ

AIはVBAの構文を覚える手間を大きく減らしてくれますが、「ファイルを操作する」マクロは数式よりも失敗時の影響が大きい点を忘れないでください。まずコピーしたファイルで試し、エラーメッセージはそのままAIに渡して直してもらい、仕組みとして定着させる前に他の担当者のPCでも動くか確認する。この順番を守れば、知識がなくても十分に実用的なマクロを作れます。

Excel業務の自動化を仕組みとして整理したい場合は、Excel・事務自動化ガイドもご覧ください。自社の状況に合わせて相談したい方は、Excel・事務作業の無料相談もご利用ください。

よくある質問

VBAの知識が全くなくても、AIが書いたマクロは使えますか?
短い処理(決まった範囲の値をコピーする、不要な行を削除するなど)であれば、コードを読めなくても動かせることが多いです。ただし「動いているが何をしているか分からない」マクロは、エラーが出た時に自分で直せません。最低限、AIに「このコードが何をしているか、行ごとに日本語で説明してください」と聞き、処理の大枠だけは理解してから使うことをおすすめします。
ChatGPTとMicrosoft Copilot、どちらにマクロを書いてもらうべきですか?
ChatGPTは説明した条件からコードを組み立てる力が高く、複雑な分岐やエラー処理まで一度に提案してくれます。Copilot(Microsoft 365版)はExcel内の会話欄からVBA画面を直接開けず、コードはVBE(Visual Basic Editor)に自分で貼る前提になる場合が多いため、どちらを使っても最終的な貼り付け・実行・デバッグは自分で行う作業として考えておくとよいでしょう。
AIが書いたマクロは、他の人のパソコンでも同じように動きますか?
シート名や列の位置、ファイルの保存場所をコード内に直接書き込んでいる(ハードコードしている)場合、環境が変わると動かないことがあります。複数人で使う場合は、ファイルパスを自動取得する処理に直してもらうか、少なくとも「このマクロは誰のPCでも動きますか」とAIに確認したうえで、別の担当者のPCでも一度テストしてください。

自社の業務について相談する

相談内容が決まっていない段階でもご利用いただけます。

お問い合わせへAI業務診断を試す