AIでExcelマクロを作る方法|VBAが書けなくても動く実例3つ【ChatGPT/Copilot対応】
📌 まず結論(30秒で読めます)
コードが書けなくても、AIに ① 何を ② どのデータが・どこに ③ 結果はどうなってほしい の3点を伝えればExcelマクロは作れます。
ただし、生成されたコードはそのまま信じず、使う前に3点だけ確認するのが安全です(対象範囲は自動取得か/削除などの破壊的操作は無いか/実在しない命令は無いか)。
いますぐ試すなら、AIにこう頼んでみてください👇
「Windows版Excelで、『1月』『2月』『3月』シートのA〜D列のデータを、見出し1回だけで『集計』シートに縦に連結するVBAマクロを書いて。最終行は自動で取得して。」
「毎月の集計を自動化したいが、VBAは書けない」「ChatGPTにマクロを作ってもらったが、どこに貼ればいいか分からない」「作ってもらったマクロを実行していいのか不安」——こうした"あと一歩"でつまずく方に向けた記事です。
💡 関連記事:
- Excelマクロ(VBA)が動かない・エラーが出るとき ← AIに作ってもらったマクロが 実行できない/エラーが出る ときはこちら(症状別に切り分け)
- 数式が計算されない・=SUMがそのまま表示される ← 集計結果が合わないとき、対象セルが 文字列扱い(左寄せ・緑の三角)でないか確認
- Excelの時短ショートカット ← VBAエディタを開く
Alt + F11、マクロ一覧Alt + F8の補足
AIにExcelマクロを書いてもらうという選択肢
VBAを 学ぶ ことと、AIに 書いてもらう ことは別の話です。本記事は後者、「自分で書けなくても、AIに頼んで動くマクロを手に入れる」方法に絞ります。
ただし、AIは もっともらしく見えて実は動かないコード を書くことがあります。そのまま丸ごと信用せず、人間側が3点だけ確認すれば安全に使える という前提で進めます。この記事で手に入るのは次の4つです。
- AIに失敗なく頼む プロンプトの型(3要素)
- コピペで動く実例3つ(シート統合・色付け・レポート整形)
- 出てきたコードを 動かす手順(貼り付け先・保存形式)
- 安全に使うチェック(3点検証)
3つのAIサービスの違い(どれを使うか)
マクロを書いてもらえる代表的なAIは3つです。どれを使っても、本記事のプロンプトと検証手順はそのまま使えます。
| サービス | 料金(執筆時点) | コードの貼り付け先 | Excel特化の知識 |
|---|---|---|---|
| ChatGPT | 無料プランあり/有料の場合あり | 自分でVBAエディタへ貼る | 汎用(前提は自分で伝える) |
| Microsoft Copilot(Web版 copilot.microsoft.com) | 無料プランあり/有料の場合あり | 自分でVBAエディタへ貼る | 汎用 |
| 本サイトのAI案内人 | 無料・登録不要 | 自分でVBAエディタへ貼る | Excel特化 |
⚠️ 「Microsoft Copilot」には複数の形態があります
「Excelを開くと画面にCopilotボタンがある」という説明を見かけますが、Excelに組み込まれたCopilotは2026年現在、すべての個人ユーザーに提供されているわけではありません(Microsoft 365の対象プラン+別ライセンスなどの条件があります)。手元のExcelにCopilotボタンが無くても異常ではありません。本記事は、無料でも使える Web版のCopilot(copilot.microsoft.com) にコードを書いてもらう前提で進めます。
料金やプランは変更が頻繁なので具体額には触れません。3つに優劣はなく 用途が違うだけ で、まずは無料で試せるものから始めれば十分です。なお本サイトのAI案内人はExcel特化なので、バージョンやOSといった前提を毎回書かずに済むのが利点です。
失敗しないプロンプトの3要素
AIにマクロを頼むとき、次の3要素を必ず入れると、的外れなコードが返りにくくなります。
- ① 何を:処理の目的を1文で(例「複数シートを1枚にまとめたい」)
- ② どのデータが・どこに:シート名・範囲・列の意味(例「『1月』〜『3月』のA〜D列、1行目は見出し」)
- ③ 結果はどうなってほしい:出力先・形式・条件(例「『集計』シートに見出し1回だけで縦に連結」)
伝え方でコードの質は大きく変わります。
悪い例
Excelのマクロを作って。シートをまとめたい。
良い例
①「1月」「2月」「3月」の3シートを1枚にまとめたい。②各シートはA〜D列で1行目が見出し。③新しい「集計」シートに見出し1回だけで縦に連結。最終行は自動取得で。Windows版Excelです。
悪い例ではシート名も列構成も分からず、当てずっぽうのコードになります。②③まで書くと、そのまま動くコードが返りやすくなります。
📌 ポイント: サンプルデータを2〜3行貼ると精度が一気に上がります。 言葉で説明するより、実際の値を数行見せたほうがAIは構造を正しくつかみます。最初に環境(Windows/Mac、
.xlsmで保存する前提)を伝えるのも効果的です。
この3要素を全部やってくれる「おまかせ起動プロンプト」
VBAが書けなくても、下のプロンプトをそのままコピーしてChatGPT・Copilot(または本サイトのAI案内人)に貼れば、AIが必要な情報を1つずつ質問しながら確認してからコードまで書いてくれます。
あなたはExcelマクロ(VBA)作成のアシスタントです。私はVBAを書けない初心者です。
いきなりコードを書かず、次の順番で進めてください。
【ステップ1:足りない情報を、1つずつ質問する】
私がこのあと「やりたいこと」を一言で書きます。
作るのに情報が足りなければ、まとめてではなく "1つずつ" やさしい言葉で質問してください。
特に次を確認してください:
・どのシートの・どの範囲か(1行目は見出しか)/各列が何のデータか
・結果をどこに・どんな形で出したいか
・Windows か Mac か(保存は .xlsm 前提でよいか)
・絶対に消したくない・変えたくないデータはあるか
※「実際のデータを2〜3行そのまま貼ってください」と私に促してください(その方が正確になります)。
【ステップ2:コードを書く前に、理解を確認する】
情報がそろったら、コードを書く前に「やること」を日本語の箇条書きで要約してください。
私がサンプルを貼っていれば、その数行が "処理後にどうなるか" を表で見せてください。
そして「この理解で合っていますか?」と私に聞いてください。違っていたら直してください。
【ステップ3:OKが出てからコードを書く】
私が「OK」と言ってから、VBAコードを書いてください。コードには必ず:
・先頭に Option Explicit
・各行に日本語のコメント
・データを消す/上書きする処理があれば、先頭に「※実行前にブックのコピーを取ってください」
を入れてください。
【ステップ4:最後に安全チェックを一緒に】
コードができたら、私が確認できるように「①対象範囲は正しいか ②消す/上書きの操作が含まれていないか ③見慣れない命令はないか」の3点を一緒に点検してください。
------ ここから下に、あなたのやりたいことを一言で書いてください ------
(例:毎月の「1月」「2月」「3月」シートを「集計」に縦にまとめたい)
実例1:複数シートを1枚に統合する
「1月」「2月」「3月」に同じ列構成のデータがあり、「集計」シートに縦連結したい(見出しは1回だけ)ケースです。各月のシートは、たとえば次の形です。

