ChatGPTでExcel VBAコードを作る方法|初心者向けに実例で解説

AI

※この記事にはアフィリエイト広告が含まれています。

Excelで毎回同じ作業を繰り返していると、
「マクロで自動化できたら便利なのに」
と思うことはありませんか?

しかし、Excel VBAを使ったことがないと、
「どんなコードを書けばいいのか分からない」
「マクロを作りたいけれど、VBAの文法が分からない」
というところで止まってしまうことがあります。

そんなときに便利なのがChatGPTです。
ChatGPTに「Excelで何をしたいのか」を日本語で伝えると、目的に合わせたVBAコードを作ってもらうことができます。
例えば、

ExcelのA列の最終行まで順番に処理するVBAコードを作ってください。

と質問すると、VBAコードとその使い方を提案してもらえます。ただし、ChatGPTが作成したVBAコードが必ず正しいとは限りません。

この記事では、ChatGPTを使ってExcel VBAコードを作る基本的な方法から、実際に仕事で使えそうなサンプル、質問するときのコツ、利用時の注意点まで初心者向けに解説します。

ChatGPTでExcel VBAコードは作れる?

ChatGPTを使うと、日本語でやりたいことを説明してVBAコードを作成できます。
例えば、次のように質問してみます。

ExcelのA1セルに「こんにちは」と入力するVBAコードを作ってください。

すると、例えば次のようなコードが考えられます。

Sub Sample()

    Range("A1").Value = "こんにちは"

End Sub
このマクロを実行すると、A1セルに「こんにちは」と入力されます。
シートを指定したい場合は、さらに、

Sheet1のA1セルに入力するように変更してください。

と質問できます。
例えば次のように変更できます。

Sub Sample()

    Worksheets("Sheet1").Range("A1").Value = "こんにちは"

End Sub
このようにChatGPTでは、
コードを作る → 条件を追加する → コードを修正してもらう
という会話形式でVBAコードを作っていけます。

ChatGPTにVBAコードを作ってもらう基本的な手順

ChatGPTを使ってVBAコードを作る方法は難しくありません。
まず、Excelで何をしたいのかを具体的に入力します。
例えば、

ExcelでA列のデータを上から順番に取得するVBAコードを作ってください。

と質問します。
すると、例えば次のようなコードを作成できます。

Sub ReadData()

    Dim lastRow As Long
    Dim i As Long

    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    For i = 1 To lastRow
        Debug.Print Cells(i, 1).Value
    Next i

End Sub
コードの意味が分からなければ、

VBA初心者にも分かるように1行ずつ説明してください。

と続けて質問します。
さらに、

1行目は見出しなので2行目から処理してください。

と追加すれば、

For i = 2 To lastRow
のようにコードを変更できます。
最初から完璧な指示を作ろうとする必要はありません。
まず簡単なコードを作ってもらい、必要な条件を追加していくのが使いやすい方法です。

ChatGPTへの質問は具体的にする

ChatGPTから目的に合ったVBAコードを得るには、質問の仕方が重要です。
例えば、

Excelを自動化してください。

だけでは、どの処理を自動化したいのか分かりません。
次のように具体的にします。

Excel VBAでSheet1のA列を上から順番に確認して、値が「完了」の行だけB列に今日の日付を入力するマクロを作ってください。1行目は見出しなので2行目から処理してください。

ここまで伝えると、ChatGPTも必要な処理を判断しやすくなります。
質問するときは、

  • どのシートを使うのか
  • どのセル・列を処理するのか
  • 何行目から処理するのか
  • どんな条件なのか
  • 最終的にどうしたいのか

をできるだけ具体的に伝えましょう。

実例1:最終行を取得するVBAコードを作る

Excel VBAでよく使う処理の一つが、データの最終行を取得する処理です。
ChatGPTに、

Sheet1のA列でデータが入っている最終行を取得するVBAコードを作ってください。

と質問します。
例えば次のようなコードが考えられます。

Sub GetLastRow()

    Dim lastRow As Long

    With Worksheets("Sheet1")
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    End With

    MsgBox "最終行は " & lastRow & " 行目です。"

End Sub

Rows.Countでシートの最大行数を取得し、下から上方向へデータを探して最終行を取得しています。
ChatGPTに、

なぜEnd(xlUp)を使うのですか?

と質問して、分からない部分だけ詳しく説明してもらうこともできます。

実例2:条件に一致するセルだけ処理する

次は、A列の値を確認して条件に一致した行を処理してみます。
例えばChatGPTに、

Sheet1のA列を確認して、「完了」と書かれている行のB列に今日の日付を入力するVBAコードを作ってください。1行目は見出しです。

と質問します。
一例は次のようになります。

Sub SetCompleteDate()

    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long

    Set ws = Worksheets("Sheet1")

    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    For i = 2 To lastRow

        If ws.Cells(i, "A").Value = "完了" Then
            ws.Cells(i, "B").Value = Date
        End If

    Next i

