【プログラミング不要】ChatGPTでExcelマクロ(VBA)を自動生成する方法
公開日: 2025-12-13
カテゴリ: Excel自動化・ChatGPT活用
想定読了時間: 10分
導入
🦊 フォックン「Excelマクロ(VBA)を作りたいんだけど、プログラミングなんて分からない…。でもChatGPTで作れるって本当?」
🦉 オウル先生「本当ですよ!プログラミング知識ゼロでも、ChatGPTに『やりたいこと』を日本語で伝えるだけでVBAコードが作れます。私も最初はVBAが苦手でしたが、ChatGPTのおかげで複雑な自動化も実現できるようになりました」
この記事は、以下のような方におすすめです。
- Excelの繰り返し作業を自動化したいが、VBAが分からない
- ChatGPTでVBAを作れると聞いたが、やり方が分からない
- プログラミング経験ゼロだが、マクロを使いたい
- VBAのエラーが出たときに、自分で直せない
この記事を読めば、プログラミング知識ゼロでもChatGPTを使ってExcelマクロを作成できるようになります。
私は総務・情報システム・人事を15年担当してきた中で、ChatGPTを使ったVBA作成で月15時間以上の業務削減を実現しました。その具体的な方法をお伝えします。
VBA(マクロ)とは?【超基礎】
🦊 フォックン「そもそもVBAって何?マクロと何が違うの?」
🦉 オウル先生「まず基礎から説明しますね」
VBAとマクロの違い
| 用語 | 説明 |
|---|---|
| マクロ | Excelの操作を自動化する機能の総称 |
| VBA | マクロを作るためのプログラミング言語(Visual Basic for Applications) |
簡単に言うと:
- マクロ = 自動化された一連の操作
- VBA = マクロを作るための言語
🦊 フォックン「つまり、VBAを書けばマクロが作れるってこと?」
🦉 オウル先生「その通りです。でも、ChatGPTがVBAを書いてくれるので、あなたはVBAを書く必要はありません」
VBAでできること
総務業務で特に役立つ自動化の例:
| 業務 | 自動化内容 | 削減時間の目安 |
|---|---|---|
| データ整形 | 不要な行・列の削除、書式統一 | 30分→1分 |
| 集計作業 | 複数シートのデータを1つに集約 | 1時間→2分 |
| ファイル操作 | フォルダ内のExcelを一括処理 | 2時間→5分 |
| 帳票作成 | 請求書・報告書の自動生成 | 1時間→3分 |
| メール送信 | Outlookと連携した一括送信 | 30分→1分 |
🦊 フォックン「こんなに時短できるの!?でも、VBA書けないし…」
🦉 オウル先生「だからこそ、ChatGPTの出番です」
ChatGPTでVBAを作る3ステップ
STEP1:やりたいことを日本語で説明する
🦉 オウル先生「まず、やりたいことを具体的に日本語で書き出します」
書き出すポイント:
- 何をしたいか(目的)
- どんなデータを扱うか(入力)
- どんな結果がほしいか(出力)
- 条件や制約(あれば)
例:勤怠データの集計
【やりたいこと】
毎月の勤怠データを自動で集計したい
【入力データ】
・A列: 社員名
・B列: 日付
・C列: 出勤時刻
・D列: 退勤時刻
・E列: 勤務時間
【ほしい結果】
・社員ごとの合計勤務時間を計算
・結果を新しいシートに出力
・残業時間(8時間超過分)も計算
【条件】
・データは2行目から開始(1行目はヘッダー)
・空白行があったらスキップ
🦊 フォックン「こんなに詳しく書くの?」
🦉 オウル先生「詳しければ詳しいほど、精度の高いコードが返ってきます。最初は面倒に感じますが、これがコツです」
STEP2:ChatGPTにプロンプトを送る
🦉 オウル先生「STEP1で整理した内容を、ChatGPTに送ります」
プロンプトのテンプレート:
あなたはExcel VBAの専門家です。
以下の要件を満たすVBAコードを作成してください。
【目的】
(やりたいことを書く)
【入力データの構造】
(どんなデータがどこにあるか)
【処理内容】
(何をしてほしいか、箇条書きで)
【出力】
(どんな結果がほしいか)
【条件・制約】
(あれば書く)
【お願い】
・コードには詳細なコメントを付けてください
・エラー処理も含めてください
・初心者でも分かるように説明してください
実際のプロンプト例:
あなたはExcel VBAの専門家です。
以下の要件を満たすVBAコードを作成してください。
【目的】
勤怠データから社員ごとの合計勤務時間と残業時間を集計する
【入力データの構造】
・Sheet1に勤怠データがある
・A列: 社員名
・B列: 日付
・C列: 出勤時刻
・D列: 退勤時刻
・E列: 勤務時間(数値、単位は時間)
・1行目はヘッダー、データは2行目から
【処理内容】
1. Sheet1の全データを読み込む
2. 社員名ごとに勤務時間を合計する
3. 8時間を超えた分を残業時間として計算する
4. 結果を新しいシート「集計結果」に出力する
【出力】
・A列: 社員名
・B列: 合計勤務時間
・C列: 合計残業時間
【条件・制約】
・空白行はスキップする
・「集計結果」シートが既にあれば、内容をクリアしてから出力
【お願い】
・コードには詳細なコメントを付けてください
・エラー処理も含めてください
・初心者でも分かるように説明してください
STEP3:生成されたコードをExcelに貼り付けて実行
🦉 オウル先生「ChatGPTが生成したコードを、Excelに貼り付けます」
コードの貼り付け手順:
- Excelを開く
- Alt + F11 を押す(VBAエディタが開く)
- 挿入 → 標準モジュール をクリック
- 右側の白いエリアにコードを貼り付け
- F5 を押して実行(または再生ボタン)
🦊 フォックン「え、これだけ?思ったより簡単!」
【実践例】勤怠データ集計マクロを作ってみよう
🦉 オウル先生「実際にChatGPTで作ったコードを見てみましょう」
ChatGPTが生成したコード例
Sub 勤怠データ集計()
'========================================
' 勤怠データから社員ごとの合計勤務時間と残業時間を集計する
'========================================
Dim wsData As Worksheet ' データがあるシート
Dim wsResult As Worksheet ' 結果を出力するシート
Dim lastRow As Long ' データの最終行
Dim i As Long ' ループ用カウンター
Dim empName As String ' 社員名
Dim workHours As Double ' 勤務時間
Dim dict As Object ' 社員ごとの集計用
Dim key As Variant ' Dictionary用
Dim resultRow As Long ' 結果出力行
' エラー処理の開始
On Error GoTo ErrorHandler
' データシートを設定
Set wsData = ThisWorkbook.Sheets("Sheet1")
' 集計結果シートを準備(なければ作成、あればクリア)
On Error Resume Next
Set wsResult = ThisWorkbook.Sheets("集計結果")
On Error GoTo ErrorHandler
If wsResult Is Nothing Then
' シートがなければ新規作成
Set wsResult = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
wsResult.Name = "集計結果"
Else
' シートがあればクリア
wsResult.Cells.Clear
End If
' Dictionary(連想配列)を作成
Set dict = CreateObject("Scripting.Dictionary")
' データの最終行を取得
lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row
' データを読み込んで集計
For i = 2 To lastRow ' 2行目から(1行目はヘッダー)
' 社員名を取得
empName = wsData.Cells(i, 1).Value
' 空白行はスキップ
If empName = "" Then GoTo NextRow
' 勤務時間を取得
workHours = wsData.Cells(i, 5).Value
' 社員ごとに合計
If dict.Exists(empName) Then
dict(empName) = dict(empName) + workHours
Else
dict.Add empName, workHours
End If
NextRow:
Next i
' 結果シートにヘッダーを出力
wsResult.Cells(1, 1).Value = "社員名"
wsResult.Cells(1, 2).Value = "合計勤務時間"
wsResult.Cells(1, 3).Value = "合計残業時間"
' ヘッダーを太字に
wsResult.Range("A1:C1").Font.Bold = True
' 集計結果を出力
resultRow = 2
For Each key In dict.Keys
wsResult.Cells(resultRow, 1).Value = key ' 社員名
wsResult.Cells(resultRow, 2).Value = dict(key) ' 合計勤務時間
' 残業時間の計算(日数 × 8時間 を超えた分)
' ※ここでは単純に合計から1日8時間×日数を引く想定
' 実際の計算方法は業務に合わせて調整してください
Dim overtimeHours As Double
overtimeHours = Application.WorksheetFunction.Max(0, dict(key) - (dict(key) / 8) * 8)
wsResult.Cells(resultRow, 3).Value = overtimeHours ' 合計残業時間
resultRow = resultRow + 1
Next key
' 列幅を自動調整
wsResult.Columns("A:C").AutoFit
' 完了メッセージ
MsgBox "集計が完了しました!" & vbCrLf & _
"集計結果シートをご確認ください。", vbInformation, "完了"
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました。" & vbCrLf & _
"エラー内容: " & Err.Description, vbExclamation, "エラー"
End Sub
🦊 フォックン「うわ、長い!でも、コメントがあるから何やってるか分かる!」
🦉 オウル先生「コメントを付けてもらうのがポイントです。後から修正するときにも役立ちます」
エラーが出たときの対処法
🦊 フォックン「もしエラーが出たらどうするの?VBA分からないし…」
🦉 オウル先生「大丈夫です。エラーもChatGPTに聞けばいいんです」
エラー対処のプロンプト例
以下のVBAコードを実行したらエラーが出ました。
原因と修正方法を教えてください。
【エラーメッセージ】
「実行時エラー '9': インデックスが有効範囲にありません。」
【発生箇所】
Set wsData = ThisWorkbook.Sheets("Sheet1")
【コード】
(問題のコードを貼り付け)
【状況】
・Sheet1という名前のシートは存在します
・Excelファイルは開いています
🦉 オウル先生「エラーメッセージと発生箇所を伝えれば、ChatGPTが原因と修正方法を教えてくれます」
よくあるエラーと対処法
| エラー | 原因 | 対処法 |
|---|---|---|
| 「インデックスが有効範囲にありません」 | シート名が間違っている | シート名を確認して修正 |
| 「型が一致しません」 | 数値に文字が入っている | データを確認、または型変換を追加 |
| 「オブジェクトが必要です」 | 変数が正しく設定されていない | 変数宣言を確認 |
| 「マクロが見つかりません」 | マクロ名が間違っている | マクロ名を確認 |
🦊 フォックン「エラーが出ても、ChatGPTに聞けばいいんだね。安心した😊」
【コピペOK】総務で使えるVBAプロンプト5選
🦉 オウル先生「総務業務で使えるVBAのプロンプトテンプレートを5つ紹介します。そのままコピペして使えますよ」
①データ整形マクロ
あなたはExcel VBAの専門家です。
以下の要件を満たすVBAコードを作成してください。
【目的】
勤怠データの書式を統一する
【処理内容】
1. A列からE列のデータを処理
2. 空白行を削除
3. 日付列(B列)の書式を「yyyy/mm/dd」に統一
4. 時刻列(C列、D列)の書式を「hh:mm」に統一
5. セルの背景色をクリア
6. フォントを「メイリオ」、サイズ11に統一
【お願い】
・コードには詳細なコメントを付けてください
・処理完了後にメッセージを表示してください
②複数シート集約マクロ
あなたはExcel VBAの専門家です。
以下の要件を満たすVBAコードを作成してください。
【目的】
複数シートのデータを1つのシートに集約する
【処理内容】
1. ブック内のすべてのシートを対象にする
2. ただし「集約結果」シートは除外
3. 各シートのA列からE列、2行目以降のデータを取得
4. 「集約結果」シートに順番に貼り付け
5. データの間に空行は入れない
【お願い】
・コードには詳細なコメントを付けてください
・何件のデータを集約したか表示してください
③ファイル一括処理マクロ
あなたはExcel VBAの専門家です。
以下の要件を満たすVBAコードを作成してください。
【目的】
フォルダ内のExcelファイルを一括で処理する
【処理内容】
1. 指定フォルダ内のすべての.xlsxファイルを開く
2. 各ファイルのSheet1のA1セルの値を取得
3. ファイル名とA1の値を一覧にまとめる
4. 結果を新しいブックに出力
【お願い】
・フォルダパスはInputBoxで指定できるようにしてください
・処理中は画面更新を停止してください(高速化)
・コードには詳細なコメントを付けてください
④請求書自動作成マクロ
あなたはExcel VBAの専門家です。
以下の要件を満たすVBAコードを作成してください。
【目的】
データシートから請求書を自動作成する
【入力データ】
・Sheet「データ」に請求データがある
・A列: 請求先名
・B列: 品目
・C列: 数量
・D列: 単価
【処理内容】
1. Sheet「テンプレート」をコピーして新しい請求書シートを作成
2. 請求先名、品目、数量、単価をテンプレートに転記
3. 合計金額を計算(数量×単価の合計)
4. 請求書番号を「INV-001」のように連番で付与
【お願い】
・コードには詳細なコメントを付けてください
・消費税(10%)も計算してください
⑤Outlookメール一括送信マクロ
あなたはExcel VBAの専門家です。
以下の要件を満たすVBAコードを作成してください。
【目的】
Excelの宛先リストからOutlookでメールを一括送信する
【入力データ】
・Sheet1に宛先データがある
・A列: 氏名
・B列: メールアドレス
・C列: 件名
・D列: 本文
【処理内容】
1. 各行のデータを読み込む
2. Outlookでメールを作成(送信はせず下書きに保存)
3. 本文に「○○様」と宛名を差し込む
【お願い】
・コードには詳細なコメントを付けてください
・誤送信防止のため、送信はせず下書き保存にしてください
・処理件数を最後に表示してください
ChatGPT × VBAで月15時間削減した私の実例
🦉 オウル先生「私がChatGPTでVBAを作成して、実際に削減した業務を紹介しますね」
Before → After
| 業務 | Before(手作業) | After(VBA自動化) | 削減時間 |
|---|---|---|---|
| 勤怠データ集計 | 3時間/月 | 5分/月 | 2時間55分 |
| 経費精算チェック | 2時間/月 | 10分/月 | 1時間50分 |
| 複数ファイル集約 | 4時間/月 | 10分/月 | 3時間50分 |
| 報告書フォーマット変換 | 2時間/月 | 5分/月 | 1時間55分 |
| データ整形・クリーニング | 5時間/月 | 15分/月 | 4時間45分 |
| 合計 | 16時間/月 | 45分/月 | 15時間15分 |
🦊 フォックン「15時間も削減!年間だと180時間以上!」
🦉 オウル先生「しかも、VBAの知識はほぼゼロでここまでできました。ChatGPTのおかげです」
まとめ:プログラミング知識ゼロでもVBAは作れる
🦊 フォックン「VBA怖くなくなった!ChatGPTに聞けば作れるんだね!」
🦉 オウル先生「その通りです。では、今日の内容をまとめましょう」
この記事で学んだこと
- VBAはChatGPTに日本語で指示するだけで作れる
- プロンプトは具体的に書くほど精度が上がる
- エラーが出てもChatGPTに聞けば解決できる
- コメント付きのコードを依頼すると理解しやすい
- 月15時間以上の削減も夢じゃない
VBA作成の3ステップ
| ステップ | やること |
|---|---|
| STEP1 | やりたいことを日本語で具体的に書き出す |
| STEP2 | ChatGPTにプロンプトを送る |
| STEP3 | 生成されたコードをExcelに貼り付けて実行 |
🦉 オウル先生「まずは簡単な自動化から始めてください。データ整形や集計など、繰り返しやっている作業がおすすめです」
🦊 フォックン「よし、毎月やってる勤怠集計からVBA化してみる!✨」
次のステップ
VBA自動化に成功したら、次はこちらの記事もおすすめです:
-
【初心者向け】Excelマクロの始め方【総務実務で使える】
- VBAの基礎知識をさらに深める
-
【コピペOK】総務で使えるExcelマクロ10選
- すぐに使えるマクロテンプレート集
-
【実録】ChatGPTで月20時間削減した方法
- VBA以外の活用法も含めた総合事例
無料テンプレートプレゼント🎁
この記事を最後まで読んでくださった方に、
「総務で使えるVBAプロンプト集10選」を無料プレゼントします。
関連記事:

