Access引越し中小企業のAI導入支援|古い業務システムの作り直しからAccess・オフコンの引越し 専門

コラム仕組みと実験

AccessのVBAは、Webアプリへ移すと何割そのまま置き換わりますか?見本の69本を7種に分けて数えた

AccessのVBAは、見本のNorthwind 2.0 Starterで数えると、69本のうち42本(61%)がWebアプリの標準機能で足り、書き直しは2本(3%)、残る25本(36%)は移さずに済みました。処理の種類を画面イベント・帳票の出力・データ更新・ファイル出力・メール送信・外部DLL・消えて良い処理の7つに分け、本数と行き先を数えています。分類の基準とスクリプトも載せます。(2026年10月時点)

全体の流れと費用はAccess・オフコンの引越しのページにまとめています。

要点

  • 見本のAccessのVBA 69本のうち、Webアプリの標準機能で足りるのは42本(61%)、書き直しは2本(3%)、移さずに済むのは25本(36%)でした。
  • 69本のうち31本は画面のボタンや入力チェックで、標準の部品で足ります。外部DLLを呼ぶDeclare文は0本でした。
  • 分けるのは、DLL・メール・ファイル出力・帳票・データ更新・画面の順で、最初に当たった種類に決めます。
  • 見本はVBAが薄く、この割合はふつうの業務のAccessには当てはまりません。自分のファイルを同じ手順で数えます。
目次
  1. AccessのVBAは、Webアプリでどれくらいそのまま置き換わりますか?
  2. VBAは何を基準に、7つの種類に分けましたか?
  3. 画面イベントのVBAは、なぜ標準機能で足りますか?
  4. 書き直しになるのは、どんなVBAですか?
  5. この割合は、ふつうの業務のAccessにも当てはまりますか?
  6. 自分のAccessのVBAは、どう数えれば割合が出ますか?
  7. このサイトで相談するには?
  8. よくある質問

AccessのVBAは、Webアプリでどれくらいそのまま置き換わりますか?

見本のVBA 69本では、42本(61%)がWeb側の標準機能で足り、書き直しは2本(3%)でした。残る25本(36%)は、エラーログや見本のデータ作りで、移す必要がありません。数えたのはMicrosoftが配るNorthwind 2.0 Starterです。

ここでいう「そのまま置き換わる」は、同じ動きをするコードを書かなくても、移行先の標準の部品で足りることです。特定の製品で動かして確かめたのではなく、処理の中身から分けました。作り直しまで含めた全体の流れは、Access・オフコンの引越しにまとめています。

処理の種類ごとの本数と行き先は、次の表のとおりです。画面イベントが31本で最も多く、外部DLLを呼ぶ処理とファイルへの書き出しは0本でした。

処理の種類 本数 標準機能 書き直し 廃止
画面イベント 31 31 0 0
帳票の出力 1 0 1 0
データ更新 11 10 1 0
ファイル出力(CSV/Excel) 0 0 0 0
メール送信 1 1 0 0
外部DLL(Declare) 0 0 0 0
消えて良い処理 25 0 0 25
合計 69 42 2 25
見本のAccessのVBA 69本を移行先での行き先で分けた円グラフ。Webの標準機能で足りるのが42本(61%)、書き直しが2本(3%)、移さずに済む廃止が25本(36%)移行先に行ったとき、見本の VBA はどうなるか見本の VBA 69本を、標準機能で足りる・書き直す・廃止の3つに分けた割合69本VBA プロシージャ標準機能 42本(61%)画面の遷移・入力チェック・保存・削除は、Web 側の部品で足りる書き直し 2本(3%)表を回して書き換える処理・帳票・ファイルへの書き出しは、書き直す廃止 25本(36%)エラーログ・見本のデータ作り・Access の道具は、移さない数えたもの:Microsoft の見本 Northwind 2.0 Starter。割合は四捨五入。標準機能で足りるかは処理の中身で分けたもので、特定の製品で動かした結果ではない
図1 移行先での行き先の割合。Northwind 2.0 Starterを2026年10月17日に数えました。行数でも、標準機能が60%、書き直しが2%、廃止が38%です。

VBAは何を基準に、7つの種類に分けましたか?

プロシージャ(SubかFunctionの1つ分)のコードを読んで、最初に当たった種類で決めました。外部DLL、メール送信、ファイル出力、帳票の出力、データ更新、画面イベントの順に調べます。

DLLは、Declare文で宣言した関数を呼んでいるかで決めます。メールはSendObjectやOutlookの操作、mailto:のリンクです。

