公開日:2026年10月13日

エクセルのマクロは、VBAを覚えていなくても、生成AIに作業内容を伝えればコードの下書きを作ってもらえます。
ただし、最初に頼むべきなのはマクロとは限りません。毎回の計算なら関数、毎回の操作手順ならマクロ、と分けてから依頼します。
この記事は、売上表や台帳の作業をExcelで続けている事務・経理・営業事務の担当者や、その業務の責任者に向けた記事です。
関数とマクロの選び方、そのまま貼り付けて使える依頼文、返ってきた式やコードで最初に確かめる箇所、壊さずに試す手順を順に説明します。
記事内の売上表・得意先・金額は架空の設計例です。関数の答えは手計算で検算した値を載せています。生成AIの実際の回答や、マクロを実行した結果ではありません。
計算をくり返しているなら関数、操作の手順をくり返しているならマクロを頼みます。判断の基準は、毎月の作業が「計算」なのか「操作」なのかです。
得意先コードから得意先名を引く、月ごとの合計を出す、条件に合う件数を数える、といった作業は関数で済みます。
関数はセルに式が見えるため、あとから別の担当者が開いても、何を計算しているか追いかけられます。
データを入れ替えれば自動で再計算され、実行ボタンを押し忘れて古い数字が残ることもありません。
関数で書ける作業をマクロにすると、中身を読める人も、直せる人も限られます。
マクロは、シートの追加、行の並べ替え、別シートへの転記、ファイル名を付けた保存など、画面上の操作を自動で行う仕組みです。
中身はVBA(Excelに付属するプログラミング言語)で書かれています。
例えば、毎月の明細を得意先ごとのシートに分けて、それぞれ印刷用に整える作業は、関数だけでは完結しません。
こうした手順が毎月同じなら、マクロにすると手作業の回数を減らせます。
| やりたいこと | 先に検討する手段 | 理由 |
|---|---|---|
| コードから名前や単価を引く | 関数 | 式がセルに見え、データを替えると自動で再計算される |
| 得意先別・月別に合計する | 関数 | 条件付きの合計は関数で書ける |
| 得意先ごとにシートを分けて整える | マクロ | シートの追加や書式の設定は操作なので、関数ではできない |
| 複数人が同時に入力し、承認や通知も必要 | 専用の仕組み | 1つのファイルに入れたマクロでは、同時編集や権限の管理を扱いにくい |
迷ったときは、生成AIに「関数で書けるならそちらを優先して」と一言添えると、不要なマクロを避けやすくなります。

