【ChatGPTxExcelマクロ・VBA】実験!Chat GPTでVBAのコードを生成!|事例:異なるファイル間でのデータマッチング(照合・突合)


いつもありがとうございます!
皆さん、こんにちは。ご覧いただきありがとうございます。
“日々の業務にちょうどいい自動化を”──
業務改善アプリケーションの作成を行っている「ソフトデザイン工房」 です。
この記事では、「Chat GPTでVBAコードを生成」してみた結果をお届けいたします。
具体的には、異なるExcelファイル間でデータマッチング(照合・突合)するマクロを生成し、実際に動作させてみた結果です。
結論
すばらしい!!!
初めてVBAに触れる方も、すでに実務で活用されている方も、新たな学びが得られる内容になっていますので、ぜひ最後までお付き合いください。
この記事が、あなたのVBAマクロの価値をさらに高める一助となれば幸いです。
VBAを活用して、自分自身や身近なコミュニティに合ったアプリケーションを作成し、仕事量は半分に、成果は2倍に──そんな未来を目指すあなたを応援しています。
【Chat GPTでVBAコード生成】異なるファイル間でのデータマッチング(照合・突合)

シナリオ
以下のようなファイル構成です。
program/
├── ファイルA.xlsx
├── ファイルB.xlsx
└── データを照合する.xlsm
データを照合する.xlsmがVBAコードを記述するファイルです。このデータを照合する.xlsmが、ファイルA.xlsx と ファイルB.xlsxを見に行き、データを照合します。
ファイルA.xlsx と ファイルB.xlsxのシートの中身は以下のようになっています。


ファイルA.xlsx と ファイルB.xlsxの各セルのデータをひとつずつ順番に見ていき、ファイルAに存在しているデータがファイルBにも存在していれば「マッチ」とします。
コードの生成
ChatGPTにプロンプトを入力し、上述のシナリオを実現するVBAコードを生成します。ChatGPT のモデルは「ChatGPT 4o」使用しました。
入力したプロンプトは次の通りです。
次の条件にしたがって、VBAコードを生成してください。指示を注意深く読み、間違えないようにしてください。
# 条件
## ファイル構成
ファイルA.xlsxとファイルB.xlsxが、ThisWorkbookと同じフォルダにある。
## 処理の内容
ファイルAとファイルBのWorksheets(1)の列1のセルをひとつずつ総当たりで比較する。
両ファイルの列の最終行は動的に取得し、1行目から最終行までのセルを比較する。
両ファイルのデータが一致していればマッチとする。
## 結果の出力
両ファイルの一致したデータのテキストを赤色にし、ファイルA_照合後.xlsx、ファイルB_照合後.xlsxとして出力する。
## エラーハンドリング
ファイルA、ファイルBが見つからなかった場合は、エラーメッセージを表示し、処理を中断する。
## 後処理
- ファイルA.xlsxとファイルB.xlsxは、保存しないで閉じる。
- 処理が完了したメッセージを表示する。「処理が完了しました。」
## コーディングスタイル
- Sub名、変数名は英語を使用。
- コメントは日本語で記述。
- Sub名はパスカルケースを使用。
- 変数名はスネークケースを使用。
- 変数名は単なる「i」等の記号ではなく、可読性の良い名前にする。
- 変数宣言はプロシージャーの先頭にまとめる。
- 各コードセクションのはじまりに、処理の内容を簡潔に表すコメントを記入する。
- 各変数宣言の右端に、変数の説明を簡潔に記入する。
- 各コメントの開始位置はインデントを使って揃える。
## 桁数のルール(必ず守る)
- 1行の桁数は80桁以内にする。80桁を超える場合は改行する。(必ず守る)
## 行間ルール(必ず守る)
- Subの直下に2行空ける。(必ず守る)
例:
Sub "Sub名"
[空行1]
[空行2]
次のコード
- End Subの直前に2行空ける。
例:
[空行1]
[空行2]
End Sub
- 各コードセクション(処理のまとまり)間は2行あける。
例:
コード
[行間1]
[行間1]
コード
## 主要な変数名の指定
- ワークブック:wba(b)
- ワークシート:wba(b)_ws* ※*はワークシート番号
- ファイルパス:fpa(b)
- イテレーション変数:row_idx_a(b)
- 最終行:last_row_a(b)
## プロシージャー先頭のコメント
プロシージャーの先頭には、次のコメントを記入する。
```vba
' Contents プロシージャーの全体像を簡潔に書く
' Version 1.0.0
' Last Update 今日の日付(yyyy/mm/dd)
' Since 今日の日付(yyyy/mm/dd)
```生成されたコードは次の通りです。一部、行間の指示と、一行の桁数(文字数)を間違えて生成しているところがありますが、ほとんど完璧と言って良いでしょう。
Sub CompareAndHighlight()
' Contents ファイルAとファイルBの列1を総当たりで比較し、一致データを
' 赤色に変更して新しいファイルに保存する
' Version 1.0.0
' Last Update 2024/12/07
' Since 2024/12/07
Dim fpa As String ' ファイルAのパス
Dim fpb As String ' ファイルBのパス
Dim wba As Workbook ' ファイルAのワークブック
Dim wbb As Workbook ' ファイルBのワークブック
Dim wba_ws1 As Worksheet ' ファイルAのワークシート(1)
Dim wbb_ws1 As Worksheet ' ファイルBのワークシート(1)
Dim last_row_a As Long ' ファイルAの最終行
Dim last_row_b As Long ' ファイルBの最終行
Dim row_idx_a As Long ' ファイルAのループ用インデックス
Dim row_idx_b As Long ' ファイルBのループ用インデックス
' ファイルのパスを取得
fpa = ThisWorkbook.Path & "\ファイルA.xlsx"
fpb = ThisWorkbook.Path & "\ファイルB.xlsx"
' ファイルの存在確認
If Dir(fpa) = "" Then
MsgBox "ファイルAが見つかりません。処理を中断します。", vbExclamation
Exit Sub
End If
If Dir(fpb) = "" Then
MsgBox "ファイルBが見つかりません。処理を中断します。", vbExclamation
Exit Sub
End If
' ファイルを開く
Set wba = Workbooks.Open(fpa)
Set wbb = Workbooks.Open(fpb)
' ワークシートを取得
Set wba_ws1 = wba.Worksheets(1)
Set wbb_ws1 = wbb.Worksheets(1)
' 最終行を取得
last_row_a = wba_ws1.Cells(wba_ws1.Rows.Count, 1).End(xlUp).Row
last_row_b = wbb_ws1.Cells(wbb_ws1.Rows.Count, 1).End(xlUp).Row
' 総当たりでデータを比較
For row_idx_a = 1 To last_row_a
For row_idx_b = 1 To last_row_b
If wba_ws1.Cells(row_idx_a, 1).Value = wbb_ws1.Cells(row_idx_b, 1).Value Then
wba_ws1.Cells(row_idx_a, 1).Font.Color = vbRed
wbb_ws1.Cells(row_idx_b, 1).Font.Color = vbRed
End If
Next row_idx_b
Next row_idx_a
' 新しいファイルとして保存
wba.SaveAs ThisWorkbook.Path & "\ファイルA_照合後.xlsx"
wbb.SaveAs ThisWorkbook.Path & "\ファイルB_照合後.xlsx"
' ファイルを閉じる
wba.Close SaveChanges:=False
wbb.Close SaveChanges:=False
' 処理完了メッセージ
MsgBox "処理が完了しました。", vbInformation
End Sub実行結果は次の通りです。