End Sub
このコードでは、
For
で2行目から最終行まで繰り返し、
If ws.Cells(i, "A").Value = "完了" Then
でA列の値を確認しています。
「完了」であれば、
ws.Cells(i, "B").Value = Date
によってB列に現在の日付を入力します。
このような「条件に一致する行だけ処理する」というVBAコードもChatGPTで作成できます。

実例3:複数のシートを繰り返し処理する

Excelでは、複数のワークシートに同じ処理をしたい場合があります。
例えば、

Excelブック内のすべてのシートのA1セルにシート名を入力するVBAコードを作ってください。

とChatGPTに質問します。
例えば次のようなコードを作成できます。

Sub SetSheetName()

    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
        ws.Range("A1").Value = ws.Name
    Next ws

End Sub

For Eachを使って、ブック内のワークシートを1枚ずつ処理しています。
VBAの繰り返し処理が分からない場合は、

For Eachの仕組みを初心者向けに説明してください。

と追加で質問すると理解しやすくなります。

実例4:別のExcelファイルを開く

ChatGPTを使って、別のExcelファイルを操作するVBAコードも作成できます。
例えば、

C:\workにある「売上.xlsx」をVBAで開くコードを作ってください。

と質問します。
基本的には次のようなコードになります。

Sub OpenExcelFile()

    Workbooks.Open "C:\work\売上.xlsx"

End Sub
ファイルが存在しない場合も考慮したいなら、

ファイルが存在しない場合はメッセージを表示するようにしてください。

と追加します。
例えば、

Sub OpenExcelFile()

    Dim filePath As String

    filePath = "C:\work\売上.xlsx"

    If Dir(filePath) <> "" Then
        Workbooks.Open filePath
    Else
        MsgBox "ファイルが見つかりません。"
    End If

End Sub
のように改善できます。
このように正常に動く場合だけでなく、エラーになる場合も指定するのが、ChatGPTで実用的なVBAコードを作るポイントです。

実例5:ブックを開いたときにマクロを自動実行する

Excelファイルを開いたタイミングで自動的に処理したい場合もあります。
例えば、

Excelファイルを開いたときに「処理を開始します」とメッセージを表示するVBAコードを作ってください。

と質問します。
この場合はWorkbook_Openイベントを使用できます。

Private Sub Workbook_Open()

    MsgBox "処理を開始します。"

End Sub
ここで重要なのは、通常の標準モジュールではなく、ThisWorkbookに記述することです。ChatGPTがコードだけを表示して、記述場所を十分に説明しないこともあります。
そのため、

このコードはVBAエディターのどこに記述すればいいですか?

と質問するのもおすすめです。
pg-noteでは、ブックを開いたときにマクロを自動実行する方法についても詳しく解説しています。

【Excel VBA】ブックを開いたときにマクロを自動実行する方法|Workbook_Open

ChatGPTが作ったVBAコードをExcelに貼り付ける方法

ChatGPTがコードを作ってくれても、
「このコードをどこに貼ればいいの?」
と迷う人もいるでしょう。
一般的なマクロであれば、ExcelでAlt+F11キーを押してVBAエディターを開きます。

次に、
「挿入」→「標準モジュール」
を選択します。

表示されたコード画面に、ChatGPTが作成したVBAコードを貼り付けます。
ただし、先ほどのWorkbook_Openのようなイベントマクロは標準モジュールではなく、ThisWorkbookなど決められた場所へ記述します。

分からない場合はChatGPTに、

このVBAコードは標準モジュール、ThisWorkbook、シートモジュールのどこに記述しますか?

と質問するとよいでしょう。

Excelファイルはxlsm形式で保存する

VBAマクロを保存する場合は、ファイル形式にも注意してください。
通常の.xlsx形式ではVBAマクロを保存できません。
マクロを含むExcelファイルは、基本的に、
Excelマクロ有効ブック(.xlsm)
として保存します。

せっかくChatGPTでVBAコードを作っても、.xlsxのまま保存してマクロを失わないよう注意しましょう。

ChatGPTが作ったVBAコードをそのまま実行しない

ChatGPTはVBAコードを簡単に作ってくれますが、生成されたコードが必ず正しいとは限りません。
特に、

  • ファイル削除
  • セルの上書き
  • シート削除
  • 大量データの変更
  • ファイル保存
  • ブックの上書き保存

などを含むコードには注意してください。
例えば、

Worksheets("Sheet1").Range("A1:Z1000").ClearContents
を実行すれば、指定した範囲の内容が消去されます。
また、
Worksheets("Sheet1").Delete
のようなコードでは、シートそのものを削除します。
コードの意味が分からない場合は実行せず、

このVBAコードを実行すると、既存データが削除・上書きされる可能性がありますか?

とChatGPTに確認しましょう。
ただし、ChatGPTの回答も常に正しいとは限りません。
重要なExcelファイルでは、必ずバックアップしたコピーでテストしてから本番ファイルで実行することをおすすめします。

VBAコードでエラーが出たらChatGPTに質問する

ChatGPTで作ったコードがエラーになった場合も、ChatGPTを利用できます。
例えば、

次のVBAコードを実行すると「実行時エラー’9′ インデックスが有効範囲にありません」と表示されます。原因と修正方法を初心者向けに教えてください。

