AI総合研究所

SHARE

X(twiiter)にポストFacebookに投稿はてなブックマークに登録URLをコピー

ChatGPTでVBAマクロを作成する方法をわかりやすく解説!

この記事のポイント

  • 本記事では、ChatGPTを活用したMicrosoft OfficeのVBAスクリプトの作成方法を解説しています。
  • 要件定義やExcelのマクロ設定を行った上で、ChatGPTに対するプロンプトの設定、コード生成、実装に至るまでの手順を丁寧に解説しています。
  • また、実際にChatGPTを使ってVBAを作成する例を2つ紹介し、VBAコードの実行方法も示しています。
  • VBA作成のメリットとして、アルゴリズム理解の促進やデバッグの助け、時間節約などが挙げられています。
  • 注意点としては、セキュリティリスクの管理、コンプライアンスとプライバシーの確保、コードの品質と保守性に留意することが強調されています。

監修者プロフィール

坂本 将磨

Microsoft AIパートナー、LinkX Japan代表。東京工業大学大学院で技術経営修士取得、研究領域:自然言語処理、金融工学。NHK放送技術研究所でAI、ブロックチェーン研究に従事。学会発表、国際ジャーナル投稿、経営情報学会全国研究発表大会にて優秀賞受賞。シンガポールでのIT、Web3事業の創業と経営を経て、LinkX Japan株式会社を創業。

プログラミング初心者や自動化に興味がある方にとって、マイクロソフトのOffice製品を拡張するVBAスクリプトの作成は難しいと感じるかもしれません。 しかし、ChatGPTを活用すれば、業務プロセスの効率化と作業の自動化を簡単に達成することができます。

本記事では、ChatGPTのサポートを受けながら、VBAスクリプトを開発する方法を分かりやすく解説しています。VBAの基本から、ChatGPTと連携したスクリプトの実装、そのテストとデバッグ、さらには作成時の有益なメリットや留意すべきポイントまで、具体的な事例を交えて詳細にご紹介します。

プログラミングスキル向上の一助として、また業務の質と生産性の向上へ向けて、ぜひこのガイドをお役立てください。

最新モデル、OpenAI o1(o1-preview)について詳しく知りたい方は、こちらの記事もご覧ください⬇️
OpenAI o1(ChatGPT o1)とは?その特徴や使い方、料金体系を徹底解説!

VBAとは何か?

Visual Basic for ApplicationsVBA)は、Microsoft Office製品を拡張し、カスタマイズするためのプログラミング言語です。Excel、Word、PowerPointなどのアプリケーションに組み込まれており、ユーザーがマクロを記述して作業の自動化や効率化を図ることができます。VBAを使用することで、複雑な計算、データ処理、Officeアプリケーション間の連携などを実現することが可能になります。

AIが資料作成するイメージ


ChatGPTでVBAを作成する方法

ChatGPTを使ってVBAを作成する際に準備しておくべき事柄は、以下の通りです。

  • 要件定義: 自動化したいタスクの詳細を明確にします。何を実現したいのか、どのような結果が期待されるのかを理解することが重要です。

  • Excelマクロの設定: 以下の手順に従って、マクロの設定をして下さい。

Excelでマクロを有効化する必要があります。Excelを開いて画像赤枠部分の適当な場所で右クリックし、「リボンのユーザー設定」を押してください。

マクロの有効化1マクロの有効化手順1

すると、このような画面が表示されるので「開発」にチェックを入れて、「OK」を押してください。

マクロの有効化2マクロの有効化手順2

これでマクロの有効化が完了しました。

実際のステップ

以下のステップを踏んでいけば、ChatGPTを活用してVBAを作成することができます。

ステップ1: プロンプトの設定

ChatGPTに対して、具体的な指示を提供します。これには、自動化したいタスクの説明、期待する入力と出力の形式、任意の特定条件などが含まれます。

ステップ2: コード生成

