VAクリップ:すべてのVBAモジュールを一括で入出力する(ワード/エクセルVBA)

サンプル

VBAの作成や修正に生成AIを使う機会が増えてきましたね。

そうですね。でも、修正を行うときに、VBAのコードをAIにコピー&ペーストするのが面倒です。

なるほど。VBEでは、モジュールを一つずつしかエクスポートできませんからね。
プロジェクト全体をクリップボードにエクスポートするマクロを作ってみましょう。

ついでにインポートする機能も付けてしまいましょう。

お願いします。

単純なマクロなのでAIで作れると思います。

サンプルのダウンロード

Windowsをご利用の場合は、こちらの統合版をダウンロードしてください(自動でインストールできます)。

Macをご利用の場合は、こちらをダウンロードして手動でインストールしてください。

Word版VBAアドインの手動インストール

Excel版VBAアドインの手動インストール

操作マニュアル

VA公用文シリーズ(統合版) 操作マニュアル

VAサーチシリーズ(統合版) 操作マニュアル

プロンプトの一例(Word/Excel共通)

このVBAアドインを使って、生成AIでVBAコードを作成・修正するためには、生成されたコードをJSON形式に変換するようにAIに指示しなければなりません。そのためのプロンプトのサンプルとして、私が使用しているものを参考までに掲載しておきます。

元自衛官なので、命令口調になっています。プロンプトの記述要領に関する私の考え方は、こちらの記事で紹介しています。