というように質問します。

その際、

  • VBAコード
  • エラーメッセージ
  • エラーになった行
  • 本来やりたいこと

を伝えると、原因を判断しやすくなります。
ただし、会社で使用しているExcelファイルを扱う場合は注意してください。
顧客名、メールアドレス、社員情報、社内のファイルパス、パスワードなどの機密情報を、そのままChatGPTへ貼り付けないようにします。
会社に生成AIの利用ルールがある場合は、そのルールに従って利用してください。

ChatGPTにExcel VBAを作ってもらうプロンプト例

ChatGPTへ毎回どのように質問すればよいか迷う場合は、次のような形をベースにすると便利です。

あなたはExcel VBAに詳しいエンジニアとして回答してください。

【やりたいこと】
Sheet1のA列にある商品名を上から順番に処理したい

【条件】
・1行目は見出し
・2行目から最終行まで処理する
・A列が空白の場合は何もしない
・処理した行のB列に今日の日付を入力する
・既存データを削除しない

【希望】
・Excel VBA初心者にも分かるコードにする
・コードの意味を説明する
・コードをどこに貼ればいいか説明する

こうすると、単に、

VBAを書いて

と依頼するより、目的に合ったコードを得やすくなります。
さらに、

エラー処理も追加してください。

実行前に確認メッセージを表示してください。

など、あとから条件を追加していけばよいでしょう。

ChatGPTでVBAを作るメリット

ChatGPTを使うメリットは、VBAの構文や関数をすべて覚えていなくても、コード作成を始められることです。
例えば、
「最終行を取得したい」
「条件に一致する行だけ処理したい」
「複数のExcelファイルを順番に処理したい」
というやりたいことから質問できるのが便利です。
また、分からないコードについて、

このコードの意味を1行ずつ説明してください。

と質問できるので、VBAの勉強にも利用できます。
一方、ChatGPTだけに頼っていると、生成されたコードが正しいか判断できない場合があります。
そのため、

ChatGPTでコードを作る
↓
コードの意味を確認する
↓
コピーしたExcelファイルでテストする
↓
問題がなければ実際のファイルで使用する

という流れがおすすめです。

ChatGPTとVBA、PowerShellを使い分ける

pg-noteではPowerShellについても多く紹介しています。
Excelのセルやワークシートを細かく操作する場合はVBAが便利ですが、ファイルやフォルダを大量に処理したり、Windowsの操作を自動化したりする場合はPowerShellが便利なケースがあります。

例えば、
Excel内のセルを操作する → VBA
Windows上の大量のファイルを処理する → PowerShell
というように、目的によって使い分けるとよいでしょう。

ChatGPTを使えば、どちらのコードも作成できます。
PowerShellについては、こちらの記事で詳しく解説しています。

ChatGPTでPowerShellコードを作る方法|初心者向けに実例で解説

ChatGPTを仕事でもっと活用したい場合は

ここまで紹介したように、ChatGPTを使えば、初心者でもExcel VBAのコードを作成できます。
ただし、実際の仕事で活用しようとすると、

  • 思ったような回答が返ってこない
  • どのように指示すればよいかわからない
  • 作成されたコードが正しいのか判断できない
  • ChatGPTをもっと業務効率化に活用したい

と感じることもあります。

ChatGPTは、Excel VBAだけでなく、文章作成や資料の要約、PowerShellなど、さまざまな仕事に活用できます。
「ChatGPTを仕事でもっと活用したい」「生成AIは何から勉強すればいい?」という方は、こちらの記事で初心者向けの勉強方法を詳しく紹介しています。

生成AIを仕事で学ぶ方法|初心者向けにChatGPTの勉強方法を解説

生成AIの使い方を基礎から体系的に学びたい場合は、「DMM 生成AI CAMP」のような生成AIスクールを利用する方法もあります。DMM 生成AI CAMPでは、ChatGPTなどの生成AIの基礎から、プロンプトの作り方、仕事での活用方法などを学ぶことができます。

独学で試行錯誤するだけでなく、「仕事で生成AIを使えるようになりたい」という方は、一度内容を確認してみるとよいでしょう。

DMM 生成AI CAMPの詳細はこちら↓
 DMM 生成AI CAMP 学び放題


まとめ

ChatGPTを使えば、Excelでやりたいことを日本語で説明してVBAコードを作成できます。
例えば、

「最終行を取得する」
「条件に一致する行だけ処理する」
「複数のシートを処理する」
「別のExcelファイルを開く」
「Excelを開いたときにマクロを実行する」

といった処理も、ChatGPTに質問しながら作成できます。
ただし、ChatGPTが作ったVBAコードが必ず正しいとは限りません。
特にデータの削除、上書き、ファイル保存などを含むコードは、内容を理解せずに実行しないようにしましょう。
重要なExcelファイルを扱う場合は、コピーしたファイルで動作確認してから使用するのがおすすめです。
ChatGPTをVBAの代わりとして使うのではなく、VBAコードを作る・調べる・理解するためのサポート役として利用すると、Excelの作業効率化に活用しやすくなります。

タイトルとURLをコピーしました