【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.xlsxファイルB.xlsxの各セルのデータをひとつずつ順番に見ていき、ファイルAに存在しているデータがファイルBにも存在していれば「マッチ」とします。

コードの生成

ChatGPTにプロンプトを入力し、上述のシナリオを実現するVBAコードを生成します。ChatGPT のモデルは「ChatGPT 4o」使用しました。

Information

プロンプト
ChatGPTのようなAIに対して入力する指示や質問のことです。AIに何をしてほしいかを伝えるための「入力文」と考えると分かりやすいです。

入力したプロンプトは次の通りです。

次の条件にしたがって、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)
```
Information

ChatGPTが指示を間違えて生成しやすいところは、「(必ず守る)」という指示文を末尾に指示しています。

生成されたコードは次の通りです。一部、行間の指示と、一行の桁数(文字数)を間違えて生成しているところがありますが、ほとんど完璧と言って良いでしょう。

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
Information

行間の設定やテキストへの色付け、ファイルの存在確認方法などは、生成時によって若干のばらつきが見られることがあります。そのため、必要に応じて生成後に若干手動で調整を行う必要があります。しかし、ここまでレベルの高い完成度であれば、ほとんど完璧と言って良いでしょう。

実行結果は次の通りです。

マクロ実行前のディレクトリ
マクロ実行前のフォルダ
マクロ実行後のディレクトリ
マクロ実行後のフォルダ
マクロ実行前のファイルA.xlsx
マクロ実行前のファイルB.xlsx
マクロ実行後のファイルA.xlsx
マクロ実行後のファイルB.xlsx

コードは正常に動作しました。素晴らしい結果です。もう気力を振り絞って手作業でコードを記述していく時代ではないなと、改めて感じました。

なお、今回は一度で完成形のコードを生成させるため、プロンプトの内容が多めになりましたが、少しずつ対話を重ねながら逐次的に生成していく方法でも良いです。実際のコード作成の現場では、そのような使い方の方が多いと思います。

運営者・ポテ

以上で、解説は終了です。ありがとうございました。

VBAスキルアップの参考情報

近年は、ChatGPTをはじめとするAIの登場によって、学習のスタイルが大きく変わりました。

分からないことがあれば、AIに尋ねれば答えがすぐに見つかる時代です。

とはいえ、AIを使いこなすには、自分自身の基本的な知識や理解力が欠かせません。

全体像をつかむためには、やはり書籍などで体系的に学んでおくことが今でも有効です。

そのうえでAIを活用すれば、自分の理解度に合わせた的確な解説や、応用のヒントを得ることができます。

「学んで基礎を築く → AIで補い発展させる」──このサイクルを重ねることで、VBAスキルは着実に高まっていくでしょう。

VBAのスキルアップ

VBAを学び始めるなら

入門書は、どれを選んでも大きな差はないように感じます。

どれを選ぶかに悩むことに時間をかけるよりも、まずは手頃な一冊を手に取って進めてみるのがおすすめです。

もし迷ったときには、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。

基礎を超えて力をつけたいなら

私は上級者を目指していましたので、入門書にとどまらず、このような内容の濃い一冊を選んで学んでいました。

今は誰でもAIを活用できる時代になりましたが、上級者を目指す方にとっては、AIをより上手に活用するという意味でも、こうした本は今なお価値があります。

このレベルの本を一冊持っておくことに、損はないでしょう。


資格で能力を証明したいなら

VBAのプログラミング能力を客観的に示したい場合には「VBAエキスパート試験」があります。

特に「スタンダード」の方は上級者向けです。

あなたが社内業務の改善を行う立場であっても、VBAで作成したシステムをお客様に納める立場であっても、この資格は信頼や安心につながるでしょう。

以下の公式テキストが販売されています。



プログラミングの一般教養

「独学プログラマー」というプログラミングの魅力を解説した書籍があります。

これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。

今はAIにコードを尋ねれば、答えが返ってくる時代です。

しかし、この本からは「コード」以上に、プログラミングに向き合う姿勢や考え方を学ぶことができるでしょう。


こちらの記事でも紹介しています。もしよろしければご覧ください。

【初心者歓迎】無料相談受付中 

運営者・ポテ

いつもありがとうございます!

限られた時間をより良く使い、日本の生産性を高めたい──

みんなの実用学を運営するソフトデザイン工房では、業務整理や業務改善アプリケーション作成のご相談を承っております。

お気軽にご相談ください。


こちらの記事でも紹介しております。

おわりに

運営者・ポテ

ご覧いただきありがとうございました!

本稿では、「をChat GPTでVBAコードを生成」してみた結果をお届けいたしました。

お問い合わせやご要望等ございましたら、「お問い合わせ/ご要望」またはコメントにて、ご連絡いただければ幸いでございます。

皆様の人生がより一層素晴らしいものになるよう、少しでもお役に立てれば幸いでございます。

なお、当サイトでは様々な情報を発信しsております。もしよろしければ、トップページもご確認いただけると幸いでございます。

この記事を書いた人

運営者・ポテソフトデザイン工房|日々の業務にちょうどいい自動化を
■人生を追求する凡人 ■日本一安全で、気の向くままに自分の時間を過ごせる、こだわりのキャンプ場を作るのが夢 ■ソフトデザイン工房運営(個人事業者) - 業務改善アプリケーションをご提供 ■人生は時間そのもの。ひとりでも多くの人が「より良い人生にするために時間を使って欲しい」と願い、仕事のスキルの向上、余暇の充実、資産形成を追求。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です