AIには次のように頼みます。
Windows版Excelです。「1月」「2月」「3月」の3シートに、A〜D列(A:日付、B:商品、C:数量、D:金額)のデータがあり、各シートの1行目は見出しです。これらを新しい「集計」シートに縦に連結してください。見出しは1回だけにして、最終行・最終列は固定せず自動で取得し、Selectは使わずに書いてください。
返ってきたコードがこちらです。
Option Explicit
Sub シートを集計に統合する()
Dim names As Variant, sh As Worksheet, dst As Worksheet
Dim i As Long, lastRow As Long, lastCol As Long
Dim startRow As Long, writeRow As Long
names = Array("1月", "2月", "3月") ' 統合したいシート名(自分の名前に書き換える)
' 「集計」シートが無ければ作り、あれば中身を消してから入れ直す
On Error Resume Next
Set dst = Worksheets("集計")
On Error GoTo 0
If dst Is Nothing Then
Set dst = Worksheets.Add(After:=Worksheets(Worksheets.Count))
dst.Name = "集計"
Else
dst.Cells.Clear ' 既存の中身を消す(事前にバックアップ推奨)
End If
writeRow = 1
For i = LBound(names) To UBound(names)
Set sh = Worksheets(names(i))
lastRow = sh.Cells(sh.Rows.Count, 1).End(xlUp).Row ' 最終行を自動取得
lastCol = sh.Cells(1, sh.Columns.Count).End(xlToLeft).Column
startRow = IIf(i = LBound(names), 1, 2) ' 1枚目は見出し込み、2枚目以降は2行目から
If lastRow >= startRow Then
sh.Range(sh.Cells(startRow, 1), sh.Cells(lastRow, lastCol)).Copy dst.Cells(writeRow, 1)
writeRow = writeRow + (lastRow - startRow + 1)
End If
Next i
MsgBox "集計シートに統合しました。", vbInformation
End Sub
実行すると、「集計」シートに3シート分が縦に並び、見出しは先頭の1回だけになります。