ファイル出力はTransferTextやOpen … For Outputで、帳票はOpenReportなどです。データ更新はOpenRecordset、Execute、DLookup、保存や削除の命令です。どれにも当たらないフォームのコードが、画面イベントになります。

VBAのプロシージャを7種に分ける順番の図。外部DLL、メール送信、ファイル出力、帳票の出力、データ更新、画面イベントの順に調べ、見本の管理画面やエラーログは名前で消えて良い処理にしたプロシージャを7種に分ける順番(最初に当たったものにする)分け方当たる条件(コードの中身)行き先1外部DLLDeclare 文で宣言した関数を呼んでいる書き直し2メール送信SendObject・Outlook の操作・mailto: がある書き直し(mailto: は標準機能)3ファイル出力TransferText・TransferSpreadsheet・OutputTo・Open … For Output書き直し(CSV 等の出力は標準機能)4帳票の出力OpenReport・acOutputReport・ラベルの作成書き直し5データ更新OpenRecordset・Execute・RunSQL・DLookup・DCount・保存と削除書き直し(参照と保存は標準機能)6画面イベントフォームのコードで、上のどれにも当たらない標準機能手消えて良い処理見本の管理画面・エラーログ・テストデータ作り(名前で決めた)廃止規則は vba_patterns.py の classify()。コメントは除いて読む。手で決めた分は CSV の by 列に「手」と出る
図2 7種に分ける順番と行き先。規則はvba_patterns.pyのclassify()にあります。

30本は、名前を見て手で決めました。見本の管理画面、エラーログ、テストデータ作りなどの25本は「消えて良い処理」です。起動時の処理、画面の再表示、通貨の書式を決める5本は「画面イベント」にしました。この30本の名前はスクリプトに書いてあるので、数え直しても同じ答えです。

画面イベントのVBAは、なぜ標準機能で足りますか?

31本の中身が、画面の開閉、次の画面への値の受け渡し、確認の表示、ボタンの出し分け、保存と削除の前後の処理だったためです。

たとえば受注の「出荷した」ボタンは、空行を除いて17行あります。出荷したかを尋ね、出荷日に今日の日付と状態「出荷済み」を入れて保存し、一覧を更新するだけです。社員の画面で追加ボタンを新規の入力中だけ隠す処理は、1行でした。状態を変えるボタンと確認の表示は、Web側の部品にもあります。

データ更新の11本のうち10本も、DLookupやDCountで調べるか、保存と削除をするだけでした。「注文のある得意先は削除できない」という決まりもその1つです。コードは要りませんが、決まりそのものは移行先にも設定します。標準機能で足りるのは、コードを書かずに済むという意味で、決めごとを移す手間はなくなりません。

足りるかどうかは、移行先の部品の範囲で変わります。足りないときは、その1本が書き直しに回ります。

見本のVBA 69本を処理の種類で7つに分けた横棒グラフ。画面イベント31本、データ更新11本、消えて良い処理25本、帳票の出力1本、メール送信1本、ファイル出力と外部DLLは0本見本の VBA 69本を、処理の種類で7つに分けて数えた棒の色は移行先での行き先(標準機能・書き直し・廃止)。数字は本数標準機能書き直し廃止画面イベント31本帳票の出力1本データ更新11本ファイル出力0本メール送信1本外部DLL(Declare)0本消えて良い処理25本数えたもの:Microsoft の見本 Northwind 2.0 Starter(2026年10月17日に取得)。Declare 文は0行。分類は vba_patterns.py の規則と手で決めた分
図3 処理の種類ごとの本数。棒の色が行き先で、青が標準機能、黄が書き直し、灰が廃止です。

書き直しになるのは、どんなVBAですか?

見本で書き直しになったのは2本です。帳票のラベル作成を呼び出す1本と、SQLの文で設定の表を更新する1本でした。数が少ないのは、見本のVBAが画面の操作に偏っているためです。

書き直しが増えるのは、次の4つの形です。

形 書き直しになる理由 見本の本数
外部DLL(Declare) DLLの外部手続きを宣言する文で、Web側に同じDLLがない。64bit版では、PtrSafeのない1行で別の関数まで止まった 0
メール送信 SendObjectはMAPIを使うメールソフトに送る。Webではメールを送る仕組みを別に用意する 0(mailto:の1本は標準機能)
ファイル出力 TransferTextはテキストファイルに書き出す。WebではCSVやExcelの出力の部品に替えるか、書き直す 0
帳票の出力 VBAではなく、レポートの作り直しが中心になる 1

外部DLLは、64bit版で動かない原因を試した記事で数え方を書きました。帳票は、レポートを同じ形で再現する実験が参考になります。