VBAアセット(https://vba-assets.net/ )は、法律事務員向けのVBA活用支援サイトであり、ExcelおよびWord用のVBAアドインやサンプルコードを公開している。運営者のVBAスキルは中級程度で、クラスモジュールやユーザーフォームも扱う。

「VAクリップ」は、運営者が開発・運用しているVBAモジュール一括入出力ツールである。JSON形式のテキストからVBAモジュールをホストアプリケーションに一括インポートする機能を持つ。

主な作業は、ExcelまたはWordの既存VBAプロジェクトの保守・拡張である。既存プロジェクトのコードをVAクリップでJSON形式にエクスポートし、そのJSONが会話に貼り付けられて提示される。新規開発が依頼される場合もある。

作成したコードはVBAアセットで公開され、VBA学習者を含む第三者が利用する。このため、コードは常に公開可能な品質でなければならない。

要求に基づきVBAコードを作成・修正し、VAクリップで取り込み可能なJSON形式で出力せよ。これは、出力されたJSONをVAクリップに貼り付けることで、手作業なしにモジュールをインポートできるようにするためである。

本指示の目的は、VBAアセットで公開するアドインやサンプルコードの開発・保守を効率化することである。主要な課題は、提示される既存コード(JSON)または新規の要求に対して、VAクリップのJSON仕様に完全に準拠したコードを生成することである。成功した状態とは、出力されたJSONをVAクリップに貼り付けた際にエラーなくモジュールがインポートされ、VBAが正常に動作し、かつコードが第三者にとって読みやすく公開可能な品質であることをいう。

以下は遵守すべき制約と仕様である。

【出力対象の限定——最重要事項】

新規作成または内容を修正したモジュールのみをJSON配列に含めよ。変更のないモジュールは絶対に出力するな。変更の指示を受けていないモジュールに手を加えることは、別の不具合を発生させるリスクがあり、厳禁である。修正対象の判定に迷った場合は、出力せず確認せよ。

【コードの完全出力——最重要事項】

モジュールのコードは、先頭行から最終行まで省略・中断なく完全に出力せよ。「(以下省略)」「(同様に続く)」のような省略は一切行うな。コードが長い場合であっても、必ず全行を出力せよ。途中で切れた出力は使用できない。

【行コメントの完全付与——最重要事項】

すべてのコード行に、その行が何を行っているかを説明するコメントを前の行に付与せよ。コメントのない行があってはならない。コードはVBAアセットで公開され、VBA学習者を含む第三者が読むことを前提とする。

【JSON仕様】

VAクリップが受け付けるJSON形式は以下のとおりである。

[

{

“name”: “モジュール名”,

“type”: “モジュール種別”,

“code”: “VBAコード全体”

}

]

typeフィールドには以下のいずれかを正確に指定せよ。

Standard: 標準モジュール

Class: クラスモジュール

Form: ユーザーフォーム(コード部分のみ)

Document: ドキュメントモジュール(ThisWorkbook, ThisDocument, Sheet1, Slide1等)

codeフィールドのエスケープ処理(JSON構文エラーを防ぐための必須事項):

VBAコードをJSONのcodeフィールドに格納する際、必ず以下の置換を行え。

  1. バックスラッシュ(\)はすべて \ に置換せよ。
  2. ダブルクォーテーション(”)はすべて \” に置換せよ。
  3. 改行(CRLFまたはLF)はすべて \n に置換せよ。
  4. 日本語はUnicodeエスケープせず、UTF-8文字のまま含めよ。

【既存モジュールの扱い】

ホストアプリケーション固有のオブジェクト(ThisWorkbook, ThisDocument, Sheet1等)を修正する場合、typeは必ずDocumentとし、nameは既存のオブジェクト名と完全に一致させよ。既存のロジックを破壊しないよう注意せよ。

【文字列リテラルの保護】

明示的な変更指示がない限り、コード内の文字列リテラル(シート名、セル番地、ブックマーク名、テーブルのフィールド名、ファイルパス、SQL文など)を一切変更してはならない。各アプリケーションのオブジェクト構造や外部データ連携の整合性を保つために不可欠である。

【命名規則】

変数の命名にはハンガリアン記法を用いよ。データ型の略称を接頭文字として付ける(例: lngCount, strName, dtmDate, blnFlag)。主な接頭文字は以下のとおり。

Integer: int / Long: lng / Single: sng / Double: dbl

String: str / Date: dtm / Boolean: bln / Variant: var

オブジェクト変数に対しては接頭辞を付けない。

カウンタ変数には以下の規則を適用せよ。

シートの行番号: i / シートの列番号: j

テーブルの行番号: r / テーブルの列番号: s

2つ目のテーブルの行番号: t / 列番号: u

オプションシートのテーブルの行番号: v / 列番号: w

配列のインデックスは i を許容する。

プロシージャ名にはキャメルケース(先頭の動詞は小文字、以降の単語は大文字)を用いよ(例: getDate, setValue, deleteRow)。

Boolean変数にはis, can, hasなどの接頭語を用いよ(例: isOk, canEdit, hasData)。

定数はスネークケースで記述する。

Option Explicitは必須とせよ。

【コメント規則】

モジュールヘッダー: 各モジュールの先頭に概要と更新日時(YYYY/MM/DD HH:MM形式)をコメントとして記述せよ。

プロジェクト変更履歴: ThisWorkbookやThisDocumentに変更履歴を記載する場合は以下の形式に統一せよ。

‘2026/02/08 Ver123 プロシージャを高速化

‘ メッセージを表示しないバグを修正

(日付+スペース+バージョン+スペース+内容。2行目以降はインデントして内容の頭を揃える。)

プロシージャ概要: 各Sub/Functionの直前に処理の目的・引数・戻り値の説明コメントを記述せよ。

【出力形式】

出力がVBAコードを含む場合は、VAクリップのJSON形式でCanvasに出力せよ。JSON配列のみを出力し、前後に説明文を付けないこと。ただし、コード以外の回答を求められた場合はこの限りでない。

コードの作成・修正以外の質問(設計相談、仕様確認、エラー原因の調査など)に対しては、JSON形式にする必要はなく、適宜の形式で回答せよ。

このプロンプトは、どの生成AIでも使えると思いますが、私はGeminiを使っています。VBAのマニアックなコードの提案能力は、ClaudeよりもGeminiの方が上である気がします(個人の感想です)。

仕様

1. プロジェクト概要

VBAのコードモジュール(標準、クラス、フォーム、ドキュメント)を、生成AI(ChatGPT, Gemini, Claude等)が解釈しやすいJSON形式に変換し、クリップボード経由で一括入出力する開発支援ツール。

VBE(Visual Basic Editor)上の全コードをワンクリックでAIに渡し、AIが修正・生成したJSONコードをワンクリックでVBEに反映させる「シャトル」機能を実現する。

2. ファイル構成

プロジェクトは以下のモジュールで構成すること。

モジュール名種類役割
basMain標準モジュールエントリーポイント、リボンコールバック、メニュー表示
basExport標準モジュールプロジェクト内の全モジュールをJSON化してクリップボードへ送る処理
basImport標準モジュールクリップボードのJSONを解析し、プロジェクトへ反映(置換・更新)する処理
basJson標準モジュール外部ライブラリに依存しない独自のJSONパーサーおよびジェネレーター
basUtility標準モジュールクリップボード操作、設定値(プロパティ)の保存・読込、ファイル名取得
frmStartMenuユーザーフォーム操作対象のVBAプロジェクトを選択し、処理を実行するUI
ThisWorkbookThisWorkbook更新履歴、AIプロンプト用ガイド(コメント)、ツールの設定保存場所
Sheet1ドキュメント標準のワークシート(特段のコードなし)

3. モジュール詳細仕様

(1) ThisWorkbook

  • 役割: ツール自体の管理情報と、AIに対する「プロンプト指示書」を含む。
  • AIプロンプト用ガイド:
    • コード内にコメントとして、AIにコード修正を依頼する際の「JSON出力ルール」を記載する。
    • 必須ルール:
      • 出力フォーマット: [ {"name": "...", "type": "...", "code": "..."} ]
      • type の定義: Standard, Class, Form, Document
      • エスケープ処理: ダブルクォーテーションや改行コードの扱い。

(2) basMain(標準モジュール)

  • プロシージャ: Main / ShowImportExportMenu
    • ユーザーフォーム frmStartMenu を表示する。
    • 実行時エラーが発生しても適切にハンドリングする。
  • プロシージャ: OnRibbonButton_Click
    • リボンUIからの呼び出しに対応するコールバック。

(3) basExport(標準モジュール)

  • 機能: 指定されたVBProject内の全コンポーネントを走査し、JSON配列文字列を生成してクリップボードにコピーする。
  • 処理ロジック:
    1. VBComponents をループ。
    2. CodeModule.Lines でコード全体を取得。
    3. コンポーネントタイプ(vbext_ct_StdModule 等)を文字列(Standard 等)に変換。
    4. basJson.EscapeString でコード内容をJSONセーフな文字列に変換。
    5. JSONオブジェクト文字列を組み立て、配列として結合。
    6. basUtility.SetClipboardText でクリップボードへ転送。
    7. 完了メッセージを表示(「生成AIに貼り付けて使用してください」等)。

(4) basImport(標準モジュール)

  • 機能: クリップボードからJSON文字列を取得し、解析結果に基づいてモジュールを作成・更新する。
  • 処理ロジック:
    1. basUtility.GetClipboardText でJSONを取得。
    2. basJson.ParseJSON でCollectionオブジェクトに変換。
    3. 各モジュール定義について ProcessSingleModule を実行。
  • 重要機能: ProcessSingleModule (安全な更新ロジック)
    • Document (Sheet/ThisWorkbook): モジュール自体は削除せず、CodeModule.DeleteLinesAddFromString中身のコードのみを書き換える(オブジェクトIDを維持するため)。
    • Form: フォームのレイアウト情報(デザイナ)を保持するため、コード部分のみを書き換える。
    • Standard / Class: 既存モジュールを Remove して、新規に Add し直す(クリーンインストール)。VBEが自動挿入する「Option Explicit」等の重複に注意し、削除してからコードを書き込む。

(5) basJson(標準モジュール)

  • 要件: Scripting.Dictionary や外部DLLを使用せず、標準機能(Collection 等)のみで実装されたJSONパーサー。
  • 機能:
    • ParseJSON: JSON文字列を受け取り、Collection のネスト構造(配列・オブジェクト)を返す。
    • EscapeString: 文字列内の " \ 改行などをエスケープする。
    • 解析ロジック: 再帰降下パーサーを実装し、{, [ を検出してオブジェクト/配列をパースする。

(6) basUtility(標準モジュール)

  • クリップボード操作:
    • MSForms.DataObject (CLSID: 1C3B4210-F441-11CE-B9EA-00AA006B1A69) をレイトバインディングで生成し、テキストの送受信を行う。
  • 設定保存:
    • ThisWorkbook.CustomDocumentProperties を使用して、「最後に選択したプロジェクト名」などの設定を保存・読み込みする。

(7) frmStartMenu(ユーザーフォーム)

  • UI構成:
    • cboProjectList: 現在開いている編集可能なVBAプロジェクトの一覧(コンボボックス)。
    • CommandButton1 (エクスポート): 選択したプロジェクトのコードを出力。
    • CommandButton2 (インポート): クリップボードの内容を解析し、インポート候補のモジュール一覧をプレビュー表示した上で実行確認を行う。
  • 動作:
    • 起動時に Application.VBE.VBProjects を走査し、保護されていないプロジェクトをリストアップする。
    • 前回使用したプロジェクトを自動選択する。

4. 機能要件詳細

  1. AI親和性 (JSONフォーマット):
    • AIが理解しやすく、かつ生成しやすいシンプルなJSON構造を採用すること。
    • type プロパティにより、AIが「標準モジュール」か「シートモジュール」かを明示的に指定できるようにすること。
  2. 安全性 (Safe Update):
    • 特に ThisWorkbookSheet モジュールは、誤って削除するとExcelシート自体とのリンクが切れてしまうため、絶対に削除せずコードの置換のみを行うロジックを実装すること。
  3. 依存性排除:
    • 配布・導入を容易にするため、その他の外部ライブラリ参照設定を必要としない(Late Bindingを使用)設計とすること。
  4. UI/UX:
    • インポート時は、いきなり書き換えるのではなく、JSONに含まれるモジュール名の一覧を表示し、ユーザーに最終確認を求めること。
    • プロジェクト名だけでなくファイル名も併記して、対象を識別しやすくすること。

5. UIデザイン

  • スタートメニュー: シンプルなダイアログ。上部にプロジェクト選択プルダウン、下部に「エクスポート」「インポート」の大きなボタンを配置。
  • メッセージ: 処理件数やエラー内容を明確に表示する。

コメント

  1. 管理人 より:

    「単一のテキストファイルに出力」から「それぞれのVBE形式ファイルに出力」に変更しました。
    一括インポート機能を追加しました。

  2. 管理人 より:

    「制限事項」を追加しました。

  3. 管理人 より:

    プロジェクト名を設定しました。(Ver201)

  4. 管理人 より:

    AIに読み込めるファイル数の制限を超過する場合に対応できるようにするため、すべてのモジュールを統合したファイルのエクスポートおよびインポート機能を追加しました。(Ver210)

  5. 管理人 より:

    インポートおよびエクスポートファイルの文字コードをUTF-8に変更しました。(Ver240)

  6. 管理人 より:

    VBEからのエクスポート/インポート機能を追加しました。
    結合ファイル名をプロジェクト名に変更しました。
    インポート時のフォーム消失バグを修正しました。
    モジュールを分割しました(Import/Export/Utility)。
    リボンメニューに変更しました。(Ver300)

  7. 管理人 より:

    クリップボードを経由するように変更しました。(Ver400)

タイトルとURLをコピーしました