VBAクッキング⑤ 生成AIにVBAクッキングキットを覚えてもらう ~コードを書くから設計を考えるへ~

前回の記事では、

VBAクッキングキット

を利用して、実際に部品をExcelへ取り込み、呼び出して使う方法を紹介しました。

ここまで学んできたことで、

  • 転記マッピングシート
  • モジュール
  • Function
  • CALL
  • VBAクッキングキット

といった仕組みが少しずつ見えてきたのではないでしょうか。

ただし、

ここで新たな疑問が出てきます。

「結局、生成AIはどこで活用するの?」

ということです。

VBAクッキングの目的は、

コードをたくさん覚えることではありません。

また、

部品をたくさん暗記することでもありません。

目指しているのは、

「やりたいこと」を設計し、生成AIと一緒に業務ツールを作ることです。

そのためにVBAクッキングキットでは、

Excelで利用する部品と同じ内容を、

  • MDファイル
  • Wordファイル

としても提供しています。

生成AIにそれらを読み込ませることで、

人間と生成AIが同じ部品を共有できるようになります。

今回は実際に、

転記マッピングシートの画像を生成AIへ渡し、

どのように業務ツールを作っていくのかを見ていきましょう。

これまでのおさらい

第1回 なぜ生成AIにVBAを書かせても上手くいかないのか

生成AIに聞いただけではVBAはうまく書けないケースが多いです。これは「設計」料理で言えばレシピがないからという話をさせて頂きました。

第2回 転記マッピングシートパターン

転記処理はせっかくコードを書いても、必ず転記元や転記先の変更がともないます。実はマッピング表を事前にシートを用意しておけば、コードを変更しなくても都度変更できます。

第3回 なぜ短いコードで動くのか?~はじめての部品化~

CALLや関数などの、短いコードで他の複数コードを呼び出す仕組みを体感して頂きました。

第4回 VBAクッキングキットを導入してみよう

複数の部品コードが詰まったBASファイルをエクセルにインポートしました。

ここから生成AIにもファイルを読み込ませます。

なぜ生成AIに読ませるのか

今、エクセルファイルでは部品を呼び出せるようになっています。

部品を呼び出しながらコードを組み立てるのは、未経験者の方には難しいと思います。

ただ生成AIにコードの書き方を聞いても、部品の事は全く考慮されていません。

ですので、生成AIにもMDファイル、もしくはWORDファイルを読み込ませておきます。

こうしておけば、細かくやりたいことを説明しなくても、ある程度の処理パターンを生成AIに説明すれば大丈夫です。

MDファイルを読み込む

生成AIにアップロード

ChatGPT、CopilotあるいはClaude Codeでもいいです。

生成AIにMDファイル、もしくはWORDファイルを下の画像のように読み込みましょう!

転記処理用テストデータの作成・準備

転記元のデータと転記先のデータをセル単位で対になるように、複数ご準備ください。

例えば、シート1:A1セル ⇒シート2:B2セル、シート1:B1セル ⇒シート2:B3セル、みたいに感じです。

転記元サンプル
転記先サンプル

そして、別シートに下の画像のようなマッピング表をご準備ください

*ファイルは列位置が数値で表示されるR1C1形式に設定

開始行や列位置の設定は自由です。

但し、列の順番は以下のように固定とさせてください

0:名称(こちらは省いても構いません)

1:転記元シート名

2:転記行位置

3:転記元列位置

4:転記先シート名

5:転記先位置

6:転記先列位置

マッピング表の書き方がよくわからない、という方はサンプルファイルを記事の最後の方に添付していますので、ご参考にしてください。

転記処理用コードを依頼

今回、書きたいコードはマッピング表をもとに転記処理を行うVBAコードを書くことです。

上の画像のように、マッピング表のスクショもアップロードしましょう!

以下が実際の依頼文です。

アップロードした画像はマッピングという名称のシートの画像です。画像内の表はマッピング表であり、転記元と転記先が記してあります。このマッピング表を基に、転記処理を行うVBAコードを書いてください。

依頼する際の注意点

依頼する際の注意点は以下です。

・マッピング表の開始位置と終了位置

 マッピング表の範囲が転記用部品の引数(材料)になります。スクショ画像内には開始行・開始列・終了行・終了列が含まれるようにしましょう。

・シート名の表現には注意しましょう

 シート名が転記用部品の引数(材料)になります。例えば、実際は「マッピング」というシート名の場合、マッピングシートと表現すると「マッピングシート」を引数として設定します。ですのでシート名の表現は、例:「マッピングという名称のシート、あるいは「シート名:マッピング」というように明確に表現しましょう。

ちなみに、以下が、今回出力したコードです。(テスト済み)

出力コード

Sub 大本_セル転記()

    Dim errNum As Long
    Dim errDesc As String

    On Error GoTo MyError

    セル転記実行

    Exit Sub