📌 ポイント: シート名や列構成が違うときは、コードを直すより プロンプトの②を書き直して もう一度頼むのが簡単です。統合後に合計が合わないときは、数値が 文字列扱い(左寄せ・緑の三角)のことがあります → 数式が計算されない・=SUMがそのまま表示される。
実例2:条件に合う行に色を付ける
「一覧」シートで、A列「ステータス」が「未対応」の行を黄色く塗りたいケースです。AIには次のように頼みます。
Windows版Excelです。「一覧」シートのA列が「ステータス」で1行目は見出しです。A列が「未対応」の行のデータ範囲(A列〜最終列)を黄色の背景で塗ってください。条件付き書式ではなくVBAで塗り、実行のたびに前回の色が残らないよう最初に塗りつぶしを解除し、最終行は自動取得、Selectは使わないでください。
返ってきたコードがこちらです。
Option Explicit
Sub 未対応の行を黄色く塗る()
Dim ws As Worksheet
Dim lastRow As Long, lastCol As Long, i As Long
Set ws = Worksheets("一覧") ' 対象シート(自分の名前に書き換える)
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ' 最終行を自動取得
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
' いったん既存の塗りつぶしを解除(前回の色を残さない)
ws.Range(ws.Cells(2, 1), ws.Cells(lastRow, lastCol)).Interior.ColorIndex = xlNone
' 2行目から最終行まで判定し、A列が「未対応」ならその行を黄色で塗る
For i = 2 To lastRow
If ws.Cells(i, 1).Value = "未対応" Then
ws.Range(ws.Cells(i, 1), ws.Cells(i, lastCol)).Interior.Color = RGB(255, 255, 0)
End If
Next i
End Sub
実行すると、A列が「未対応」の行だけが黄色く塗られます。

