ChatGPT活用

【プログラミング不要】ChatGPTでExcelマクロ(VBA)を自動生成する方法

progmraming

公開日: 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:やりたいことを日本語で説明する

🦉 オウル先生「まず、やりたいことを具体的に日本語で書き出します」

書き出すポイント:

  1. 何をしたいか(目的)
  2. どんなデータを扱うか(入力)
  3. どんな結果がほしいか(出力)
  4. 条件や制約(あれば)

例:勤怠データの集計

【やりたいこと】
毎月の勤怠データを自動で集計したい

【入力データ】
・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に貼り付けます」

コードの貼り付け手順:

  1. Excelを開く
  2. Alt + F11 を押す(VBAエディタが開く)
  3. 挿入 → 標準モジュール をクリック
  4. 右側の白いエリアにコードを貼り付け
  5. 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に聞けば作れるんだね!」

🦉 オウル先生「その通りです。では、今日の内容をまとめましょう」

この記事で学んだこと

  1. VBAはChatGPTに日本語で指示するだけで作れる
  2. プロンプトは具体的に書くほど精度が上がる
  3. エラーが出てもChatGPTに聞けば解決できる
  4. コメント付きのコードを依頼すると理解しやすい
  5. 月15時間以上の削減も夢じゃない

VBA作成の3ステップ

ステップ やること
STEP1 やりたいことを日本語で具体的に書き出す
STEP2 ChatGPTにプロンプトを送る
STEP3 生成されたコードをExcelに貼り付けて実行

🦉 オウル先生「まずは簡単な自動化から始めてください。データ整形や集計など、繰り返しやっている作業がおすすめです」

🦊 フォックン「よし、毎月やってる勤怠集計からVBA化してみる!✨」


次のステップ

VBA自動化に成功したら、次はこちらの記事もおすすめです:

  1. 【初心者向け】Excelマクロの始め方【総務実務で使える】

    • VBAの基礎知識をさらに深める
  2. 【コピペOK】総務で使えるExcelマクロ10選

    • すぐに使えるマクロテンプレート集
  3. 【実録】ChatGPTで月20時間削減した方法

    • VBA以外の活用法も含めた総合事例

無料テンプレートプレゼント🎁

この記事を最後まで読んでくださった方に、
「総務で使えるVBAプロンプト集10選」を無料プレゼントします。

無料ダウンロードはこちら(Notionリンク)


関連記事:

あわせて読みたい
【初心者向け】ChatGPTで総務業務を効率化する7つの方法
【初心者向け】ChatGPTで総務業務を効率化する7つの方法
あわせて読みたい
総務業務で使える時間管理テクニック7選
総務業務で使える時間管理テクニック7選
あわせて読みたい
【コピペOK】ChatGPTプロンプト集【総務・人事版】30選
【コピペOK】ChatGPTプロンプト集【総務・人事版】30選
ABOUT ME
オウル先生&フォックン
オウル先生&フォックン
ブログライター
オウル先生 フォックンが運営する未経験からのプログラミング上達ガイド! プログラミング学習に興味があるけど、 「どのスクールを選べばいいか分からない…」 「自分に合った学習方法が知りたい…」 「本当にエンジニアになれるか不安…」 そんな悩みをお持ちのあなたへ。 オウル先生とフォックンが、プログラミングスクール選びから学習方法、キャリア形成まで、丁寧にサポートします! 豊富な情報と分かりやすい解説で、あなたのプログラミング学習を成功へと導きます。
記事URLをコピーしました