MyError:

    errNum = Err.Number
    errDesc = Err.Description

    If errNum - vbObjectError >= 1000 _
    And errNum - vbObjectError < 2000 Then

        MsgBox "エラー番号 " & _
               (errNum - vbObjectError) & vbCrLf & _
               errDesc

    Else

        MsgBox "VBAエラー番号 " & _
               errNum & vbCrLf & _
               errDesc

    End If

End Sub

Sub セル転記実行()

    Dim rngMap As Range

    'マッピング表取得
    Set rngMap = 部品_範囲設定_行可変( _
                    ThisWorkbook, _
                    "マッピング", _
                    2, _
                    1, _
                    7, _
                    2)

    If rngMap Is Nothing Then
        MsgBox "マッピング表にデータがありません"
        Exit Sub
    End If

    '転記実行
    If 部品_転記_セル単位( _
            ThisWorkbook, _
            ThisWorkbook, _
            rngMap, _
            2, _
            3, _
            4, _
            5, _
            6, _
            7) = False Then

        MsgBox "転記に失敗しました"
        Exit Sub

    End If

    MsgBox "転記が完了しました"

End Sub

出力されるコードを使う際の注意点

名前の重複

以下の画像のようなエラーメッセージが出ることがあります。

この場合、同じ部品名の部品がファイル内に重複している可能性があります。こちらはどちらかを削除してください。

もしくは部品名の前に、「Module名」+「.」を付けてみてください。

部品名の選択(今回のケース)

インポートしたBASファイル内に、似たような部品があります

部品_範囲設定_固定

部品_範囲設定_行可変

指定しなければ、恐らく「部品_範囲設定_行可変」の方が使われます。

制御用のプロシージャーの追加

生成AIからは2つのプロシージャーが出力される可能性が高いです。

1.呼び出し用プロシージャー(2を呼び出す)

2.部品を含む呼び出されるプロシージャー(1に呼び出される)

1の方にはエラーが起こった時のための制御用のコード(On Error)が含まれています。

*On Errorについては別の記事で詳細を解説します。

Sub 大本_セル転記()

    Dim errNum As Long
    Dim errDesc As String

    On Error GoTo MyError

    セル転記実行

    Exit Sub

*上記は全コードではありません

何故1のプロシージャーが出力されるというと、設計をしやすくするためです。

料理で考えると「材料を切りそろえる」「炒める」「煮込む」「盛り付ける」などの複数工程があります。

その複数工程を人間が制御するわけですが、1のプロシージャーは複数工程が作成されていくことを想定した「制御」

用のプロシージャーです。

今回は転記処理だけですが、業務ツールを作ることを考えるとシートのコピーやファイルを開くなどの工程を加えていくことが想定されます。

1の調整用のプロシージャーがあれば、「プロシージャー2」「プロシージャー3」「プロシージャー4」を1のプロシジャーから呼び出し、エラー処理を大本で行えることになります。

ただ、2の呼び出されるためのプロシージャーでも事が足ります。

後から単独のプロシージャーを追加した後、最後に呼び出し元のプロシージャーを追加するのもOKです。

つまり、設計次第です。

実行ボタン

作成したコードを実行する際は、ワークシートにボタンを追加しましょう!

まず、上の画像の「開発タブ」⇒「挿入」⇒「ボタン(一番左上)から作成します。

次に、実際にボタンを作成する際は、マクロ名(プロシージャー名)を紐づけましょう!

(補足)

もし、以下の画像のように、黄色のマークが出て処理が止まった場合は、リセットボタンを押してください。

生成AIは何を考えているのか

実は生成AIはただコードを書いているわけではありません。

MDファイル(WORDファイル)内には、部品のコードだけでなく、以下の内容も含まれています。

  • 部品間の依存関係(関連性)やシートとの依存関係(関連性)
  • 前提条件
  • エラー処理の考え方
  • 禁止事項他

これらの情報を踏まえ、以下の流れでコードを生成します。

マッピング表

↓

使用部品選択

↓

引数決定

↓

コード生成

つまり、ただコードをやみくもに考えるのではなく、部品間やシート間の設計を考慮してコードを書いています。

ここが今回の記事の一番のポイントです。

VBAクッキングの本当の目的

このシリーズは、VBAを書ける人を育てるのが目的ではありません。

業務改善のアイデアを
生成AIと一緒に実現できる人を増やしたい。

そのために、

設計

↓

パターン

↓

部品

↓

生成AI

という順番で紹介してきました。

ここで今回の記事の内容を振り返ってみてください。

全くコードを書いていないですよね。

どちらかというと、マッピング表を設定するのが大変だったと思います。

つまり、設計の方に重点を置いていたということです。

逆に人間が設計をしていれば、生成AIも正確なコードを書きやすいです。

次のシリーズ予告

これまでの5回で、VBAの基礎や部品化の基礎や生成AIへの依頼パターンが身についてきたと思います。

次回からも、頻出の処理パターンについて紹介していきたいと思います。

マスタ検索パターン

一時シートへの抽出パターン

テンプレートシートの活用パターン

などです。(なお、変更もあり得ます)

楽しみにしていてください。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です