この記事のポイント
- 本記事では、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 Applications(VBA)は、Microsoft Office製品を拡張し、カスタマイズするためのプログラミング言語です。Excel、Word、PowerPointなどのアプリケーションに組み込まれており、ユーザーがマクロを記述して作業の自動化や効率化を図ることができます。VBAを使用することで、複雑な計算、データ処理、Officeアプリケーション間の連携などを実現することが可能になります。
ChatGPTでVBAを作成する方法
ChatGPTを使ってVBAを作成する際に準備しておくべき事柄は、以下の通りです。
-
要件定義: 自動化したいタスクの詳細を明確にします。何を実現したいのか、どのような結果が期待されるのかを理解することが重要です。
-
Excelマクロの設定: 以下の手順に従って、マクロの設定をして下さい。
Excelでマクロを有効化する必要があります。Excelを開いて画像赤枠部分の適当な場所で右クリックし、「リボンのユーザー設定」を押してください。
マクロの有効化手順1
すると、このような画面が表示されるので「開発」にチェックを入れて、「OK」を押してください。
マクロの有効化手順2
これでマクロの有効化が完了しました。
実際のステップ
以下のステップを踏んでいけば、ChatGPTを活用してVBAを作成することができます。
ステップ1: プロンプトの設定
ChatGPTに対して、具体的な指示を提供します。これには、自動化したいタスクの説明、期待する入力と出力の形式、任意の特定条件などが含まれます。
ステップ2: コード生成
ChatGPTが提案するVBAコードを検討します。必要に応じて、提案されたコードを調整し、カスタマイズすることで、より具体的な要件に合わせます。
ステップ3: コードのテストと実装
提案されたコードをOfficeアプリケーションに実装し、期待通りに動作するかテストします。問題があれば、デバッグを行い、修正します。
実際にChatGPTを使ってVBAを作成してみた
ChatGPTを使ってVBAを作成する状況は多岐に渡ります。今回は、いくつか状況を想定して、実際にChatGPTを使ってVBAを作成していきたいと思います。
なお、作成してもらったVBAを実行するには、以下のような手順を実行してください。
まずは、開発タブ→VisualBasicを選択してください。
VBA実行方法その1
次に、挿入タブ→標準モジュールを選択してください。
VBA実行方法その2
すると、以下のような画面が表示されるので、生成したVBAをコピペした後に、赤枠で囲んだ部分を使って実行してください。
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を活用する最大の利点は、「ユーザーが抱える具体的な問題点を言語化し、それらに応じたコードの生成をサポートする」ことにあります。
これにより、以下のような複数のメリットを享受することができます。
-
アルゴリズムの理解促進
ChatGPTは、問題を解決するためのアルゴリズムを示しながらコードを提供するため、プログラミングの学びが加速します。 -
デバッグの助け
コードのエラーを見つけるのは時間がかかる作業ですが、ChatGPTは問題点の特定とそれに対する解決策を提示します。 -
時間の節約
繰り返されるルーチンワークからの解放、マクロの自動生成などにより、より重要な業務に時間を割くことが可能になります。 -
最新のプログラミング慣習の習得
ChatGPTは最新のプログラミング慣習に準拠したコードを生成するため、モダンなVBAコーディングスキルを身につけることができます。 -
複雑なタスクへの挑戦
ChatGPTのアシストにより、複雑な作業も段階的に学びながら実行できるため、自己啓発が促進されます。
【関連記事】
➡️ChatGPTをプログラミングに活用するコツを解説!対応言語や使用例も
ChatGPTを使ったVBA作成時の注意点
ChatGPTを使ってVBAを作成するにあたっては、メリットもある一方で、注意しておくべき点がいくつか存在します。以下のような注意点を理解した上で、ChatGPTを使ったVBAを作成するようにしてください。
セキュリティリスクの管理
ChatGPTによって生成されたVBAコードには、意図せずセキュリティの脆弱性が含まれている可能性があります。自動生成されたコードは、実行前に専門家によるレビューを受け、セキュリティリスクを最小限に抑えるべきです。
特に、外部からのデータ入力を扱う場合、SQLインジェクションやクロスサイトスクリプティングなどの脆弱性に対して注意が必要です。
【関連記事】
➡️ChatGPTのセキュリティリスクとは?実際の事例を踏まえて対策を解説
コンプライアンスとプライバシーの確保
企業や組織には、データ保護やプライバシーに関する規制やポリシーが存在します。ChatGPTを使用して業務自動化ツールを開発する際は、これらのコンプライアンス要件を遵守する必要があります。
特に、個人情報や機密情報を扱うコードを作成する場合、データの安全性とプライバシー保護のための対策を講じるべきです。
対策の一つとしては、オプトアウト設定があります。これは、ChatGPTに入力したデータを保存・学習させないようにするための機能です。
オプトアウト設定の概要や設定方法については、こちらの記事をご覧ください。
➡️ChatGPTのオプトアウトとは?データを学習させない為の設定方法!
コードの品質と保守性
ChatGPTが生成したVBAコードは、必ずしも最適化されているとは限らず、保守や将来の拡張が困難な場合があります。
生成されたコードを実務に適用する前に、コードの可読性、効率性、および拡張性を検討し、必要に応じてリファクタリングを行うことが重要です。
これにより、将来的な機能追加や修正が容易になり、長期的なメンテナンスコストを削減できます。
【関連記事】
➡️ChatGPTの問題点とは?その危険性や社会に与える影響を解説
まとめ
ChatGPTを利用したVBAコードの作成は、多くの業務プロセスを効率化し、作業の自動化を実現する強力な手段です。このガイドを参考に、ChatGPTの機能を最大限に活用し、自身の業務に合わせ、カスタマイズを行ってください。
適切な使用と注意点を理解し、安全かつ効果的にVBAコードを作成することで、業務の質と生産性を向上させることができます。