ChatGPTが提案するVBAコードを検討します。必要に応じて、提案されたコードを調整し、カスタマイズすることで、より具体的な要件に合わせます。

ステップ3: コードのテストと実装

提案されたコードをOfficeアプリケーションに実装し、期待通りに動作するかテストします。問題があれば、デバッグを行い、修正します。


実際にChatGPTを使ってVBAを作成してみた

ChatGPTを使ってVBAを作成する状況は多岐に渡ります。今回は、いくつか状況を想定して、実際にChatGPTを使ってVBAを作成していきたいと思います。

なお、作成してもらったVBAを実行するには、以下のような手順を実行してください。

まずは、開発タブ→VisualBasicを選択してください。
VBA実行方法その1
VBA実行方法その1

次に、挿入タブ→標準モジュールを選択してください。
VBA実行方法その2
VBA実行方法その2

すると、以下のような画面が表示されるので、生成したVBAをコピペした後に、赤枠で囲んだ部分を使って実行してください。
VBA実行方法その3
VBA実行方法その3

作成例1:レポート生成の自動化

複数の店舗の日次売り上げを合計し、新たなシートを作ってもらうVBAを作成してもらいます。使用するデータは以下のようになっています。

レポート生成の自動化で使うデータレポート生成の自動化で使うデータ

以下のように指示しました。
レポート生成の自動化指示レポート生成の自動化指示

軽く修正の指示をした後、最終的に作成してもらったVBAは以下の通りです。

Sub SumDailySales()
    Dim wsSales As Worksheet
    Dim wsSummary As Worksheet
    Dim lastRow As Long, i As Long, summaryRow As Long
    Dim dailySales As Double
    Dim salesDate As Variant ' Variant型に変更することで、任意の型のデータを保持できる
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
    
    ' "日次売上データ"シートを設定
    Set wsSales = ThisWorkbook.Sheets("Sheet1") ' シート名をアップロードされたファイルに合わせて設定
    lastRow = wsSales.Cells(wsSales.Rows.Count, "A").End(xlUp).Row
    
    ' 日付ごとに売上を集計
    For i = 2 To lastRow
        salesDate = wsSales.Cells(i, 1).Text ' 日付をテキスト形式で取得
        dailySales = wsSales.Cells(i, 4).Value
        If dict.Exists(salesDate) Then
            dict(salesDate) = dict(salesDate) + dailySales
        Else
            dict.Add salesDate, dailySales
        End If
    Next i
    
    ' 集計結果を新しいシートに出力
    Set wsSummary = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    wsSummary.Name = "日別売上合計"
    wsSummary.Cells(1, 1).Value = "日付"
    wsSummary.Cells(1, 2).Value = "売上合計"
    summaryRow = 2
    
    For Each salesDate In dict.Keys ' salesDateはVariant型なので、ここで問題なく使用できる
        wsSummary.Cells(summaryRow, 1).Value = salesDate
        wsSummary.Cells(summaryRow, 2).Value = dict(salesDate)
        summaryRow = summaryRow + 1
    Next salesDate
    
    ' 列の幅を自動調整
    wsSummary.Columns("A:B").AutoFit
End Sub

このVBAを実行したら、以下のように指示通りの処理が行われました。

レポート生成の自動化結果
レポート生成を自動化した結果

【関連記事】
➡️ChatGPTでレポート作成を効率化する方法をわかりやすく解説!

作成例2: 見積り作成の自動化

顧客要望リストに基づいて、商品とサービスの単価を参照して見積りを自動作成するVBAを作成してもらいます。使用するデータは以下のようになっています。

見積り作成の自動化で使用するデータ見積り作成の自動化で使用するデータ

実際にVBAを以下のように作成してもらいました。
見積り作成の自動化のための指示見積り作成の自動化のための指示

軽く修正の指示をした後、最終的に作成してもらったVBAは以下の通りです。

