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

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

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

お願いします。
サンプルのダウンロード
Windowsをご利用の場合は、こちらの統合版をダウンロードしてください(自動でインストールできます)。
Macをご利用の場合は、こちらをダウンロードして手動でインストールしてください。
インストールマニュアル
操作マニュアル
仕様
概要
VAコードは、OfficeアプリケーションのVBAプロジェクトとフォルダ上のテキストファイルを双方向に同期するアドインです。VBAモジュールをファイルとして書き出し、Claude Codeなどの外部エディタで編集した後、Officeに読み込み直すワークフローを実現します。Google Apps ScriptのClaspに相当する仕組みをVBAで実現したものです。
- バージョン: Ver500(2026年6月)
- 動作環境: Microsoft Excel / Microsoft Word(Windows)
- 著作権: VBA アセット
ワークフロー
エクスポート・外部編集・インポートの3ステップで運用します。
- エクスポート : VBAエディタ上の全モジュールをテキストファイルとして出力し、モジュール一覧を
manifest.jsonに記録する - 外部編集 : Claude Codeなどのエディタでテキストファイルを直接編集する
- インポート :
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"}
]
}
| フィールド | 内容 |
|---|---|
project | VBProjectの名前 |
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)



コメント