生成AIは、渡された条件の範囲でしか正しい式やコードを書けません。条件が抜けていると、見た目は正しそうでも、自社のファイルでは動かない答えが返ってきます。
同じExcelでも、版によって使える関数が同じではありません。
例えば、表から値を探すXLOOKUP関数は、Microsoftの公式ヘルプで「Excel 2016 および Excel 2019 では使用できません」と案内されています。
社内にExcel 2019のパソコンが残っているなら、依頼文に版を書かないと、開いた人の画面だけ式がエラーになります。
マクロでも、ファイルの保存先の書き方などがWindowsとMacで違う場合もあるでしょう。使うパソコンのOSも依頼文に入れておきます。
シート名と、どの列に何が入っているかを、そのまま書き写して渡します。
見本の行は、本物の得意先名や金額ではなく、形だけ同じ架空の3〜5行にします。
顧客名や取引額を外部のサービスへ入力する前に、社内で利用を認めたAIか、入力してよい情報かを確認してください。式やコードを作るだけなら、本物のデータは要りません。
関数なら答えを出すセル、マクロなら結果を書き出すシートを決めて伝えます。
あわせて「元の明細シートは変更しない」と書いておくと、元データを上書きするコードを避けやすくなります。
マスタに無い得意先コード、空欄の数量、翌月の日付が混ざった行など、毎月起きそうな例外を挙げておきます。
例外の扱いを指定しないと、エラーが出るか、気づかないうちに合計から漏れるか、どちらかになりがちです。
| 依頼文に書くこと | 書き方の例 | 抜けたときに起きやすいこと |
|---|---|---|
| Excelの版とOS | Microsoft 365のExcel、Windows。社内にExcel 2019も残っている | 一部のパソコンで使えない関数が返ってくる |
| シート名と列 | 「明細」シートのA列が日付、B列が得意先コード | 別の列を参照する式になる |
| 結果を書く場所 | 「集計」シートのB4から下 | 既存の表に上書きされる |
| 例外の扱い | マスタに無いコードは「未登録」と表示 | エラー表示になる、または合計から黙って漏れる |
ここでは、架空の売上明細から、得意先名の表示と、9月分の得意先別合計を出す例で説明します。
「明細」シートには、A列に日付、B列に得意先コード、D列に数量、E列に単価、F列に金額(数量×単価)が入っています。
「得意先」シートには、A列に得意先コード、B列に得意先名があります。登録されているのはC001とC002の2件だけです。
日付はExcelの日付として入力し、数量・単価・金額は数値にします。見た目が日付や金額でも文字列になっていると、合計から漏れる場合があります。
得意先コードは文字列としてそろえ、明細・得意先・集計の各シートで前後の空白や表記の違いがないか確認してください。
| 日付 | 得意先コード | 数量×単価 | 金額 |
|---|---|---|---|
| 9月1日 | C001 | 3×1,200 | 3,600 |
| 9月15日 | C002 | 1×5,000 | 5,000 |
| 9月30日 | C001 | 2×800 | 1,600 |
| 10月1日 | C001 | 5×1,200 | 6,000 |
| 9月20日 | C009 | 1×1,200 | 1,200 |
10月1日の行と、マスタに無いC009の行は、わざと混ぜた例外です。
ChatGPTやGemini、Copilotなど、社内で利用を認めている生成AIに、次の文を貼り付けます。シート名や列は、自社の表に合わせて書き換えてください。
Excelの関数を作ってください。マクロ(VBA)は使わず、関数だけで書いてください。
【環境】
Microsoft 365のExcel、Windowsです。
社内にExcel 2019のパソコンもあるため、Excel 2019でも動く式を別に1つ示してください。
【表の形】
「明細」シート:1行目は見出し。A列=日付、B列=得意先コード、F列=金額。2行目から下にデータが続きます。
「得意先」シート:1行目は見出し。A列=得意先コード、B列=得意先名。
「集計」シート:B1セルに対象月の1日(例:2026/9/1)が入っています。A4から下に得意先コードが並んでいます。
日付とB1はExcelの日付値、F列の金額は数値です。得意先コードは文字列で、各シートで表記をそろえています。
【作ってほしい式】
1. 「明細」シートのG2に入れる式:B列の得意先コードから得意先名を表示する。
得意先シートに無いコードは「未登録」と表示する。
2. 「集計」シートのB4に入れる式:A4の得意先について、B1の月に含まれる日付の金額を合計する。
翌月1日の行は含めない。
3. 「集計」シートのB2に入れる式:得意先を問わず、B1の月に含まれる日付の金額をすべて合計する。
得意先別の合計を足した値と見比べ、集計表に無い得意先の漏れを見つけるために使います。
【回答の形】
・式と、どのセルに入れて下へコピーするかを書く
・式の各部分が何をしているかを1行ずつ説明する
・わからない条件があれば、式を書く前に質問する
最後の「質問する」の一文は、条件の抜けをAIに指摘させるために入れています。質問が返ってきたら、答えてから式を作ってもらいます。
以下は、上の依頼文で求めている形を弊社が書いた見本です。生成AIの回答そのものではありません。
明細!G2(Microsoft 365・Excel 2021以降)
=XLOOKUP(B2,得意先!A:A,得意先!B:B,"未登録")
明細!G2(Excel 2019でも使える形)
=IFERROR(INDEX(得意先!B:B,MATCH(B2,得意先!A:A,0)),"未登録")
集計!B4
=SUMIFS(明細!F:F,明細!B:B,A4,明細!A:A,">="&$B$1,明細!A:A,"<"&EDATE($B$1,1))
集計!B2(その月の明細の総額)
=SUMIFS(明細!F:F,明細!A:A,">="&$B$1,明細!A:A,"<"&EDATE($B$1,1))
SUMIFSの日付条件は「B1の日付以上」かつ「1か月後の日付より前」です。月末日を手で入れる書き方より、31日や30日の違いを気にせずに済みます。
式を本番の表に入れる前に、上の架空5行で、手で計算した答えと一致するか確かめます。
| 得意先コード | 9月の合計(手計算) | 確かめること |
|---|---|---|
| C001 | 3,600+1,600=5,200 | 10月1日の6,000が入っていないか |
| C002 | 5,000 | 1件だけの得意先も正しく出るか |
| C009 | 1,200 | 集計表のA列にC009を並べたときだけ出る |
| 9月の総額(B2) | 5,200+5,000+1,200=11,400 | 得意先別の合計を足した値と一致するか |
C001が11,200になっていたら、翌月の行まで合計しています。日付の条件を見直してください。
注意したいのはC009です。得意先別の式は、集計表のA列に並べたコードしか合計しません。得意先マスタからC001とC002だけを写して並べると、C009の1,200は集計表のどこにも出てきません。
この見本では、得意先別の合計を足した値が、B2の総額11,400と一致するかを確かめます。実際の表でも、その月の総額と比べてください。差があれば、集計表に無い得意先、重複したコード、日付や金額の入力形式、式の参照範囲を確認します。
次は、関数ではできない操作の例として、明細を得意先ごとのシートに分ける作業をマクロにします。
Excelのマクロ(VBA)を作ってください。
【環境】
Microsoft 365のExcel、Windowsです。VBAの知識はほとんどありません。
【表の形】
「明細」シート:1行目は見出し。A列=日付、B列=得意先コード、C列=商品コード、D列=数量、E列=単価、F列=金額。
データの行数は毎月変わります(多い月で数百行)。
【やりたいこと】
「明細」シートの行を、B列の得意先コードごとに新しいシートへ写してください。
シート名は得意先コードにし、各シートの1行目に「明細」と同じ見出しを入れてください。
【守ってほしいこと】
・「明細」シートの内容は、削除・並べ替え・書き換えをしない
・同じ名前のシートがすでにある場合は、上書きせずに処理を止め、メッセージで知らせる
(毎月、その月の明細だけを入れた新しいファイルで実行します)
・B列が空欄の行は写さず、最後に件数をメッセージで知らせる
・ファイルの保存、別ファイルの削除はしない
・処理の最後に、写した行の合計件数と「明細」シートのデータ件数を並べて表示する
・各元行がどのシートへ写ったか、元の行番号を結果に残す
【回答の形】
・コードの各まとまりに、日本語で何をしているかのコメントを入れる
・コードを貼り付ける場所と、実行の手順を書く
・わからない条件があれば、コードを書く前に質問する
「守ってほしいこと」が、この依頼文の要です。何をしてほしいかより、何をしてはいけないかを書いたほうが、元データを壊す事故を防げます。
最後の件数表示は、写し漏れを点検する手掛かりです。「明細」の件数から空欄の件数を引いた数と、写した件数を比べます。ただし、抜けた行と重複した行が同じ数なら件数は合うため、件数だけで判断しません。
元の行番号を使って、各行が正しい得意先のシートへ1回だけ写っていることを確認します。日付・商品コード・数量・単価・金額も元の行と照合し、得意先別と全体の金額が一致するか確かめてください。
次の語の検索は、削除や保存などの処理を見つける最初の点検です。VBAの画面では、Ctrl+Fで検索できます。
この語が見つからなくても、安全だとは判断できません。別の命令で他のファイルを操作したり、外部と通信したりするコードもあるためです。
| 検索する語 | 何をする命令か | 見つかったときの確認 |
|---|---|---|
| Delete | 行・シート・セルを削除する | 消しているのが「明細」シートではないか |
| Clear | セルの中身や書式を消す | 消す範囲が新しく作ったシートだけか |
| Save、Kill | ファイルを保存する、削除する | 依頼文で禁止したのに入っていないか |
| Sort | 行を並べ替える | 並べ替えているのが「明細」シートではないか |
| DisplayAlerts | 削除などの確認画面を出さなくする | 確認なしで何かを消していないか |
| On Error Resume Next | エラーが起きても止めずに次へ進む | 失敗した処理を見逃す書き方になっていないか、AIに理由を聞く |
| A1:F500 のような固定の範囲 | 決まった行数だけを処理する | 行数が増えた月に、後ろの行が漏れないか |
意味が分からない行があれば、その行をコピーして「この1行は何をしていますか。元のシートを変更しますか」と生成AIに聞き返します。
AIの説明だけでは、コードが説明どおりに動くとは確認できません。中身を判断できない部分があれば、VBAを確認できる担当者へ相談し、確認が済むまでは実行しないでください。試験用のコピーでも、他のファイルを変更するコードの影響は防げません。
生成AIが書いたコードは、動くかどうかを実際に試すまで分かりません。試すときは、元のファイルに影響が出ない順番で進めます。
まず、本番のファイルをコピーして、試験用のファイルを作ります。マクロが行った変更は、Excelの「元に戻す」で取り消せないことがあるためです。
次に、試験用のファイルを「Excel マクロ有効ブック(.xlsm)」の形式で保存します。通常の.xlsxのまま保存すると、マクロは保存されません。
3つ目に、開発タブの「Visual Basic」からコードを書く画面を開き、「挿入」→「標準モジュール」を選んでコードを貼り付けます。Windowsでは、Alt+F11でもこの画面が開きます。
開発タブが見当たらない場合は、「ファイル」→「オプション」→「リボンのユーザー設定」から表示させてください。
4つ目に、試験用のファイルの「明細」シートを、答えが分かっている数行だけに減らして実行します。開発タブの「マクロ」から名前を選び、「実行」を押してください。件数に加え、各元行が正しい得意先のシートへ1回だけ写り、日付や金額などの値が一致するか確かめます。
最後に、本番と同じ行数の明細を入れた別のコピーで実行して、処理の時間と結果を見ます。
保存した.xlsmを開き直すと、マクロが無効になっている旨の黄色い表示が出る場合があります。「コンテンツの有効化」は、社内ルールで実行が認められ、コードの内容を確認できた場合に限ります。
自分で保存したファイルでも、AIが書いたコードの安全性は別に確認してください。判断できなければ、情報システムの担当者などに確認します。
本番で使う前に、小さな表と本番と同じ行数のコピーの両方で、件数、各行の対応、主要セルの値、得意先別と全体の金額を確認します。明細シートが変更されていないことも確かめてください。
考えられる原因の一つは、Officeの安全対策です。ファイルを開くと「セキュリティ リスク」の表示が出て、マクロが止められます。
Microsoftの管理者向けの説明では、インターネットやメールの添付ファイルから入手したファイルのマクロを、既定でブロックすると案内されています。同じ説明によれば、この変更の対象はWindowsのOfficeで、MacのOfficeには影響しません。
同じ説明には、ファイルのプロパティからブロックを解除する方法も載っています。ただし、マクロは悪意のあるプログラムの入口にも使われるものです。
差出人と中身を確かめられないファイルは、解除せずに送り主へ確認します。社内で共有するマクロの置き場所や配り方は、情報システムの担当者と決めておくと安全です。
マクロを実行してエラーが出たら、「動きません」とだけ伝えても、AIは原因を推測するしかありません。
次の3つを、そのまま貼り付けて聞き返します。
先ほどのマクロを実行したところ、エラーが出ました。原因と修正したコードを教えてください。
【エラーの表示】
(表示されたメッセージの番号と文章をそのまま貼り付ける)
【止まった行】
(デバッグを押したときに黄色く表示された行をそのまま貼り付ける)
【実行したときの状態】
(例:「明細」シートは320行。同じ名前のシートはまだ無い。B列に空欄が2行ある)
修正版のコードが返ってきたら、変更された処理を確認したうえで、試験用のファイルで件数、各行の対応、主要セルの値、得意先別と全体の金額を確かめ直します。

