ChatGPTでExcelマクロ生成!生産性を2倍に!
Excel業務を効率化するときに便利なマクロ機能ですが、
いざ実務で使うとなると面倒で尻込みしちゃうという方も多いのではないでしょうか。
筆者自身マクロには悩まされており、楽して使いこなせないかと常々思っておりました。
そんな中、ChatGPTが人間に代わりプログラミングしてくれるらしいという噂を聞きました。
期待を胸に、ChatGPTにExcelマクロを生成させてみました。
目次
ChatGPTって何?
ChatGPTは2022年11月にOpenAIよりリリースされた対話型AIです。
MicrosoftのBingAIと並んで現在(2023/3/10)圧倒的な性能を持つ対話型AIとして全世界で注目されています。
詳しくは以下の記事で歴史、使い方、導入方法を紹介しております。
ChatGPT・BingAIとの遭遇記録 – メガメガネガメガネ (megamegane.com)
Excelマクロって何?
Excelマクロとは、Excel上での作業を記録し、自動的に実行してくれる機能です。
マクロを使うと同じ操作を何度も繰り返す必要がなくなり、業務効率化に役立ちます。
作業の記録は手動操作の記録(簡単マクロ)とプログラミングの2通りがありますが、汎用的に利用するには大なり小なりプログラミングが必要になります。
Excelマクロに頼りたい場面
Excel実務においてマクロに頼りたい場面の代表に複数ファイルに跨る処理があります。
例えばアンケートの回答をExcelファイルで1000件回収したとします。
これを集約するとき、全てのファイルを手動で開いて内容を転記していくのは面倒ですよね。
1件6秒と見積もっても1時間半はかかりますし、ほぼ確実にミスります。
こんな場合はマクロを組めば1分程度で処理を完了できますしミスも防げます。
マクロづくりに30分かけたとしても、生産性は3倍になりますね。
今回生成するマクロ:複数のExcelファイルの集約
今回は複数のExcelファイルから内容をコピー&ペーストして1つのファイルにまとめるマクロの生成をChatGPTにトライしてもらいます。
今回のテストにあたり、用意したExcelファイル3つを紹介します。
1.最初のブック:数表1個
2.2番目のブック:数表2個
3.3番目のブック:数表4個×2シート
(あえて表の横位置をずらす、文字と表を混ぜるなどちょくちょく嫌がらせをしています)
これら3つのファイルをあるフォルダにまとめておき、ChatGPTに生成させたマクロで集約用Excelファイルにコピー&ペーストさせていきます。
ChatGPTにマクロを生成してもらう
さあ、いよいよ本題に入っていきます。
ChatGPTにログインし、マクロの生成を指示します。
※ 以下minaによる指示とChatGPTの回答を再掲
mina:フォルダ “C:\excel_ai_test” にある全ての.xlsxファイルについて後述する処理を行うVBAマクロを作成ください。
なお、この処理を実行するExcelファイルは “C:\mina.xlsm” です。また “C:\mina.xlsm” にはワークシート “Sheet1″が存在しており、最初はセルA1が選択されています。
処理
1.フォルダ “C:\excel_ai_test” の.xlsxファイルを開き、値が入力されているセルを全て選択し、コピーします。
2.”C:\mina.xlsm”のシート”Sheet1″を開き、選択されているセルに値貼付を行います。
3.値貼付した範囲の一つ下のセルを選択します。
ChatGPT:
Sub CopyValuesFromAllFiles()
Dim folderPath As String
Dim fileName As String
Dim wb As Workbook
Dim ws As Worksheet
Dim lastRow As Long
' フォルダパスを設定
folderPath = "C:\excel_ai_test\"
' フォルダ内の全ての.xlsxファイルに対して処理を実行
fileName = Dir(folderPath & "*.xlsx")
Do While fileName <> ""
' ファイルを開く
Set wb = Workbooks.Open(folderPath & fileName)
' 値が入力されているセルを全て選択し、コピーする
wb.ActiveSheet.UsedRange.Copy
' "C:\mina.xlsm"のシート"Sheet1"を選択して、選択されているセルに値貼付を行う
Workbooks("mina.xlsm").Activate
Set ws = ActiveWorkbook.Sheets("Sheet1")
ws.Range("A" & ws.Cells.SpecialCells(xlCellTypeLastCell).Row + 1).PasteSpecial xlPasteValues
' 貼り付けた範囲の一つ下のセルを選択する
lastRow = ws.Cells.SpecialCells(xlCellTypeLastCell).Row
ws.Cells(lastRow + 1, 1).Select
' ファイルを閉じる
wb.Close SaveChanges:=False
' 次のファイルに進む
fileName = Dir()
Loop
End Sub
生成されたマクロを実行するが・・
数秒でマクロが生成されてしまいました。
恐ろしい性能です・・が、油断は禁物。ChatGPTはしれっと嘘をつくという噂もあります。
実際にこのコードを実行してみることにしました。
マクロの実行手順
マクロを実行したことのない方向けにマクロ実装~実行の手順を紹介します。
まず次の手順でmina.xlsmという名前のExcelファイルを用意します。
1.新規のExcelファイルを作成。
2.これを空の状態のまま保存。このときファイル名と種類は次の通りに。
・ファイル名:mina
・ファイルの種類:マクロ有効ブック(.xlsm)
mina.xlsmが用意出来たら、次の手順でマクロを作成~実行します。
1.空のマクロを作成
2.空のマクロを開き、ChatGPTのマクロを貼付
3.マクロを実行
実行結果
マクロを選択して実行すると、目まぐるしく画面が動き回り始めます。
そして数瞬ののちに・・
3つのエクセルファイルの情報が転記されてきました。
一発目でエラー無く動くとは驚きです。
しかしながら気になることもあります。
3番目のブックの2つ目のシートがきちんとコピー&ペーストされていなかったのです。
追加のマクロ生成
やっぱりAIは人間には敵わないのか。Excel職人はまだまだ安泰なのか。
…などと判断するのはまだ早計でした。
実は当初の私の指示には複数シートが存在する場合の処理について言及がありませんでした。
そこでChatGPTに追加の指示を出します。
※ 以下minaによる指示とChatGPTの回答を再掲
mina:フォルダ “C:\excel_ai_test” の.xlsxファイルに複数シートがある場合、すべてのシートに対して処理を行うようにマクロを変更できますか。
ChatGPT:
Sub CopyValuesFromAllFiles()
Dim folderPath As String
Dim fileName As String
Dim wb As Workbook
Dim ws As Worksheet
Dim lastRow As Long
' フォルダパスを設定
folderPath = "C:\excel_ai_test\"
' フォルダ内の全ての.xlsxファイルに対して処理を実行
fileName = Dir(folderPath & "*.xlsx")
Do While fileName <> ""
' ファイルを開く
Set wb = Workbooks.Open(folderPath & fileName)
' ファイル内のすべてのシートに対して処理を実行
For Each ws In wb.Worksheets
' 値が入力されているセルを全て選択し、コピーする
ws.UsedRange.Copy
' "C:\mina.xlsm"のシート"Sheet1"を選択して、選択されているセルに値貼付を行う
Workbooks("mina.xlsm").Activate
Set ws = ActiveWorkbook.Sheets("Sheet1")
ws.Range("A" & ws.Cells.SpecialCells(xlCellTypeLastCell).Row + 1).PasteSpecial xlPasteValues
' 貼り付けた範囲の一つ下のセルを選択する
lastRow = ws.Cells.SpecialCells(xlCellTypeLastCell).Row
ws.Cells(lastRow + 1, 1).Select
Next
' ファイルを閉じる
wb.Close SaveChanges:=False
' 次のファイルに進む
fileName = Dir()
Loop
End Sub
再度のマクロ実行
再び生成されたマクロを実行しますと・・
3つ目のブックの2つ目のシートもコピー&ペーストされました。
ChatGPTによるマクロ生成で意識する事
ChatGPTはExcelマクロを一瞬で生成してくれることが判明しました。
面倒なExcel作業も、ChatGPTにマクロを書かせれば生産性が大きく向上しますね。
ただ、注意点もあります。
ChatGPTへの生成指示は明確でなければ狙い通りのマクロが生成されない場合があります。
今回のテストでも最初のトライでは2シート目がコピペされませんでしたね。
では明確な指示をするにはどのような点を押さえるべきでしょうか。
参考までに今回の生成時に意識したポイントを紹介します。
①固有名詞を示すこと
今回の事例では フォルダ “C:\excel_ai_test”、Excelファイル “C:\mina.xlsm” といった固有名詞をきちんと示しました。これにより生成されたマクロにもこれらが反映され、即実行できるものになりました。また手順を指示する際に対象を特定できるのは都合がいいです。仮名でもいいのでマクロに登場するファイルや場所にはきちんと名前をつけてあげるとよいですね。
②前提と手順を漏れなく明確に説明すること
意図通りの結果にならなかった場合、説明に漏れや飛躍がある可能性があります。指示内容と生成されたマクロの挙動を見直し、ChatGPTに補足してあげるとよさそうです。
自動化の民主化
ChatGPTによるマクロ生成、いかがでしたか。
たかだかExcelの自動化で・・と思われるかたもいるかもしれませんが、これは入り口に過ぎません。
例えばVBAマクロではOutlookなどのMicrosoft製品の操作もできます。うまくこれを組めれば簡易なCRMやMAのようなシステムを構築できてしまいます。
また、Pythonなどの他言語でもChatGPTによるコーディング例は確認されています。
これまで一部の人間に与えられていた自動化が民主化された結果生み出される価値は計り知れません。
ChatGPTの実務応用は現在進行形です。
これからも面白いネタがあれば発信していきたいと思います。