【2025年9月】
先日の「VBA高速化と可読性」セミナーで、受講された赤坂さんと、AIについて雑談していまして。「マクロの流れ(フロー)を調べられると便利なんだけどね」みたいな話になりました。たとえば、こういうことです。
Option Explicit Sub Main() Dim i As Long For i = 1 To 100 Debug.Print Cells(i, 1) Next i Call Macro2 If chkValue(Range("A1").Value) Then Debug.Print "OK" End If End Sub Sub Macro2() MsgBox "OK" Call Macro3 End Sub Sub Macro3() Dim A As String A = Range("A1") If chkValue(A) Then Debug.Print "NG" End If End Sub Function chkValue(A As String) If A = "1" Then chkValue = True Else chkValue = False End If End Function
これは、標準モジュール「Module1」です。最初の"Sub Main"を実行すると、For Nextループの後で"Sub Macro2"を呼び出し、その"Sub Macro2"から"Sub Macro3"を呼び出します。呼び出された"Sub Macro3"内では"Function chkValue"を使って終わります。"Sub Macro3"が終わると最初の"Sub Main"に戻り、ここでもまた"Function chkValue"を呼び出します。マクロの内容は、思いっきり適当です。意味など皆無です。こんな状況で「Sub Mainを実行したら、どんなプロシージャが使われるのか?」って話です。実務では、もっと複雑なんですけど、これの解析ってモジュール全体をプロンプトに書かないとできません。ブラウザでGeminiとかChatGPTやCopilotなどを使っているのでしたら、添付ファイルを送信できる場合もあります。しかし、Excelのサイドペインで入力するプロンプトに、もっと超長いモジュール全体をコピペするのは、いささか無理を感じます。試してみましたが、Excelのサイドペインで使えるAIチャットでは、添付ファイルを送信できませんでした。
で、話をしていて、フト気づきました。モジュール全体をWordの文書に貼り付けて、WordのAIで解析できるんじゃね?って。ExcelだろうがWordだろうが、使われるAI(Copilot)は同じです。Wordから使うAIでも、Excel VBAを解析できるのでは?と。おもしろそうなので、やってみました。
すみません、Wordは使ったことがないのでw 設定とか見せ方とか分かりません。とりあえず、新規文書にモジュール全体をコピーしました。
この文書は、Excel VBAの標準モジュールです。Sub Mainを実行したとき、どのプロシージャが呼び出されるかの流れを説明してください。
結果は、以下のとおりです。
文書内のコードに基づいて、Sub Mainを実行したときのプロシージャの流れを説明します。 Sub Mainが実行されると、まず変数iが宣言されます 1。 次に、Forループが1から100までの範囲で実行され、各ループでセル(i, 1)の値がデバッグ 出力されます 1。 ループが終了すると、Macro2が呼び出されます 1。 Macro2内では、メッセージボックスが表示され、その後Macro3が呼び出されます 1。 Macro3内では、変数AがセルA1の値で設定され、chkValue関数が呼び出されます 1。 chkValue関数は、引数Aが"1"であるかどうかをチェックし、結果に応じてTrueまたは Falseを返します 1。 chkValue関数の結果がTrueの場合、デバッグ出力に"NG"が表示されます 1。 このようにして、Sub Mainを実行すると一連のプロシージャが順次呼び出されます。
"Sub Main"の最後で、もう一度"Function chkValue"が呼び出されるところだけ記述がありませんが、それでも解析してくれました。「[直して]元データに原因があるマクロ」にも書きましたが、エラーの原因をAIで調べるときなど、プロシージャ全体や、下手したらモジュール全体をプロンプトに書かないと、原因が判明しないケースもあります。数十行から数百行のコードをプロンプトにコピペするくらいなら、Wordを利用する手もありますね。試したらできたので、ご報告です。
余談ですけど、WordのAIは「自動保存」がオフでも使えるんですね。Excelで「自動保存」が必須なのは、何が理由なんだろ?