作ったときの依頼文、検算に使った表、変更の記録を、マクロと一緒に残します。表の形が変わったとき、直せる人がいなくて困る事態を防ぐためです。
生成AIで作ったマクロは、作った本人もVBAを読めないかもしれません。担当者が異動すると、誰も直せないファイルが残ってしまいます。
次の3つを、マクロと一緒に保存しておくと、後任が同じ方法でAIに修正を頼めます。
| 残すもの | 理由 |
|---|---|
| 作ったときの依頼文 | 表の形が変わったら、依頼文の該当箇所だけ直して作り直せる |
| 検算に使った小さな表と答え | 修正後に同じ答えが出るか、すぐ確かめられる |
| いつ、誰が、何を変えたかの記録 | 結果がおかしくなったとき、どの変更が原因か追える |
業務の引き継ぎ全体の書き方は、引き継ぎ書の書き方とExcelテンプレートでも説明しています。
次のような状態になったら、ファイルに入れたマクロを直し続けるより、仕組みそのものを見直す時期です。
例えば、複数の担当者が同じファイルを同時に更新する、承認や通知が必要になる、会計ソフトや販売管理の画面へ手で写し替える作業が残っている、といった状態です。
転記の手間とミスを減らす考え方は、転記ミスを減らすAI活用にまとめています。
共有シートから専用の仕組みへ移る例として、弊社が自社用に開発した管理ツールの開発実例を紹介しています。顧客の導入実績ではなく、弊社自身の業務で使う仕組みの例です。
シートのまま続けるか、仕組みを作るかは、困りごとが表の中だけで閉じているかどうかで判断できます。
エクセルのマクロや関数を生成AIで作るとき、どのAIを使う場合も、Excelの版・シート名と列・例外の扱いが抜けていると、自社のファイルでは動かない答えが返ってきます。
最初の一歩は、毎月くり返している作業を1つ選び、答えが分かっている5行ほどの架空の表を作ることです。
その表と依頼文を生成AIに渡し、返ってきた式やコードを試験用のファイルで検算します。関数で済むものは関数にし、マクロは削除・保存の命令を確かめてから使います。
ファイルが部署をまたいで使われるようになったら、同時編集・承認・他のシステムとの連携まで含めて、仕組みの作り方を見直してください。どの業務から手を付けるか迷う場合は、中小企業のAI導入の進め方も参考になります。
よくある質問
Q. VBAを全く知らなくても、生成AIでマクロを作れますか?
A. コードの下書きは作ってもらえます。
ただし、命令の検索だけでは安全性は確認できません。
中身を判断できなければVBAを確認できる担当者へ相談してください。
確認後に試験用のファイルで、件数、各元行が正しいシートへ1回だけ写ること、主要セルの値、得意先別と全体の金額を確認してから使います。
Q. ChatGPT、Gemini、Copilotのどれを使えばよいですか?
A. 社内で利用を認めている生成AIから始めてください。
どのサービスでも、Excelの版、シート名と列、例外の扱いが抜けていると、自社のファイルでは動かない答えが返ってきます。
Microsoft 365のCopilotは、Excelの画面内で数式の提案や説明を受けられる機能が公式ヘルプで案内されていますが、使えるかどうかは契約によって異なります。
Q. AIが作った関数がエラーになるのはなぜですか?
A. 考えられる原因は、使っているExcelの版に無い関数が返ってきた場合と、シート名や列の指定が実際の表と違う場合です。
例えばXLOOKUP関数は、Excel 2016と2019では使えません。
依頼文に版を書き、古い版でも動く式を別に求めてください。
Q. マクロを作った後、ファイルはどの形式で保存しますか?
A. Excel マクロ有効ブック(.xlsm)で保存します。
通常のブック(.xlsx)で保存すると、マクロは保存されません。
本番のファイルを上書きする前に、コピーした試験用のファイルで動作を確かめてください。
Q. 本物の顧客データを生成AIに貼り付けてもよいですか?
A. 式やコードを作るだけなら、本物のデータは必要ありません。
形だけ同じ架空の数行で依頼できます。
実データを入力する場合は、社内のルールと、利用するサービスのデータの扱いを先に確認してください。
Q. マクロではなく、システムを作ったほうがよいのはどんなときですか?
A. 複数の担当者が同じファイルを同時に更新する、承認や通知が必要になる、他のソフトへの手作業の転記が残る、といった状態が目安です。
1つのファイルに入れたマクロでは、同時編集や権限の管理を扱いにくくなります。
困りごとが表の中だけで閉じているなら、関数とマクロで続ける選択も十分にあります。

編集・検証について
Excelの作業を生成AIで自動化する際の、依頼文の書き方と、式・コードを安全に確かめる手順を説明しています。