Sub CreateEstimate()
    Dim wsRequests As Worksheet, wsProducts As Worksheet, wsServices As Worksheet
    Dim wsEstimate As Worksheet
    Dim row As Long, productRow As Long, serviceRow As Long
    Dim totalPrice As Double
    
    ' シートを設定
    Set wsRequests = ThisWorkbook.Sheets("顧客要望リスト")
    Set wsProducts = ThisWorkbook.Sheets("商品リスト")
    Set wsServices = ThisWorkbook.Sheets("サービスリスト")
    ' 新しい見積りシートを作成
    Set wsEstimate = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    wsEstimate.Name = "見積り結果"
    
    ' 見積りシートのヘッダーを設定
    wsEstimate.Cells(1, 1).Value = "顧客ID"
    wsEstimate.Cells(1, 2).Value = "顧客名"
    wsEstimate.Cells(1, 3).Value = "見積り額"
    
    ' 顧客要望リストをループ
    row = 2 ' ヘッダーをスキップ
    Do While wsRequests.Cells(row, 1).Value <> ""
        Dim productId As String, serviceId As String
        Dim productQuantity As String, serviceQuantity As String
        
        productId = wsRequests.Cells(row, 3).Value
        productQuantity = wsRequests.Cells(row, 4).Value
        serviceId = wsRequests.Cells(row, 5).Value
        serviceQuantity = wsRequests.Cells(row, 6).Value
        
        ' 商品とサービスの見積りを計算
        totalPrice = CalculateTotal(productId, productQuantity, wsProducts) + _
                     CalculateTotal(serviceId, serviceQuantity, wsServices)
                     
        ' 結果を見積りシートに出力
        wsEstimate.Cells(row, 1).Value = wsRequests.Cells(row, 1).Value
        wsEstimate.Cells(row, 2).Value = wsRequests.Cells(row, 2).Value
        wsEstimate.Cells(row, 3).Value = totalPrice
        
        row = row + 1
    Loop
End Sub

Function CalculateTotal(idsStr As String, quantitiesStr As String, ws As Worksheet) As Double
    Dim ids As Variant
    Dim quantities As Variant
    Dim total As Double
    Dim i As Long, j As Long
    
    ' 文字列を配列に変換
    ids = StringToArray(idsStr)
    quantities = StringToArray(quantitiesStr)
    
    total = 0
    For i = LBound(ids) To UBound(ids)
        For j = 2 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
            If ws.Cells(j, 1).Value = ids(i) Then
                total = total + (ws.Cells(j, 3).Value * quantities(i))
                Exit For
            End If
        Next j
    Next i
    CalculateTotal = total
End Function

Function StringToArray(str As String) As Variant
    ' 不要な文字を削除
    str = Replace(str, "[", "")
    str = Replace(str, "]", "")
    str = Replace(str, "'", "")
    str = Replace(str, " ", "")
    
    ' カンマで分割して配列を返す
    StringToArray = Split(str, ",")
End Function

このVBAを実行すると、以下のように指示通りの処理が行われました。

見積り作成の自動化結果見積り作成の自動化結果


ChatGPTで見積もり作成を効率化する方法については、こちらの記事で詳しく解説しています。ぜひあわせてお読みください。
➡️ChatGPTを見積もり作成に活用する方法をわかりやすく解説!


ChatGPTを使ったVBA作成のメリット

VBAはExcelなどのMicrosoft Officeアプリケーションを自動化するためのプログラミング言語ですが、初心者にとってはその習得が困難に感じられることも少なくありません。
ChatGPTを活用する最大の利点は、「ユーザーが抱える具体的な問題点を言語化し、それらに応じたコードの生成をサポートする」ことにあります。

