VAコード:すべてのVBAモジュールをファイルで入出力する(ワード/エクセルVBA)

サンプル

AIを使ったVBAの作成や修正は、問題なくできているでしょうか?

最近は、Claude Codeを使うことが多くなりました。GASであればClaspというツールを使って入出力が簡単にできるのですが、VBAの場合は適当なツールがありません。

了解しました。それでは、各モジュールをファイルとしてエクスポートしたり、それらをプロジェクトにインポートしたりできるマクロを作ってみましょう。

お願いします。

サンプルのダウンロード

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

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

インストールマニュアル

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

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

操作マニュアル

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

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

仕様

概要

VAコードは、OfficeアプリケーションのVBAプロジェクトとフォルダ上のテキストファイルを双方向に同期するアドインです。VBAモジュールをファイルとして書き出し、Claude Codeなどの外部エディタで編集した後、Officeに読み込み直すワークフローを実現します。Google Apps ScriptのClaspに相当する仕組みをVBAで実現したものです。

  • バージョン: Ver500(2026年6月)
  • 動作環境: Microsoft Excel / Microsoft Word(Windows)
  • 著作権: VBA アセット

ワークフロー

エクスポート・外部編集・インポートの3ステップで運用します。

  1. エクスポート : VBAエディタ上の全モジュールをテキストファイルとして出力し、モジュール一覧を manifest.json に記録する
  2. 外部編集 : Claude Codeなどのエディタでテキストファイルを直接編集する
  3. インポート : manifest.json を読み込み、各テキストファイルの内容をVBAモジュールに反映する

フォルダ構成(出力ファイル)

エクスポート先フォルダには以下のファイルが生成されます。

<プロジェクトフォルダ>/
├── manifest.json        ← モジュール一覧(名前・種別・ファイル名)
├── ThisWorkbook.bas     ← Documentモジュール(Excel: ThisWorkbook / Word: ThisDocument)
├── basMain.bas          ← 標準モジュール
├── MyClass.cls          ← クラスモジュール
└── MyForm.frm           ← フォームコード(レイアウト情報は含まない)

manifest.json の形式

{
  "project": "プロジェクト名",
  "modules": [
    {"name": "basMain",       "type": "Standard",  "file": "basMain.bas"},
    {"name": "ThisWorkbook",  "type": "Document",  "file": "ThisWorkbook.bas"},
    {"name": "MyClass",       "type": "Class",     "file": "MyClass.cls"},
    {"name": "MyForm",        "type": "Form",      "file": "MyForm.frm"}
  ]
}
フィールド内容
projectVBProjectの名前
nameモジュール名
typeモジュール種別(Standard / Class / Form / Document)
fileファイル名

モジュール構成

モジュール名種別役割
basMain標準モジュールエントリーポイント。リボンコールバックとフォーム呼び出し
basExport標準モジュール全モジュールをテキストファイルに書き出す
basImport標準モジュールテキストファイルからモジュールを読み込む
basUtility標準モジュールファイルI/O・フォルダ選択・設定保存などの共通処理
basJson標準モジュールmanifest.json のパーサー(外部ライブラリ不使用)
frmStartMenuフォームモジュール操作UIの提供

UI(frmStartMenu)

起動するとユーザーフォームが開き、以下の操作ができます。

コントロール種別機能
cboProjectListコンボボックス保護されていないVBAプロジェクトを一覧表示して選択
lblFolderPathラベル選択プロジェクトに対応するフォルダパスを短縮表示
CommandButton3(変更)ボタンフォルダ選択ダイアログを開いてフォルダを変更
CommandButton1(エクスポート →)ボタン選択プロジェクトの全モジュールをファイルに書き出す
CommandButton2(← インポート)ボタンフォルダ内のファイルをプロジェクトに読み込む

フォルダパスはプロジェクトごとに記憶されます。次回起動時は前回のプロジェクトとフォルダが自動選択されます。


各機能の仕様

エクスポート(basExport)

  • 対象VBProjectの VBComponents を全件走査する
  • モジュール種別に応じた拡張子でテキストファイルを書き出す(標準→.bas / クラス→.cls / フォーム→.frm / Document→.bas
  • 全モジュールの情報を manifest.json に書き出す
  • 出力先フォルダが存在しない場合は自動作成する
  • フォームモジュールはコードのみ書き出す(レイアウト情報は含まない)

インポート(basImport)

  • フォルダ内の manifest.json を読み込み、モジュール一覧を取得する
  • 一覧の順番で各ファイルを読み込み、VBProjectに反映する
  • 既存モジュールの扱いはモジュール種別によって異なる
種別処理
Document(ThisWorkbook / ThisDocument など)コードを全削除して新しいコードを書き込む。モジュール自体は削除しない
Form(フォーム)コードのみを全削除して書き込む。フォームのレイアウトは維持する
Standard / Class(標準・クラス)既存モジュールを削除して新規作成し、コードを書き込む
新規(プロジェクトに存在しない)モジュールを新規追加してコードを書き込む
  • manifest.json にないファイルはインポートしない
  • ファイルが見つからないモジュールはスキップしてイミディエイトウィンドウにログを出力する

ファイルI/O(basUtility)

  • 読み書きには ADODB.Stream を使用する
  • エンコーディングは UTF-8(BOMなし)
  • 書き込み時は一度UTF-8で書き出した後、先頭3バイト(BOM)を除去してバイナリ保存する

設定の保存(basUtility)

  • プロジェクトとフォルダパスの対応関係、最後に選択したプロジェクト名を記憶する
  • 保存先はホストドキュメントの CustomDocumentProperties(ドキュメント自体に埋め込む)
  • 設定変更と同時にドキュメントを上書き保存する

JSONパーサー(basJson)

  • 外部ライブラリを使わず、VBAのみで実装したシンプルなJSONパーサー
  • manifest.json の読み込みに特化しており、文字列・数値・真偽値・null・オブジェクト・配列に対応する
  • パース結果は Collection として返す(オブジェクトはキー付き Collection、配列は連番 Collection

コメント

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