コードは正常に動作しました。素晴らしい結果です。もう気力を振り絞って手作業でコードを記述していく時代ではないなと、改めて感じました。
なお、今回は一度で完成形のコードを生成させるため、プロンプトの内容が多めになりましたが、少しずつ対話を重ねながら逐次的に生成していく方法でも良いです。実際のコード作成の現場では、そのような使い方の方が多いと思います。

以上で、解説は終了です。ありがとうございました。
VBAスキルアップの参考情報
近年は、ChatGPTをはじめとするAIの登場によって、学習のスタイルが大きく変わりました。
分からないことがあれば、AIに尋ねれば答えがすぐに見つかる時代です。
とはいえ、AIを使いこなすには、自分自身の基本的な知識や理解力が欠かせません。
全体像をつかむためには、やはり書籍などで体系的に学んでおくことが今でも有効です。
そのうえでAIを活用すれば、自分の理解度に合わせた的確な解説や、応用のヒントを得ることができます。
「学んで基礎を築く → AIで補い発展させる」──このサイクルを重ねることで、VBAスキルは着実に高まっていくでしょう。
VBAのスキルアップ
VBAを学び始めるなら
入門書は、どれを選んでも大きな差はないように感じます。
どれを選ぶかに悩むことに時間をかけるよりも、まずは手頃な一冊を手に取って進めてみるのがおすすめです。
もし迷ったときには、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。
基礎を超えて力をつけたいなら
私は上級者を目指していましたので、入門書にとどまらず、このような内容の濃い一冊を選んで学んでいました。
今は誰でもAIを活用できる時代になりましたが、上級者を目指す方にとっては、AIをより上手に活用するという意味でも、こうした本は今なお価値があります。
このレベルの本を一冊持っておくことに、損はないでしょう。
資格で能力を証明したいなら
VBAのプログラミング能力を客観的に示したい場合には「VBAエキスパート試験」があります。
特に「スタンダード」の方は上級者向けです。
あなたが社内業務の改善を行う立場であっても、VBAで作成したシステムをお客様に納める立場であっても、この資格は信頼や安心につながるでしょう。
以下の公式テキストが販売されています。
プログラミングの一般教養
「独学プログラマー」というプログラミングの魅力を解説した書籍があります。
これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。
今はAIにコードを尋ねれば、答えが返ってくる時代です。
しかし、この本からは「コード」以上に、プログラミングに向き合う姿勢や考え方を学ぶことができるでしょう。
こちらの記事でも紹介しています。もしよろしければご覧ください。
【初心者歓迎】無料相談受付中

いつもありがとうございます!
限られた時間をより良く使い、日本の生産性を高めたい──
みんなの実用学を運営するソフトデザイン工房では、業務整理や業務改善アプリケーション作成のご相談を承っております。
お気軽にご相談ください。
こちらの記事でも紹介しております。
おわりに


ご覧いただきありがとうございました!
本稿では、「をChat GPTでVBAコードを生成」してみた結果をお届けいたしました。
お問い合わせやご要望等ございましたら、「お問い合わせ/ご要望」またはコメントにて、ご連絡いただければ幸いでございます。
皆様の人生がより一層素晴らしいものになるよう、少しでもお役に立てれば幸いでございます。
なお、当サイトでは様々な情報を発信しsております。もしよろしければ、トップページもご確認いただけると幸いでございます。