これにより、以下のような複数のメリットを享受することができます。

  1. アルゴリズムの理解促進
    ChatGPTは、問題を解決するためのアルゴリズムを示しながらコードを提供するため、プログラミングの学びが加速します。

  2. デバッグの助け
    コードのエラーを見つけるのは時間がかかる作業ですが、ChatGPTは問題点の特定とそれに対する解決策を提示します。

  3. 時間の節約
    繰り返されるルーチンワークからの解放、マクロの自動生成などにより、より重要な業務に時間を割くことが可能になります。

  4. 最新のプログラミング慣習の習得
    ChatGPTは最新のプログラミング慣習に準拠したコードを生成するため、モダンなVBAコーディングスキルを身につけることができます。

  5. 複雑なタスクへの挑戦
    ChatGPTのアシストにより、複雑な作業も段階的に学びながら実行できるため、自己啓発が促進されます。

【関連記事】
➡️ChatGPTをプログラミングに活用するコツを解説!対応言語や使用例も


ChatGPTを使ったVBA作成時の注意点

ChatGPTを使ってVBAを作成するにあたっては、メリットもある一方で、注意しておくべき点がいくつか存在します。以下のような注意点を理解した上で、ChatGPTを使ったVBAを作成するようにしてください。

セキュリティリスクの管理

ChatGPTによって生成されたVBAコードには、意図せずセキュリティの脆弱性が含まれている可能性があります。自動生成されたコードは、実行前に専門家によるレビューを受け、セキュリティリスクを最小限に抑えるべきです。

特に、外部からのデータ入力を扱う場合、SQLインジェクションやクロスサイトスクリプティングなどの脆弱性に対して注意が必要です。

【関連記事】
➡️ChatGPTのセキュリティリスクとは?実際の事例を踏まえて対策を解説

コンプライアンスとプライバシーの確保

企業や組織には、データ保護やプライバシーに関する規制やポリシーが存在します。ChatGPTを使用して業務自動化ツールを開発する際は、これらのコンプライアンス要件を遵守する必要があります。

特に、個人情報や機密情報を扱うコードを作成する場合、データの安全性とプライバシー保護のための対策を講じるべきです。
対策の一つとしては、オプトアウト設定があります。これは、ChatGPTに入力したデータを保存・学習させないようにするための機能です。

オプトアウト設定の概要や設定方法については、こちらの記事をご覧ください。
➡️ChatGPTのオプトアウトとは?データを学習させない為の設定方法!

コードの品質と保守性

ChatGPTが生成したVBAコードは、必ずしも最適化されているとは限らず、保守や将来の拡張が困難な場合があります。
生成されたコードを実務に適用する前に、コードの可読性、効率性、および拡張性を検討し、必要に応じてリファクタリングを行うことが重要です。

これにより、将来的な機能追加や修正が容易になり、長期的なメンテナンスコストを削減できます。

【関連記事】
➡️ChatGPTの問題点とは?その危険性や社会に与える影響を解説


まとめ

ChatGPTを利用したVBAコードの作成は、多くの業務プロセスを効率化し、作業の自動化を実現する強力な手段です。このガイドを参考に、ChatGPTの機能を最大限に活用し、自身の業務に合わせ、カスタマイズを行ってください。

適切な使用と注意点を理解し、安全かつ効果的にVBAコードを作成することで、業務の質と生産性を向上させることができます。

AI活用のノウハウ集「AI総合研究所」サービスご紹介資料

「AI総合研究所 サービス紹介資料」は、AI導入のノウハウがないというお客様にも使いやすい最先端のAI導入ノウハウを知れる資料です。

資料ダウンロード
監修者

坂本 将磨

Microsoft AIパートナー、LinkX Japan代表。東京工業大学大学院で技術経営修士取得、研究領域:自然言語処理、金融工学。NHK放送技術研究所でAI、ブロックチェーン研究に従事。学会発表、国際ジャーナル投稿、経営情報学会全国研究発表大会にて優秀賞受賞。シンガポールでのIT、Web3事業の創業と経営を経て、LinkX Japan株式会社を創業。

関連記事

AI導入の最初の窓口。

お悩み・課題に合わせて活用方法をご案内いたします。
お気軽にお問合せください。

AI総合研究所 Bottom banner

ご相談
お問い合わせは
こちら!