概要
この記事では、ChatGPTとVBAを組み合わせ、効率的な業務改善を実現するための実践的な方法を提案したいと思います。
VBAはエクセルやWordなどのMicrosoft Office製品に組み込まれたプログラミング言語であり、これを活用できれば作業の自動化により業務改善につながることはみなさんご存じのとおりです。ただしプログラムというとなかなか自分で作成するのが難しいと感じている方が多いのではないかと思います。
ここでは、VBAでコード(プログラム)作成などしたことがない人を対象とします。私も使ったことがありませんでしたが、ChatGPTの高いVBAコード作成能力を活かしながら、業務にも利用できるのではないかと考えています。
基本的な知識から始め、実際のコーディングを通じて業務改善にどのように貢献できるかを説明して行きたいと思います。
ChatGPTとは何か?
- ChatGPTの概要
- ChatGPTの特徴と利用シーン
ChatGPTの概要
ChatGPT(Generative Pre-trained Transformer)は、OpenAI社が開発した自然言語処理モデル(人工知能)によるチャットサービスです。ChatGPTは、インターネット上の膨大なデータから言葉同士の関連性や文章構造などを学習しています。それにより、ユーザーが投げかけた質問や指示(プロンプト)に対して自然な文章で回答することができます。ChatGPTは、対話に特化した言語モデルであり、自然な会話が行えることが特徴です。
ChatGPT3.5は、2022年11月に無料でリリースされ、わずか2ヶ月ほどで世界のユーザー数が1億人を突破しました。さらに高性能なChatGPT4が2023年3月にアップデートされています。こちらは有料(20$)ですが、2023年秋には画像認識機能が加わったChatGPT4Vが公開され、まさに日進月歩で進化しています。
ChatGPTの特徴と利用シーン
ChatGPTの特長としてよく挙げられるのは高度な文章生成能力ですが、ChatGPTはプログラミング言語についても非常に高い能力を持っていて、広範なプログラミング言語の理解と生成が特長として挙げられます(下表参照)。
この特性により、ChatGPTはプログラミングの質問に対して高い精度で回答し、複雑なコードやプログラムの生成が可能です。ChatGPTは質問応答、文章生成、コーディングサポートなど、多岐にわたる利用シーンに適しています。
表.ChatGPTが扱えるプログラミング言語
https://chat.openai.com/ ChatGPTはOpen AIのサイトで登録できます。
【その2】ChatGPTとは?使い方や機能、活用方法を徹底解説 – ライフ&ジョブブログ (life-and-job.com)
VBA概要
- VBAとは
- 言語の特徴
- エクセルやWordとの連携方法
VBAとは
Visual Basic for Applications(VBA)は、Microsoftが開発したプログラミング言語で、主にMicrosoft Office製品と統合されています。VBAは、EXCELやWord、Accessなどのアプリケーション内で使用され、これらのアプリケーションの機能を拡張したり、自動化したりするために利用されます。VBAはイベント駆動型の言語と言われており、ユーザーの操作や特定の条件に応じてコードが実行されます。
EXCELを使ったことのある方なら、マクロという言葉を聞いたことがある、あるいは実際使ったことがあると思います。EXCELの操作を実際に行ないながら記録させることで、VBAのコード(プログラム)が自動生成でき、定型業務を自動化、省力化するものです。
言語の特徴
VBAは易学性と柔軟性が特徴の言語と言われます。Basic(ビジュアル ベーシック)系の言語であるため、シンプルな構文やわかりやすい記述が可能です。VBAの文法は英語に近く、初学者でも理解しやすい構造を持っています。
EXCELとの連携方法
VBAは特にEXCELとの親和性が高く、EXCELのオブジェクトモデルにアクセスすることができます。これにより、セルの操作、データの処理、グラフの生成などEXCELの様々な機能をVBAを使って自動化できます。VBAコードはEXCELファイル内に埋め込んで保存することができ、他のユーザーと共有する際にも非常に便利です。VBAを使用することで、EXCELの操作を単なるデータ入力以上のものにし、効率的な業務プロセスを構築できます。
Excelの魔法を解き放つ!VBA入門:ステップバイステップガイド – ライフ&ジョブブログ (life-and-job.com)
EXCEL以外のMicrosoftアプリケーションへの活用
VBAはEXCELだけでなく、他のMicrosoftアプリケーションにも幅広く活用できる多機能な言語です。以下に、VBAがどのようにして他のアプリケーションと連携し、活用されるかについて解説します。
Word(ワード)
VBAを使用することで、Word文書の自動生成、書式設定の自動化、文書内のテキスト検索や置換、表の操作などが可能です。例えば、契約書や報告書のテンプレートを自動的に生成したり、特定のキーワードを検索して強調表示するなどの処理が行えます。
Outlook(アウトルック)
Outlookでは、VBAを利用して自動的なメールの作成や送信、受信メールの処理、カレンダーの操作などが可能です。スケジュールに基づいて自動でメールを送信したり、特定の条件に応じて受信メールを整理するスクリプトを作成することができます。
PowerPoint(パワーポイント)
PowerPointにおいても、VBAを利用してプレゼンテーションの自動生成、スライドの編集、グラフの挿入、スライドのフォーマット設定などが可能です。これにより、大量のデータから自動的にプレゼンテーションを生成することができます。
その他のアプリケーション
VBAはこれらの主要なMicrosoftアプリケーションだけでなく、他のアプリケーションにも応用できます。VBAがサポートされているアプリケーションでは、そのアプリケーションのオブジェクトモデルにアクセスして、自動化やカスタマイズを行うことが可能です。
これにより、VBAはMicrosoft Office全体で一貫性のあるプログラミング環境を提供し、業務プロセス全体を効率化することが可能となります。
ChatGPTとVBAの連携メリット
- ChatGPTがもたらす柔軟性と問題解決力
- VBAとの組み合わせで実現する業務改善のポイント
ChatGPTがもたらす柔軟性と問題解決力
ここから実際にVBAを使ってみたいと思います。
例1:簡単なコード生成
ChatGPTに以下の質問をしました。こんな漠然とした質問ですが、「データの自動フィルタリング」「セルの結合解除」「シートのコピーや移動」「メールの自動送信」という4例をコードを付けて提案してくれました。
すべてを記載しませんが、「シートのコピーや移動」のコードは以下の通りです。VBAを知っている方は分かると思いますが、ちゃんと動きます。分からない方は、試してみてください。
Sub シートのコピーや移動()
' シートのコピー
Sheets("Sheet1").Copy After:=Sheets("Sheet1")
' シートの移動
Sheets("Sheet1").Move After:=Sheets("Sheet2")
End Sub
ChatGPTの能力の高さに驚きます。VBA素人の私は最初非常に感激しました。ちょっとした質問からこれだけの例を挙げてくれます。このようなところから実務に繋がるアイデアが浮かぶきっかけが生まれると思います。
ただ、このくらいの操作であれば、わざわざVBAでプログラムにしなくても、手操作で行なった方が早いですよね。であれば、もっと高度なプログラムを作成させてみたい。
例2:難しいコード生成
そこで以下のようなデータ集計のコード生成を指示してみます。実務では、データファイル(ブック)が違っていたり、Sheetの数が多かったりして、より労力がかかる集計作業が多いと思いますが、ここではある程度シンプルな内容としています。
【プロンプトエンジニアリングに学ぶ】上手なAIとの対話や質問の仕方 – ライフ&ジョブブログ (life-and-job.com)
最初の生成コード
生成されたコードは以下の通りです。素人なので分からないですが、見た感じ完璧に見えます。さっそくこのコードを入力して実行してみました。
Sub 患者数集計()
' 変数の宣言
Dim wsSource As Worksheet
Dim wsOutput As Worksheet
Dim lastRow As Long
Dim lastCol As Long
Dim i As Long, j As Long
Dim monthDict As Object
Set monthDict = CreateObject("Scripting.Dictionary")
' シートの設定
Set wsOutput = Sheets("Sheet4")
' シートごとに処理
For Each wsSource In Worksheets(Array("Sheet1", "Sheet2", "Sheet3"))
' 最終行と最終列を取得
lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row
lastCol = wsSource.Cells(1, wsSource.Columns.Count).End(xlToLeft).Column
' データの読み取りと集計
For i = 2 To lastRow
Dim dateValue As Date
dateValue = wsSource.Cells(i, 1).Value
Dim monthKey As String
monthKey = Format(dateValue, "yyyy-mm")
If Not monthDict.Exists(monthKey) Then
monthDict(monthKey) = CreateObject("Scripting.Dictionary")
End If
If Not monthDict(monthKey).Exists(wsSource.Name) Then
monthDict(monthKey)(wsSource.Name) = 0
End If
monthDict(monthKey)(wsSource.Name) = monthDict(monthKey)(wsSource.Name) + wsSource.Cells(i, 2).Value
Next i
Next wsSource
' 集計結果を出力
wsOutput.Cells.Clear
' ヘッダーの書き込み
wsOutput.Cells(1, 1).Value = "年月"
wsOutput.Cells(1, 2).Value = "東京都"
wsOutput.Cells(1, 3).Value = "神奈川県"
wsOutput.Cells(1, 4).Value = "埼玉県"
' データの書き込み
i = 2
For Each monthKey In monthDict.Keys
wsOutput.Cells(i, 1).Value = monthKey
j = 2
For Each wsName In Array("Sheet1", "Sheet2", "Sheet3")
If monthDict(monthKey).Exists(wsName) Then
wsOutput.Cells(i, j).Value = monthDict(monthKey)(wsName)
Else
wsOutput.Cells(i, j).Value = 0
End If
j = j + 1
Next wsName
i = i + 1
Next monthKey
End Sub
これを実行すると以下のようなメッセージが出てしまいました。
何を言っているのか全然分かりません!
分からないままに、以下のようにChatGPTへ知らせると、すぐ修正してくれました。
修正後のコード(完成版)
下が修正したコードです。26行目が修正されています。これだけ修正すれば動くのか・・・試してみます。
Sub 患者数集計()
' 変数の宣言
Dim wsSource As Worksheet
Dim wsOutput As Worksheet
Dim lastRow As Long
Dim lastCol As Long
Dim i As Long, j As Long
Dim monthDict As Object
Set monthDict = CreateObject("Scripting.Dictionary")
' シートの設定
Set wsOutput = ThisWorkbook.Sheets("Sheet4")
' シートごとに処理
For Each wsSource In ThisWorkbook.Worksheets(Array("Sheet1", "Sheet2", "Sheet3"))
' 最終行と最終列を取得
lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row
lastCol = wsSource.Cells(1, wsSource.Columns.Count).End(xlToLeft).Column
' データの読み取りと集計
For i = 2 To lastRow
Dim dateValue As Date
dateValue = wsSource.Cells(i, 1).Value
Dim monthKey As Variant ' Variant型に変更
monthKey = Format(dateValue, "yyyy-mm")
If Not monthDict.Exists(monthKey) Then
Set monthDict(monthKey) = CreateObject("Scripting.Dictionary")
End If
If Not monthDict(monthKey).Exists(wsSource.Name) Then
monthDict(monthKey)(wsSource.Name) = 0
End If
monthDict(monthKey)(wsSource.Name) = monthDict(monthKey)(wsSource.Name) + wsSource.Cells(i, 2).Value
Next i
Next wsSource
' 集計結果を出力
wsOutput.Cells.Clear
' ヘッダーの書き込み
wsOutput.Cells(1, 1).Value = "年月"
wsOutput.Cells(1, 2).Value = "東京都"
wsOutput.Cells(1, 3).Value = "神奈川県"
wsOutput.Cells(1, 4).Value = "埼玉県"
' データの書き込み
i = 2
For Each monthKey In monthDict.Keys
wsOutput.Cells(i, 1).Value = monthKey
j = 2
For Each wsName In Array("Sheet1", "Sheet2", "Sheet3")
If monthDict(monthKey).Exists(wsName) Then
wsOutput.Cells(i, j).Value = monthDict(monthKey)(wsName)
Else
wsOutput.Cells(i, j).Value = 0
End If
j = j + 1
Next wsName
i = i + 1
Next monthKey
End Sub
下のように結果が表示されました。各都県とも月ごとに集計されています。これは凄いです!
この例は3つのシートだけですが、47都道府県に増えても同じように集計することができるはずで、数が増えるほどその効果を発揮することはお分かりになると思います。
このようにChatGPTは非常に柔軟なアイデアとコードを提示し、またその問題解決にも柔軟に対応してくれます。
VBAとの組み合わせで実現する業務改善のポイント
このように素人でもChatGPTを利用しながら、VBAを利用した業務改善へつながる可能性があることを紹介しました。さらにそれを推し進めるためのポイントが何かを探っていきたいと思います。
ここまでのまとめ
ChatGPTとVBAの組み合わせによる業務改善のポイントを紹介しました。
- ChatGPTの柔軟性と問題解決力
- ChatGPTは高度な文章生成能力を持ち、質問に対して自然な文章で回答することができる。
- ChatGPTはプログラミング言語にも精通しており、VBAに関する質問に高精度で応答する。
- VBAの特徴と連携方法
- VBAはMicrosoft Office製品に統合されたプログラミング言語で、特にEXCELとの親和性が高い。
- VBAはシンプルな構文や英語に近い文法を持ち、EXCELの操作を自動化し効率的な業務プロセスを構築するのに適している。
- VBAの他アプリケーションへの活用
- VBAはEXCELだけでなく、Word、Outlook、PowerPointなど他のMicrosoftアプリケーションにも応用可能。
- VBAを使用してこれらのアプリケーションの自動化やカスタマイズが可能。
- ChatGPTとVBAの連携メリットの実例
- ChatGPTを使用してVBAコードを生成する際、簡単なコード生成や難しいコード生成が可能。
- ChatGPTが提示したコードをVBAで実行する際、修正が必要な部分もChatGPTに指摘すると迅速に修正され、効果的なコードが生成された。
- 具体的な例:患者数集計
- ChatGPTによって生成されたVBAコードを元に、患者数の月ごとの集計を実施。
- ChatGPTが提示したコードは初回にエラーがあり、ChatGPTにエラー箇所を指摘すると修正が加えられ、正常に動作するコードが生成された。
- 生成されたコードによって、複数のシートからデータを取得して都道府県ごとの月次集計が自動化された。
「ChatGPTとVBAの連携メリット」を通じて、ChatGPTの柔軟性とVBAの強力な機能が組み合わさり、効率的な業務プロセスの改善が可能であることが示されました。
次回は、もう少し複雑な業務課題を例に、解決するためのアプローチについての考察と、より効果的にChatGPTとVBAを連携活用しながら業務改善を進めるためにはどうすれば良いか考えていきたいと思います。
コメント