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



いつもありがとうございます!
ノンプログラマー向けの「ChatGPTxExcelマクロ・VBA解説シリーズ」へようこそ!
本稿では、「Chat GPTでVBAコードを生成」してみた結果をお届けいたします。
具体的には、異なるExcelファイル間でデータマッチング(照合・突合)するマクロを生成し、実際に動作させてみた結果です。
結論
すばらしい!!!
Excelマクロ・VBAは初心者には少し敷居が高いと感じられるかもしれませんが、最近ではAIの力を借りることで、スムーズに作業を進められるようになってきています。初めて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
実行結果は次の通りです。






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

以上で、解説は終了です。ありがとうございました。
関連記事
本稿と関連の深い記事です。もしよろしければ、合わせてご活用ください。
- 【簡単エクセル/Excel VBA マクロ】解説シリーズ目次 | みんなの実用学(jitsuyogaku.com)
- 【簡単エクセル/Excel VBA マクロ】Excel VBA マクロの全体像 | みんなの実用学 (jitsuyogaku.com)
VBAプログラミングスキルアップのための参考情報
ここでは参考図書を紹介いたしますが、これらに限らず自分に合うものを選ぶことが重要だと考えております。皆様の、より一層のご成功を心よりお祈りしております。
VBAプログラミングのスキルアップ
学習用としてもハンドブックとしても役立つ便利な書籍がこちらです。価格はやや高めですが、その内容は非常に充実しています。相応のスキルを身に付けるためには、こうしたしっかりとした書籍を一冊持っておくと良いでしょう。
入門書に関しては、どの書籍も大きな違いはありません。あまり迷うことに時間をかけるよりは、手頃なものを一冊選んでみると良いでしょう。VBAの入門書は数多く出版されていますので、興味がある方はぜひチェックしてみてください。
甲乙つけがたい場合、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。
\チェックしてみよう/
\チェックしてみよう/
\チェックしてみよう/
VBAのプログラミング能力を客観的に証明したい場合には「VBAエキスパート試験」があります。この試験はVBAの知識を公式に認定するものです。VBAの総合的な能力獲得を目指す方に適しています。以下の公式テキストが販売されております。
プログラミングの一般教養
「独学プログラマー」というプログラミングの魅力を解説した書籍があります。これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。
こちらの記事でも紹介しております。もしよろしければご覧ください。

おわりに


ご覧いただきありがとうございました!
本稿では、「をChat GPTでVBAコードを生成」してみた結果をお届けいたしました。
お問い合わせやご要望等ございましたら、「お問い合わせ/ご要望」またはコメントにて、ご連絡いただければ幸いでございます。
皆様の人生がより一層素晴らしいものになるよう、少しでもお役に立てれば幸いでございます。
なお、当サイトでは様々な情報を発信しsております。もしよろしければ、トップページもご確認いただけると幸いでございます。
この記事を書いた人
- ■人生を追求する凡人■日本一安全で、気の向くままに自分の時間を過ごせる、こだわりのキャンプ場を作るのが夢■光学・機械系エンジニア(歴20年、内マネジメント10年、特許数件権利化)/副業フリーランスエンジニア■読書・文学愛好■人生は時間そのもの。ひとりでも多くの人が「より良い人生にするために時間を使って欲しい」と願い、仕事のスキルの向上、余暇の充実、資産形成を研究。■VBAアプリ開発サービス提供中(業務委託 / VBA使用経験20年)■Python愛好(歴5年)■VBAエキスパート「Excel VBA スタンダード」(上級者向け資格)/ Python 3 エンジニア認定基礎(経済産業省「ITスキル標準(ITSS)」に掲載)