1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excel VBAをGit管理し、AIエージェントにコードとUserFormを編集させる仕組みを作った【ツール無料公開】

1
Posted at

はじめに

長年、Excel VBAやAccessを使った業務システムの開発をしています。

最近はClaude CodeなどのAIエージェントを利用する機会が増え、プログラムの修正や新しい機能の実装を任せることも多くなりました。

ところが、Excel VBAには一つ困った問題があります。

VBAのソースコードがExcelブックの中に入っていることです。

AIにコードを書いてもらうことは簡単です。しかし、実際の開発では、コードを書いてもらうだけでは終わりません。

既存コードを調査し、複数のモジュールを修正し、変更内容を確認して、Excelに戻す必要があります。

毎回VBEを開いてコピー&ペーストするのでは、せっかくのAIエージェントが十分に活躍できません。

そこで、Excel VBAを外部ファイルとして管理し、AIエージェントが直接編集できる環境を作りました。

実際に自分の開発で使用しているツールなので、今回GitHubで無料公開することにしました。

作成したツール

名前は ExcelVbaAgentBridge です。

GitHubはこちらです。

完成済みのExcelマクロは、Releasesからダウンロードできます。

MITライセンスで公開しています。

ツールは2つのExcelマクロで構成しています。

ツール 役割
ExcelRepositoryBuilder.xlsm VBAコードやブック構成情報をファイルへ書き出す
ExcelRepositoryRestorer.xlsm 編集されたコードやフォームのレイアウトをExcelへ戻す

基本的な考え方は単純です。

Excelブック(.xlsm)
       │
       ▼
    Builder
       │
       ▼
  VBAコードをテキスト化
  UserFormの配置をCSV化
       │
       ▼
  Gitでバージョン管理
       │
       ▼
  AIエージェントが調査・修正
       │
       ▼
    Restorer
       │
       ▼
  Excelブックへ反映
       │
       ▼
  人間が動作確認

ExcelとAIエージェントの間に、テキストファイルを介した橋を架ける仕組みです。

1. VBAコードをエクスポートする

Builderを実行すると、対象のExcelブックからVBAコードなどを取り出します。

標準モジュールは .bas、クラスモジュールなどは .cls、UserFormのコントロール情報は .csv として保存します。

出力フォルダは次のような構成です。

ExcelRepository/
└── Sample_repository/
    ├── VBA/
    │   ├── Modules/
    │   │   ├── Module1.bas
    │   │   └── modSample.bas
    │   ├── Classes/
    │   │   └── Class1.cls
    │   ├── Documents/
    │   │   ├── ThisWorkbook.cls
    │   │   └── Sheet1.cls
    │   └── Forms/
    │       ├── Code/
    │       │   └── UserForm1.cls
    │       └── ControlsCsv/
    │           └── UserForm1.csv
    └── Workbook/
        ├── WorkbookInfo.txt
        ├── Sheets.csv
        ├── Tables.csv
        └── Names.csv

ソースコードはUTF-8を基本とし、Gitで差分を確認しやすい形にしています。

これでVBEを開かなくても、VS Codeなどでコードを検索・編集できるようになります。

2. VBAだけでなくExcelブックの構造も出力

AIエージェントに開発を任せるとき、ソースコードだけでは情報が足りないことがあります。

そこで、ブック自体の構成情報も出力するようにしました。

主な情報は次のとおりです。

  • シート名、表示状態、使用範囲、数式数
  • Excelテーブルの名前や範囲
  • 名前定義と参照先
  • ブック名、シート数などの基本情報

これらをCSVやテキストにしておけば、AIエージェントが既存のブック構成を把握するための資料になります。

ただし、現時点ではセルの値や数式そのものをすべて書き出す機能ではありません。

また、これらのWorkbook情報は参照用であり、Restorerによる復元には対応していません。

3. UserFormのレイアウトもCSVで管理する

今回の仕組みで特に工夫したのがUserFormです。

VBAコードだけを取り出しても、フォーム上のコントロールの位置やサイズは分かりません。

そこで、UserFormの各コントロールについて、次の情報をCSVに出力しています。

ControlName,ControlType,Caption,Left,Top,Width,Height,FontName,FontSize,FontBold,ForeColor,BackColor

コントロールの位置、サイズ、文字列、フォントなどをテキストとして管理できます。

AIエージェントは、このCSVを編集することでフォームのレイアウトを変更できます。

例えば、「入力欄の横幅を広げる」「ボタンの位置を揃える」「ラベルを追加する」といった変更を、対応するコントロールの範囲内で行えます。

もちろん、UserFormのすべてのプロパティを再現できるわけではありません。

それでも、フォームのレイアウトまでテキスト化できることは、AIエージェントを利用するうえで大きな利点です。

4. AIエージェントにプログラムを修正させる

エクスポートしたファイルは、Gitで管理します。

私の普段の開発環境では、ローカルサーバー上のGiteaを使用しています。

