ChatGPT を使った Excel VBA マクロの作成
はじめに:初めての AI 生成 VBA マクロ
ChatGPT は、簡単な英語の説明から完全で機能する VBA マクロを生成できます。マクロを実行するには、Excel を開き、Alt + F11 で VBA エディタを開き、新しいモジュールを挿入(挿入 > 標準モジュール)し、コードを貼り付けて F5 で実行します。最初のプロンプトはシンプルでテスト可能なものにします——例えば「選択範囲の背景色を水色に変更する VBA マクロを作成してください」。これにより、複雑な自動化に取り組む前に、生成されたコードが自分の環境で動作することを確認できます。
ワークブックは常にマクロ有効ファイル(.xlsm)として保存し、通常の .xlsx ではないことに注意してください。標準ワークブックは保存時にすべての VBA コードを削除します。リボンの下にセキュリティ警告バーが表示された場合は、「コンテンツの有効化」をクリックしてマクロの実行を許可します。ChatGPT 生成コードについては、マクロが期待通りに動作すると確信できるまで、テスト用コピーで実行してください。
生産性マクロ:今日から使える実例
マクロ 1:データテーブルの自動書式設定
プロンプト:「現在の選択範囲に対して、見出し行を太字にし、すべてのデータセルに下罫線を追加し、列幅を自動調整し、先頭行を固定する VBA マクロを作成してください。」
生成されたコード:
Sub FormatDataTable()
Dim rng As Range
Set rng = Selection
' 見出し行の書式設定
With rng.Rows(1)
.Font.Bold = True
.Interior.Color = RGB(68, 114, 196)
.Font.Color = RGB(255, 255, 255)
End With
' すべてのセルに罫線を追加
With rng.Borders
.LineStyle = xlContinuous
.Weight = xlThin
.Color = RGB(180, 180, 180)
End With
' 列幅の自動調整
rng.EntireColumn.AutoFit
' 先頭行の固定
ActiveWindow.SplitRow = 1
ActiveWindow.FreezePanes = True
MsgBox "テーブルの書式設定が完了しました!", vbInformation
End Sub
このマクロは安全で元に戻せ(実行後に Ctrl+Z で元に戻せます)、基本的な VBA パターン(Range オブジェクト、効率的なプロパティ設定のための With ブロック、MsgBox によるユーザーフィードバック)を示しています。
マクロ 2:各ワークシートを個別の PDF としてエクスポート
プロンプト:「アクティブなワークブックのすべてのワークシートを、ワークブックと同じフォルダに個別の PDF ファイルとしてエクスポートする VBA マクロを作成してください。ファイル名は 'ワークブック名_シート名.pdf' の形式で、非表示シートはスキップしてください。」
生成されたコード:
Sub ExportSheetsAsPDF()
Dim ws As Worksheet
Dim folderPath As String
Dim pdfName As String
folderPath = ThisWorkbook.Path & "\"
For Each ws In ThisWorkbook.Worksheets
If ws.Visible = xlSheetVisible Then
pdfName = folderPath & _
Replace(ThisWorkbook.Name, ".xlsm", "") & _
"_" & ws.Name & ".pdf"
ws.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=pdfName, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True
Debug.Print "エクスポート済み: " & pdfName
End If
Next ws
MsgBox "エクスポート完了!イミディエイト ウィンドウ(Ctrl+G)で詳細を確認してください。", vbInformation
End Sub
このマクロは、Excel の「ファイル > 名前を付けて保存 > PDF」と同じエンジンである ExportAsFixedFormat を使用しています。Worksheets コレクションをループし、非表示シートをスキップし、文字列連結で動的にファイル名を構築します。Debug.Print ステートメントでイミディエイト ウィンドウに出力を確認できます。
マクロ 3:Excel データから Outlook でメール送信
プロンプト:「A 列(A2 から開始)からメールアドレス、B 列から件名、C 列から本文を読み取る VBA マクロを作成してください。各行について Outlook 経由でメールを送信します。A 列が空になったら停止します。送信間隔は 2 秒にしてください。」
生成されたコード:
Sub SendBulkEmails()
Dim OutApp As Object
Dim OutMail As Object
Dim i As Long
Dim lastRow As Long
On Error Resume Next
Set OutApp = GetObject(, "Outlook.Application")
If OutApp Is Nothing Then
Set OutApp = CreateObject("Outlook.Application")
End If
On Error GoTo 0
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If Cells(i, 1).Value = "" Then Exit For
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = Cells(i, 1).Value
.Subject = Cells(i, 2).Value
.Body = Cells(i, 3).Value
.Send
End With
Application.Wait Now + TimeValue("00:00:02")
Next i
Set OutMail = Nothing
Set OutApp = Nothing
MsgBox "すべてのメールが送信されました!", vbInformation
End Sub
Application.Wait 行は送信間に 2 秒の遅延を強制し、一括送信時の Outlook のレート制限やスパムフィルターのトリガーを回避します。On Error Resume Next と Nothing チェックによるエラー処理は、Outlook がまだ起動していない場合を適切に処理します。
より良い VBA コードのためのプロンプトエンジニアリング
ChatGPT 生成 VBA の品質は、リクエストの伝え方に大きく依存します。この構造化アプローチを使用してください:
- トリガーを定義:「ボタンクリック時に実行」vs「ワークブック開封時に自動実行」vs「選択範囲に対して実行」。
- データの場所を指定:「A 列の A2 から顧客名、B 列にメールアドレスがあります。」
- 正確な結果を記述:「各行について、顧客名の新しいワークシートを作成し、そのデータをコピーします。」
- エラー処理要件を記述:「メールアドレスが欠落している行はエラーを表示せずにスキップします。」
- 制約条件を明記:「ワークブックには 50,000 行あります。速度を最適化してください」または「Windows 上の Excel 2016 で動作する必要があります。」
プロのヒント:複雑なマクロでは、リクエストを小さな部分に分割します。最初にメインループ構造を要求し、次に各サブルーチンを個別に要求します。ChatGPT にコメントを追加しながら書くように依頼してください——これによりデバッグが大幅に容易になります。
AI 生成 VBA コードのデバッグ
AI 生成マクロが初回で完璧に動作することは稀です。以下は体系的なデバッグワークフローです:
- まずコンパイル:VBA エディタで、デバッグ > VBAProject のコンパイル を選択します。これにより、実行前に構文エラー、未宣言変数、欠落した参照を検出します。
- Option Explicit を追加:生成されたコードのモジュール先頭に
Option Explicitがない場合は追加します。これにより変数宣言が強制され、変数名のタイプミスを検出します。 - ブレークポイントを使用:行の左余白をクリックしてブレークポイントを設定し、F8 で 1 行ずつステップ実行します。変数にカーソルを合わせると現在の値が表示されます。
- Debug.Print 文を追加:戦略的なポイントに
Debug.Print "行: " & i & " 値: " & Cells(i,1).Valueを挿入して実行フローを追跡します。 - エラーを ChatGPT に貼り戻す:正確なエラーメッセージと行番号をコピーし、「12 行目で 'Runtime error 1004: Application-defined or object-defined error' が発生しました。以下が完全なコードです。原因は何ですか?」と質問します。AI は具体的なエラーフィードバックを与えられると自己修正できることがよくあります。
AI 生成マクロのセキュリティ考慮事項
VBA マクロはファイルシステム、レジストリ、ネットワークに完全にアクセスできます。AI 生成コードはインターネットからダウンロードしたコードと同じ注意を払って扱ってください:
- ファイル削除やシステム設定変更を行うマクロは、すべての行を確認するまで絶対に実行しないでください。キーワードに注意:
Kill、RmDir、DeleteFile、Shell、WScript.Shell、RegWrite。 - ネットワーク経由でデータを送信するマクロは、送信先 URL と送信データを完全に理解していない限り避けてください。
XMLHTTP、WinHttp.WinHttpRequest、MSXML2.ServerXMLHTTPに注意。 - 自動実行トリガーをチェック:
Auto_OpenまたはWorkbook_Openという名前のマクロは、ワークブックを開いたときに自動的に実行されます。これらを注意深く確認してください。 - デジタル署名を使用:配布予定のマクロには、デジタル証明書で署名します(ファイル > 情報 > ブックの保護 > デジタル署名の追加)。
- 企業環境:管理対象デバイスを使用している場合、IT 部門が未署名マクロをブロックするグループポリシー設定を行っている可能性があります。マクロベースのソリューションに時間を投資する前に確認してください。
再利用可能な VBA ツールキットの構築
最も信頼性の高い AI 生成マクロを個人用マクロブック(Personal.xlsb)に保存します。この非表示のワークブックは Excel を開くたびに読み込まれ、すべてのワークブックでマクロを利用できるようにします。作成するには、任意の簡単なマクロを記録し、保存先として「個人用マクロブック」を選択します。その後、VBA エディタを開き、VBAProject (PERSONAL.XLSB) を見つけて、厳選したマクロを含むモジュールを追加します。
マクロを機能別にモジュールに整理します:書式設定用、データエクスポート用、メール自動化用、ワークシート管理用。カスタムリボンタブ(ファイル > オプション > リボンのユーザー設定)を追加し、よく使うマクロにボタンを割り当ててワンクリックでアクセスできるようにします。時間の経過とともに、このツールキットは数十の手動手順を置き換え、Excel プロジェクト全体の一貫性を確保します。