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

サンプル

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

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

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

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

お願いします。

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

サンプルのダウンロード

このプロジェクトは、「VAサーチシリーズ(統合版)」に含まれています。Windows環境の場合は、こちらを用いたほうが簡単にインストールできます。

インストール方法

Word版VBAアドインのインストール方法

Excel版VBAアドインのインストール方法

操作マニュアル

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

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

仕様

1. プロジェクト概要

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

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

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をコピーしました