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

アフィリエイト広告を利用しています。
QRコード
【QRコード】PC<-->スマホの切り替えにご利用ください
運営者・ポテ

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

ノンプログラマー向けの「ChatGPTxExcelマクロ・VBA解説シリーズ」へようこそ!

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

Information
  • ノンプログラマー
    プログラミングを専門にしていない人たちのことです。
  • VBAとマクロの違い
    VBAは、Visusal Basic for Application の略で、プログラミング言語のことです。マクロは、VBAを使って作成される「機能」のことです。
  • ChatGPT
    米国のOpenAI社が開発した会話型AIツールで、質問に答えたり、文章を作成したりできる便利なシステムです。

具体的には、異なる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.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

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

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

運営者・ポテ

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

おわりに

運営者・ポテ

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

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

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

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

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


関連記事

本稿と関連の深い記事です。もしよろしければ、合わせてご活用ください。

VBAプログラミングスキルアップのための参考情報

ここでは参考図書を紹介いたしますが、これらに限らず自分に合うものを選ぶことが重要だと考えております。皆様の、より一層のご成功を心よりお祈りしております。

VBAプログラミングのスキルアップ

学習用としてもハンドブックとしても役立つ便利な書籍がこちらです。価格はやや高めですが、その内容は非常に充実しています。相応のスキルを身に付けるためには、こうしたしっかりとした書籍を一冊持っておくと良いでしょう。



入門書に関しては、どの書籍も大きな違いはありません。あまり迷うことに時間をかけるよりは、手頃なものを一冊選んでみると良いでしょう。VBAの入門書は数多く出版されていますので、興味がある方はぜひチェックしてみてください。

甲乙つけがたい場合、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。

\チェックしてみよう/

\チェックしてみよう/

\チェックしてみよう/


VBAのプログラミング能力を客観的に証明したい場合には「VBAエキスパート試験」があります。この試験はVBAの知識を公式に認定するものです。VBAの総合的な能力獲得を目指す方に適しています。以下の公式テキストが販売されております。



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

「独学プログラマー」というプログラミングの魅力を解説した書籍があります。これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。


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

QRコード
【QRコード】PC<-->スマホの切り替えにご利用ください

コメントを残す

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