RGB(255, 255, 0) は赤と緑を最大・青をゼロにした色で、黄色になります。
📌 ポイント: 同じ「色を付ける」でも 条件付き書式 で足りる場合があります。条件付き書式は条件が変われば色も自動で変わりますが、VBAで塗った色は 固定 され、
Ctrl + Zで戻せないことも多いので、最初は試し塗りで確認しましょう。
実例3:定型レポートの整形(列幅・見出し色・罫線)
生データのシートを、「列幅の自動調整 → 見出しを太字+背景色 → データ範囲に罫線」まで一気に整える例です。AIには次のように頼みます。
Windows版Excelです。「レポート」シートは1行目が見出し、2行目以降がデータで、行数・列数は毎回変わります。(1) 全列の幅を自動調整、(2) 見出し行を太字にして薄い青の背景色、(3) 見出しを含むデータ範囲に格子の罫線、をまとめて行うマクロにしてください。最終行・最終列は自動取得、Selectは使わないでください。
返ってきたコードがこちらです。
Option Explicit
Sub レポートを整形する()
Dim ws As Worksheet
Dim lastRow As Long, lastCol As Long
Dim dataRange As Range
Set ws = Worksheets("レポート") ' 対象シート
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ' 最終行を自動取得
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
ws.Columns.AutoFit ' (1) 全列の幅をデータに合わせて自動調整
' (2) 見出し行(1行目)を太字にして薄い青の背景色を付ける
With ws.Range(ws.Cells(1, 1), ws.Cells(1, lastCol))
.Font.Bold = True
.Interior.Color = RGB(221, 235, 247)
End With
' (3) 見出しを含むデータ範囲全体に格子の罫線を引く
Set dataRange = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol))
dataRange.Borders.LineStyle = xlContinuous ' 実線
dataRange.Borders.Weight = xlThin ' 細線
End Sub
dataRange.Borders のように罫線のまとまり全体に指定すると、外枠だけでなく内側の格子線も一度に引けます。
実例1〜3のどれにも Cells(Rows.Count, 1).End(xlUp).Row の最終行取得が出てきました。AIに頼むときも「最終行を自動で取得して」と一言添えると、A1:A100 のような固定行のべた書きを避けられ、データが増えても崩れないマクロになります。
AIが書いたコードを動かす手順
AIが書いたコードは、次の手順でExcelに取り込みます。
- Excelを開いた状態で
Alt + F11を押す → VBAエディタ(Visual Basic Editor)が開きます - 左のツリーで対象ブックを選び、メニュー 「挿入」→「標準モジュール」
- 開いた空のコードウィンドウに、コードを そのまま貼り付け
F5で実行(または [開発]タブ →「マクロ」→ 対象を選んで「実行」)- 動いたら 必ず
.xlsm(マクロ有効ブック)で保存。.xlsxで保存するとマクロは消えます
📌 ポイント: 貼り付け先は 「標準モジュール」が基本 です。「Sheet1」直下や「ThisWorkbook」に貼ると、意図と違う動きをしたり、マクロ一覧(
Alt + F8)に出てこなかったりします。
Mac版Excelも考え方は同じです。Option + F11 を押すか、[開発]タブの [Visual Basic] ボタンから VBAエディタを開けます。「[開発]タブが無い」「.xlsm で保存できない」「実行時に赤いエラーが出る」場合は、環境・設定側のことが多いので Excelマクロが動かない・エラーが出るとき で確認してください。
AIのコードを「そのまま信じない」3つの検証ポイント
本記事のいちばん大事なところです。AIのコードは 3点だけ目視で確認 すれば、VBAが書けなくても安全に使えます。
① 対象範囲が想定どおりか
固定の行番号(例 A1:A100)でべた書きされていないかを見ます。Cells(Rows.Count, 1).End(xlUp).Row のように 最終行を自動取得 していれば、データが増減しても範囲がズレません。
② 破壊的な操作が混じっていないか
Delete(削除)・Clear / ClearContents(消去)・RemoveDuplicates(重複削除)など、データを消す・上書きする キーワードが無いかを探します。あれば、本当にその範囲だけが対象かを確認します。
③ 実在しないメソッド・プロパティが無いか
AIは、もっともらしい 嘘の命令(存在しないメソッド等)を書くことがあります。これは実行すると途中で止まるので、コピーしたシートで一度試す だけで安全に見つけられます。
実務手順は次の3ステップです。
- 元のブックをコピー してから貼り付け・実行する
- 少量データ(10行程度)で先に試す
- 止まったら、エラーメッセージをそのままAIに返して直してもらう(対話で直す)
この3つは、いずれも VBAが書けなくてもできる ことです。安全に使える境目は「書けるか」ではなく「確認できるか」です。
安全に使うための注意
マクロを日常的に使うなら、次の3つを習慣にすると安心です。
- 元のブックを必ずコピーしてから実行。マクロでの変更は
Ctrl + Zで戻せないことが多い です - 出どころ不明のマクロは実行前にコードを読む。自分がAIに頼んだコードなら出どころはAI自身なので、前章の3点を目視確認すれば十分です
.xlsmで保存し、ファイル名でマクロ入りと分かるように しておく
⚠️ 注意: 業務用PCでは、そもそもマクロの実行が止められていることがあります。 セキュリティポリシーで無効化されている場合は、設定を勝手に変えず管理部門に確認してください。
うまく動かないときは
AIに作ってもらったマクロが動かないときは、症状で対処が分かれます。
- 実行できない/ボタンが無い/警告バーが出る → 環境・設定の問題。[開発]タブの表示やマクロの有効化を macro-not-working の記事 で確認
- 赤いエラーダイアログが出て止まる → コードか対象の問題。番号と日本語メッセージを読み、同記事 の「実行時エラー」を参照
- エラーは出ないのに結果が変 → 範囲ズレや文字列の数字が原因。同記事 の「結果がおかしい」を参照
AIならではのコツとして、赤いエラーダイアログが出たら、番号と日本語メッセージを丸ごとコピーしてそのままAIに貼り直す と、原因を踏まえた修正版が返ってきます。それでも解決しないときは、本サイトのAI案内人(Excel特化)に コードとエラーを丸ごと貼って 相談してください。前提を毎回書かずに切り分けられます。
よくある質問
Q. AIが書いたマクロを、そのまま実行して大丈夫ですか?
A. いったん止まって、検証3点(対象範囲・破壊的操作・実在しない命令)を目視確認し、元ブックをコピーしてから 試してください。最初から本番ファイルで動かすのは避けましょう。
Q. ChatGPT・Microsoft Copilot・本サイトのAI案内人、どれが一番いいですか?
A. 優劣ではなく 用途の違い です。本記事のプロンプトと検証手順はどれでも共通して使えます。Excel特有の前提を毎回書きたくなければExcel特化の本サイトのAI案内人が楽、という程度の違いです。
Q. AIが書いたコードが動かなかったら?
A. まずエラーメッセージをそのままAIに返して直してもらいます。それでも直らなければ Excelマクロが動かない・エラーが出るとき で症状別に切り分けてください。
Q. AIが「ExcelにCopilotボタンがある前提」で説明しますが、自分のExcelには無いです
A. Excelに組み込まれたCopilotは すべてのユーザーに提供されているわけではありません。手元に無くても異常ではなく、Web版Copilot(copilot.microsoft.com)やChatGPTで同じことができます。
Q. Macでも同じですか?
A. プロンプトの書き方・検証の考え方は共通で、VBAエディタもMacで使えます。ただしAIはWindows前提で答えがちなので、最初に「Mac版のExcel」と伝えるのが効果的です。
Q. AIに頼めば、もうVBAを学ばなくていいですか?
A. 目的次第です。動くマクロを手に入れる のが目的なら本記事の方法で十分です。自分で書けるようになりたい なら、体系的に学べる書籍やスクールが向きます。
まとめ:AIにマクロを作ってもらう全体フロー
全体の流れは次のとおりです。
最後に、3つの型を1枚にまとめます。あとから戻って確認するときに使ってください。
| 型 | 中身 |
|---|---|
| プロンプト3要素 | ① 何を ② どのデータが・どこに ③ 結果はどうなってほしい |
| 検証3点 | ① 範囲は自動取得か ② 破壊的操作は無いか ③ 実在しない命令は無いか |
| 安全3点 | ① 元ブックをコピー ② 出どころ・中身を確認 ③ .xlsm で保存 |
AIは「何でも自動化してくれる魔法のマシン」ではありません。ですが 頼み方の型 と 確認の型 さえ持てば、VBAが書けなくても実用的なマクロを手に入れられます。まずは小さな1つから試してみてください。
体系的に学びたい人へ
PRAIに頼むだけでなく、マクロを体系的に身につけたい人へ。累計50万部・ChatGPTやCopilot活用にも対応した最新版です。
たった1秒で仕事が片づく Excel自動化の教科書【改訂第3版】※ 当サイトはアフィリエイトプログラムを利用しており、上記リンク経由の購入で運営者が報酬を得ることがあります。
関連記事
- Excelのオートフィルで連番にならない・同じ数字がコピーされるときの直し方
- 日付が数字(45678など)になる・直らないときの2つの原因と直し方
- ピボットテーブルが思いどおりに集計できない【合計・個数・比率・更新を症状別に】
- Excelマクロ(VBA)が動かない・エラーが出るときの原因切り分け【症状別】
- 数式が計算されない・=SUMがそのまま表示される【3つの原因で切り分け】
- 絶対参照と相対参照の使い分け【$ と F4 キーで数式コピーがズレない】
- COUNTIF / COUNTIFS が動かない6つの原因と解決法【上から順に試せばOK】
- Excelショートカット厳選20選【明日から作業が倍速になる】
- IF関数の入れ子から卒業する5つの方法【パターン別に使い分け】
- INDEX+MATCH で VLOOKUP の弱点を克服する4つの場面【コピペで使える】
- SUMIF / SUMIFS が動かない6つの原因と解決法【上から順に試せばOK】
- IFERROR の使い方と落とし穴【エラーを隠す前に読む完全ガイド】
- Excelの主要エラー6種【症状→原因→解決の早見表】
- VLOOKUPで#N/Aが出る5つの原因と解決法【上から順に試せばOK】