AIにAccessのVBAを読ませて、仕様書は作れますか?手で作った正解と比べた実験
AIにAccessのVBAを読ませると、仕様書の下書きになるボタンごとの処理の一覧は1分ほどで作れます。架空の受注管理(VBA 220行、ボタン12個)で試すと、VBAだけを渡したAIは、ボタンと触るテーブルの組39のうち35〜36組を書きました。漏れた組は、どれもクエリやフォームの中にだけ名前があるテーブルでした。クエリのSQLも渡すと、3回とも39組すべてがそろいました。Access引越しで行った実験の結果です。(2026年10月時点)
全体の流れと費用はAccess・オフコンの引越しのページにまとめています。
要点
- AIはVBAだけから、ボタン12個すべての処理の要約を1回50〜57秒で書きました。
- 触るテーブルは39組のうち35〜36組を書き、漏れた3〜4組はクエリやフォームの先にありました。
- クエリのSQLとレコードソースも渡すと、3回とも39組と計算式10本がすべてそろいました。
- 正解にないテーブルを書いた回は6回中0回で、コメントにだけ残る古いテーブル名も拾いませんでした。
- 架空のサンプル220行での結果なので、実物では人が逆向きに突き合わせてから仕様書にします。
目次
AIにAccessのVBAを読ませると、仕様書はどこまで作れますか?
ボタンごとの処理の一覧は、ほぼそのまま使える形で作れます。ただし、VBAだけを渡すと、ボタンが触るテーブルを1割ほど書き漏らしました。漏れはクエリやフォームの中に隠れていて、それらも一緒に渡すと漏れは0になりました。
ここで言う仕様書は、ボタンを押すと何が起き、どのテーブルを読み書きし、何を計算するかの一覧です。Access・オフコンの引越しでは、移す範囲を決める最初の資料になります。Access引越しの実験では、同じ材料をAIに3回ずつ読ませ、手で作った正解と比べました。結果は次の表のとおりで、設計の情報を足した条件Bだけが全項目で満点でした。
| 比べた項目 | 正解の数 | 条件A VBAだけ(3回) | 条件B 設計情報つき(3回) |
|---|---|---|---|
| ボタン | 12 | 12・12・12 | 12・12・12 |
| 触るテーブルの組 | 39 | 35・36・36 | 39・39・39 |
| うちVBAに名前がない組 | 10 | 6・7・7 | 10・10・10 |
| 正解にないテーブル | 0 | 0・0・0 | 0・0・0 |
| 計算式 | 10 | 8・9・8 | 10・10・10 |
実験では、何をどう比べたのですか?
Access引越しで架空の受注管理のAccessを作り、VBAの6モジュール(220行)をAIに読ませました。出させたのは、ボタンごとの処理の要約、触るテーブル、計算式の3つです。手で作った正解と、機械的に照らし合わせて数えました。
サンプルには、引越しの現場でよく見る書き方を入れています。テーブル名を定数に入れる、文字列をつないでSQLを組み立てる、別のモジュールの関数から書き込む、といった書き方です。コメントには、今は使っていない古いテーブル名も残しました。AIはClaude Sonnet 5.5を道具なしで使い、各条件3回、2026年10月16日に実行しています。
数え方の要点は次の数行です(score.py)。正解の組がAIの出力にあれば当たり、なければ漏れ、正解にない組は余分として数えます。
for tb in truth_tables:
if tb in ai_tables: tp += 1
else: misses.append(f"{button}:{tb}")
fp += len(ai_tables - set(truth_tables))
材料・プロンプト・AIの出力6回分・採点の結果は、すべて手元に残しています。限界もあります。サンプルは短く、テーブル名も分かりやすく付けました。実物のAccessは数千行あることが多く、名前が「Q1」「テーブル2」のような場合は、推定も当たりにくくなるはずです。
AIが書き漏らしたテーブルは、どこにあったのですか?
漏れた3〜4組は、すべてVBAのファイルの外にありました。保存クエリのSQL、フォームのレコードソース、レポートのレコードソースの3か所です。レコードソースは、フォームやレポートが表示するテーブルかクエリの指定です。VBAには「このクエリを開く」としか書かれていないので、AIからはその先が見えません。
| 通り道 | サンプルでの例 | 条件Aで漏れた回 |
|---|---|---|
| 保存クエリのSQL | Q_在庫不足 → T_商品 | 3回とも |
| フォームのレコードソース | F_受注一覧 → T_得意先 | 3回とも |
| レポートのレコードソース | R_請求書 → T_得意先 | 3回とも |
| サブフォームのレコードソース | sub明細 → T_受注明細 | 1回 |
VBAに名前が出てこない組は10あり、AIはそのうち6〜7組をクエリやフォームの名前から当てました。多くの回で「定義が渡されていないので推定」と書き添えています。推定が当たったのは、名前が分かりやすいサンプルだったからです。仕様書では、推定の印が付いた行を人が確かめる行として扱います。
計算式と処理の要約は、どこまで正しかったですか?
VBAに書かれた計算式8本は、6回とも読み違えませんでした。条件Aで書けなかったのは、クエリのSQLの中にある2本(有効在庫と在庫の引当)です。引当は推定で書いた回がありましたが、有効在庫は3回とも書けませんでした。SQLを渡した条件Bでは、2本とも3回書けています。
消費税は「Int(小計×税率)」から1円未満の切り捨てと書きました。支払期日の「DateSerial(年, 月+2, 0)」も、締め日の翌月末と正しく読んでいます。月に2を足しているので、翌々月と読み違えやすい書き方です。コメントにだけ残した古いテーブル(T_売掛)は、6回とも今の処理に含めませんでした。
一方で、AIの要約は回ごとに少しずつ言い回しが変わります。仕様書として残すときは、ボタン名・テーブル・式の欄に分けた表へ直します。AIの文をそのまま貼るより、あとで比べやすくなるからです。
AIに渡す前に、何を書き出しておけばよいですか?
VBAに加えて、クエリのSQLと、フォーム・レポートのレコードソースを書き出しておきます。今回の実験では、この3つを足しただけで、触るテーブルの漏れが3〜4組から0組になりました。
Accessの「データベース ドキュメンター」を使うと、フォームのプロパティやコードをレポートにできます。場所は[データベース ツール]タブの[解析]です(Microsoftサポートの説明)。
クエリのSQLが載るかは、説明に書かれていません。各クエリのSQLビュー(中身をSQLの文で見る画面)から写しておくと確実です。私が引越しの棚卸しをするときは、次の順で進めます。
- フォーム・レポート・クエリの数を数え、一覧にする(Accessの棚卸しの手順)
- VBAのモジュールと、クエリのSQL・レコードソースを書き出す
- AIに、ボタンごとの要約・触るテーブル・計算式を表で出させる
- 人が、テーブルごとに「どのボタンが書き換えるか」を逆向きに数えて突き合わせる
- ファイルの写しでボタンを押し、テーブルの件数が変わるかを見る
4番目の逆向きの突き合わせで、推定の行と漏れが見つかります。AIの表は下書きとして速く作り、確かめは人が行う、という分け方です。
このサイトで相談するには?
Access引越しでは、仕様書のないAccessも、VBAとクエリを書き出して中身を一緒に確かめます。何をどう頼むか決まっていなくても大丈夫です。御社のやり方に合わせて、進め方を一緒に考えます。
準備は要りません。無料で相談するからお送りください。
よくある質問
- VBAをAIに渡すと、顧客のデータも渡ることになりますか?
- いいえ。VBAとクエリのSQLは処理の書き方で、取引のデータは入っていません。ただ、SQLやコメントに得意先名が書かれていることがあるので、渡す前に検索して確かめます。
- 数千行のVBAでも、同じくらい書けますか?
- 分かりません。今回は220行の架空のサンプルです。長いときはフォームごとに分けて渡し、1つずつ突き合わせるほうが確かめやすくなります。
- AIが「推定」と書いたテーブルは、そのまま使えますか?
- 使わずに、要確認の印として扱います。今回の推定は当たっていましたが、クエリのSQLで確かめるまでは仕様書に確定として書きません。
- Accessのデータベース ドキュメンターだけで仕様書になりますか?
- なりません。プロパティとコードは書き出せますが、ボタンを押すとどのテーブルが変わるかは、読んでまとめる必要があります。
この数字の出し方
この記事の自前の数字は、次の見本・条件・回数で出しました。主宰が確かめ、更新日は2026年10月17日です。スクリプトの名前から、同じ手順を自分のファイルで再現できます。
- Access引越しの実験(2026年10月16日、架空の受注管理 VBA 220行・ボタン12個・ボタンと触るテーブルの組39。VBAだけを渡す条件とクエリのSQLも渡す条件を、各3回)。scripts/figs/ai_vba_spec/