この割合は、ふつうの業務のAccessにも当てはまりますか?

当てはまりません。見本の42本・2本・25本は、このファイルだけの数です。MicrosoftはNorthwind 2.0のDeveloper版を、主な機能を見せるもので、会社を動かすためのものではないと説明しています。Starter版も同じ見本の系統です。

見本にはマクロが4つ、クエリが30あり、これらは数えていません。VBAの行数も、空行を除いたプロシージャの中で1,024行です。長く使った業務のAccessは、DeclareやRecordsetの繰り返しが増え、書き直しの割合が上がりやすいと考えています。ただ、これは見込みで、数えた結果ではありません。

Accessの中身を数える手順では、同じ見本のVBAを1,569行と数えました。この記事は本数で数え直したので、プロシージャの外の行を含む1,569行とは合いません。

自分のAccessのVBAは、どう数えれば割合が出ますか?

コピーしたファイルから、プロシージャの一覧を書き出し、同じ規則で分けます。数えるのはコピーなので、元のファイルは開きません。手順は4つです。

  1. 全員が閉じた時間に、.accdbをコピーする
  2. access_vba_dump.ps1にコピーを渡し、フォーム・レポート・モジュールのコードを書き出す(マクロとVBAは動かさない)
  3. vba_patterns.pyで、プロシージャごとに種類と行き先を決める
  4. 出たCSVを、種類と行き先で数える

CSVの列は、object・objectKind・procedure・lines・kind・destination・byです。byは、規則で決めたか、手で決めたかを表します。分け方の中心は、次の数行です。

if declared and DLLの関数を呼んでいる: kind = '外部DLL(Declare)'
elif re.search(r'SendObject|Outlook\.Application|mailto:', code): kind = 'メール送信'
elif re.search(r'TransferText|TransferSpreadsheet|OutputTo|Open .+ For (Output|Append)', code): kind = 'ファイル出力'
elif re.search(r'OpenReport|acOutputReport|PrintOut', code): kind = '帳票の出力'
elif re.search(r'OpenRecordset|\.Execute|RunSQL|DLookup|DCount', code): kind = 'データ更新'
elif フォームのコード: kind = '画面イベント'

限界もあります。.accdeや.mdeはVBAのソースがなく、数えられません。VBAの中身の読み方は、AIにVBAを読ませる実験にあります。数える項目の全体は、棚卸しにまとめています。

このサイトで相談するには?

AccessのVBAが何本あり、どれが書き直しになるかも、Access引越しで一緒に数えます。何をどう頼むか決まっていなくても大丈夫です。御社のやり方に合わせて、進め方を一緒に考えます。

準備は要りません。無料で相談するからお送りください。返信は最短当日です。

よくある質問

Declare文が多いAccessでも、標準機能で足りますか?
いいえ。Declare文で呼ぶDLLはWebアプリ側に同じものがないので、書き直しになります。見本はDeclare文が0行でした。
マクロやクエリも、同じ方法で数えますか?
この記事では数えていません。見本にはマクロ4つとクエリ30があり、別に棚卸しで数えます。
.accdeしかないときは、VBAを数えられますか?
いいえ。VBAのソースがないので、プロシージャを読めません。元の.accdbを探します。
手で決める分は、どれくらい出ますか?
見本では69本のうち30本でした。見本の管理画面やテストデータ作りが混じったためで、業務のAccessでは数えてみないと分かりません。

この数字の出し方

この記事の自前の数字は、次の見本・条件・回数で出しました。主宰が確かめ、更新日は2026年10月17日です。スクリプトの名前から、同じ手順を自分のファイルで再現できます。

  • Access引越しの計測(2026年10月17日、Microsoft 365 Access 16.0 ビルド20430 64bit・Windows 11。Northwind 2.0 Starter のプロシージャ69本)。scripts/figs/access_vba_dump.ps1・vba_patterns.py、結果は vba_patterns_northwind_starter.csv

出典

  1. Microsoft サポート「Northwind 2.0 Developer Edition: Template Tutorial」(見本は主な機能を見せるもので、会社を動かすためのものではない。対象 Microsoft 365・2024・2021・2019)(2026年10月17日確認)
  2. Microsoft Learn「Declare statement (VBA)」(DLLの外部手続きを宣言する文。PtrSafe の書き方)(2026年10月17日確認)
  3. Microsoft Learn「DoCmd.SendObject method (Access)」(MAPI を使うメールソフトでオブジェクトを送る)(2026年10月17日確認)
  4. Microsoft Learn「DoCmd.TransferText method (Access)」(テキストファイルへの書き出し)(2026年10月17日確認)