ただし、このツール自体はGitea専用ではありません。GitHubでも、ローカルのGitリポジトリでも使用できます。

AIエージェントには、リポジトリ内のソースコードを調査・修正させます。

例えば、次のような指示が可能です。

Module1.basにある集計処理を確認し、日付の判定に問題がないか調査してください。

修正が必要な場合は該当モジュールだけを変更し、変更内容を説明してください。

AIはテキストファイルを直接扱えるので、複数のソースを調査しながら作業できます。

修正が終わったらGitの差分を確認します。

ここで重要なのは、AIが変更したものを無条件にExcelへ戻さないことです。

変更箇所を確認し、問題がなければRestorerを実行します。

5. 編集結果をExcelへ取り込む

Restorerは、リポジトリ内のファイルを読み込み、既存のExcelブックへ反映します。

主な対応内容は次のとおりです。

対象 取り込み動作
標準モジュール 同名があれば削除して再作成
クラスモジュール 同名があれば削除して再作成
UserFormコード 既存コードを置換
UserFormレイアウト 既存コントロールを更新、対応種類は追加可能
ThisWorkbook・Sheet コード部分を置換

ただし、リポジトリに存在しなくなったモジュールをExcel側から自動削除する、完全同期の仕組みではありません。

また、新しいUserFormそのものの生成や、CSVから削除されたコントロールの自動削除には対応していません。

インポート後には、必ずVBEでコンパイルし、Excel上で動作確認します。

6. 使用前に必要なExcelの設定

このツールは、ExcelのVBAプロジェクトへプログラムからアクセスします。

そのため、通常のマクロ実行許可とは別に、次の設定が必要です。

  1. Excelの「ファイル」→「オプション」を開く
  2. 「トラスト センター」→「トラスト センターの設定」を開く
  3. 「マクロの設定」を選択
  4. 「VBAプロジェクト オブジェクトモデルへのアクセスを信頼する」を有効にする

私自身、普段使わないPCで実行した際に、この設定を忘れていて動きませんでした。

また、GitHubからダウンロードしたマクロ付きブックは、WindowsやOfficeの保護機能によって実行がブロックされる場合があります。

配布元と内容を確認し、信頼できるファイルだけを実行してください。

7. 注意点と現在の制限

このツールは、自分の開発環境で必要になった機能を実装したものです。

Excelブックを完全にテキスト化して復元する汎用ツールではありません。

特に、次の点には注意してください。

  • 取り込み前に対象Excelブックを必ずバックアップする
  • マクロ実行時には、対象ブックがアクティブになっていることを確認する
  • UserFormの全プロパティや画像などの完全復元には対応しない
  • ワークシートのセルデータ、数式、テーブルなどの復元には対応しない
  • インポート前の自動バックアップやロールバックはない
  • AIによる修正後も、人間による動作確認が必要

また、エクスポートされたファイルにはVBAコード中の接続文字列や業務情報、ブックの保存パスなどが含まれる場合があります。

実際の業務ブックをGitHubなどで公開する場合には、十分な確認が必要です。

8. 思わぬ副産物:PowerPointでUserFormを編集

UserFormのレイアウトをCSVにしたことで、別の使い道も生まれました。

PowerPoint上でUserFormのレイアウトを編集する方法です。

PowerPointなら図形の位置合わせやサイズ調整がしやすく、コントロールの配置を視覚的に調整できます。

編集した情報をCSVに反映すれば、RestorerでExcel側のUserFormにも適用できます。

こちらは後から追加した応用機能です。

なお、今回GitHubで公開したBuilderとRestorerには、PowerPoint連携用のマクロ自体は含まれていません。

この話については、以前noteにも書きました。

ExcelのUserFormレイアウト調整をPowerPointでやった件

9. なぜ無料公開するのか

このツールは、もともと自分の仕事を楽にするために作りました。

AIエージェントに既存のVBAプロジェクトを理解させ、修正を任せるには、Excelの外側にソースコードを取り出す仕組みが必要だったからです。

特別に複雑な仕組みではありません。

しかし、同じようにExcel VBAを長年使用している開発者にとって、何かの参考になるかもしれません。

そこで、ソースコードも含めてGitHubで無料公開することにしました。

現時点では自分の実務に必要な機能が中心ですが、使える部分があれば自由に活用してください。

おわりに

AIエージェントの登場で、プログラムの開発方法は大きく変わりつつあります。

新しい言語やフレームワークだけでなく、長年使われてきたExcel VBAやAccessでも、開発の進め方を変える余地はあると思います。

大切なのは、AIに単発のコードを書かせるだけでなく、既存のプログラムを理解し、継続して修正できる環境を整えることではないでしょうか。

今回のExcelVbaAgentBridgeは、そのために作った小さな道具です。

今後は、AccessのGit管理やAIエージェントを利用した開発についても、実際の経験を紹介していきたいと考えています。

最後までお読みいただき、ありがとうございました。


GitHub

最新版ダウンロード

MIT License

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?