はじめに
Excel にて VBAマクロ を編集する際のエディタである VBE はエディタ機能が貧弱で、これを補う為にVisualStudioCode の拡張機能である XVBA1 などが用いられている。
ただ、XVBAも初期の設定が意外と面倒なため、excel-vba-sync2として自前で作成してみた。
ここでは、インストールから基本的な使い方、注意点までを記述。
概要 / 特長
- excel-vba-sync は、Excel 上の VBA モジュールを VSCode 上で編集可能にし、編集後のコードを Excel 側に再インポートできるVSCode拡張機能。
- VSCodeとVBAのコードがすぐに連携できるので、GithubCopilot と連携させコードアシストを利用することでコーディングパフォーマンスが飛躍的に向上。
- エクスポートしたファイルはUTF-8形式 の為、Gitによる管理も容易。
- マクロ実行(List & Run Macro) と コード検索機能(Search VBA Code) については発展途上の為、今回は詳細せず。
主な機能:
- Excel →
.bas
/.cls
/.frm
ファイルへのエクスポート - エクスポートされたファイルは VSCode 上でコード編集可能
- 編集後のモジュールを再び Excel に取り込み(モジュール差し替え方式)
- エクスポートファイルは UTF-8 形式で保存
- モジュール / プロシージャ 指定でマクロ実行 ※未紹介
- 全モジュール対象のコード検索(正規表現対応) ※未紹介
対応環境:
- Windows 10/11(24H2)
- Microsoft Excel
- Visual Studio Code
インストール方法
Visual Studio Code Marketplace からインストール
- VSCode を開き、Ctrl + Shift + X にて拡張機能ビューを開く
- “excel-vba-sync” を検索してインストール
- 必要に応じて VSCode を再起動
基本的な使い方
1. 準備( *.xlsm ブックの作成)
※すでにマクロのブックがある場合は飛ばしてもよい
- EXCEL のツールバー「開発」より VisualBasic を起動

- 右クリックでモジュールを追加

- ダミーの sub を作る

- 保存する

- ファイルの形式を「Excel マクロ有効ブック(*.xlsm)」 で保存
ここでは C:\Sample\excel-vba.xlsm として保存

Excel ファイルは開いたままにしておく
2. Visual Studio Code の起動
- Win + R でファイル名を指定して実行画面を開き、「code」 を入力

3. 拡張機能の起動
- ツールバーの「表示」⇒「ビューを開く」より、「Excel VBA VSCode Sync」を選択
4. エクスポート
- エクスポートフォルダの選択

- 今回はExcelファイルと同じフォルダを指定(C:\Sample)

- エクスポートの実行

- モジュールにパスワードが設定されている場合は、先にVBE上でパスワード入力し、モジュールを開いておく必要あり
- 「ファイル」⇒「オプション」⇒「トラストセンター」⇒「トラストセンター設定」にて以下をチェック済であること
- VBAマクロを有効にする
- VBA プロジェクト オブジェクト モデルへのアクセスを信頼する
- 「C:\sample\excel-vba\Module1.bas」 としてエクスポートファイルが作成される

5. インポート
- VSCode 上で 1 行追加し、Ctrl + S で保存

ファイル保存していないとVBA側に反映されない

- VBE側に反映されているかを確認、問題なければExcelファイルを保存

VBA(Excel)の保存を忘れるとVBA側とVSCode側の内容が不一致になる
状態まとめ
状態 | VBA側コード | VSCode側コード | 一致状況 |
---|---|---|---|
エクスポート前 | 既存コード | なし | 不一致 |
エクスポート後 | 既存コード | 既存コード | 一致 |
VSCode編集・保存 | 既存コード | 改修コード | 不一致 |
インポート後 | 改修コード | 改修コード | 一致 |
注意事項
-
エクスポートした
.frm
/.cls
/.bas
ファイルの属性行 (VERSION, Begin…End, Attribute VB_* 等) を編集しないこと。これを改変するとインポートに失敗したり、フォームとの紐付けが崩れたりする -
新しいモジュール/クラス/フォームの追加はこのツール上では未サポート。まず Excel 側で空モジュールと空の sub を作成し、それをエクスポートしてから編集。
-
Excel ファイルは必ずバックアップを取ってから連携を行う。外部操作によって破損する可能性あり。
-
長時間操作せず放置してから再操作すると COM 呼び出しで
RPC_E_CALL_REJECTED
などのエラーが出ることがある。その場合は Excel を再起動。
【参考】拡張機能の構造
- Export/Import
- List & Run Macro/Search VBA Code