AccScan
技術

VBAとVBScriptは何が違う?Access利用者が知るべき区別

VBAとVBScriptは文法が似ていますが別物です。VBAはOfficeに組み込まれHostアプリが必要、VBScriptはWindows上で単体動作し2023年に廃止発表済み。AccessのVBAが受ける3パターンの間接的影響と点検方法を整理します。

まずは、自社のAccessが「解析できるか」を無料で確認できます。

約2分・ファイル送信不要・発注義務なし

結論:VBAとVBScriptは別物です。文法が似ているだけです

「VBAとVBScriptは同じもの?」という疑問はAccessを使い始めた人がよく持ちます。答えはノーです。文法は似ていますが、動く場所も、できることも、廃止の対象かどうかも別々です。

AccessのVBAはMicrosoftがOfficeに組み込んだプログラミング言語で、公式ドキュメントによれば「Officeアプリケーションを拡張するためのプログラミング言語」と定義されています。AccessやExcel、Wordといったホストアプリケーションがなければ動きません。

VBScriptはもともとWebページのスクリプトやWindows Script Host(WSH)での自動化のために作られた独立したスクリプト言語です。単体のWindows環境で実行でき、Accessは必要ありません。2023年10月にMicrosoftが廃止を正式に発表した際も、廃止対象はこのWindowsのVBScriptであり、AccessのVBAではありません。

先に違いを整理します。

観点VBAVBScript
動く場所Accessなどのホストアプリケーション内WSH(wscript.exe/cscript.exe)、IIS/ASP、旧Internet Explorer等
ホストアプリ必須(AccessやExcelなど)AccessなどのOfficeアプリは不要。WSH等の実行ホストは必要
データ型Integer、String、Dateなど多数Variant型のみ
エラー処理On Error GoTo ラベル が使えるOn Error GoTo ラベル(ラベルへの分岐)は使えない。主にOn Error Resume Nextを使用。On Error GoTo 0による解除は可能
クラスモジュール使える(Implementsによるインターフェース実装も可。クラス継承は不可)Classは定義でき、メンバーのPublic/Privateは指定できるが、VBAのImplementsやクラスモジュールの一部機能は持たない
廃止予定2025年11月8日時点でMicrosoftによる廃止発表なしあり(Microsoftが段階的廃止を進行中)
後継・代替現状維持、Office Add-ins(Web技術)も選択肢PowerShell(Microsoftが移行を推奨)

なぜ「VBAとVBScriptは同じ」と誤解されるのか

両者の文法は確かに似ています。変数の宣言にDimを使い、Sub〜End SubやFunction〜End Functionの構造も共通です。VBScriptのドキュメントも「Visual BasicやVBAをすでに知っていれば、VBScriptにすぐ馴染める」と書いています。この説明が誤解を呼ぶ一因です。

ただし「文法が似ている」と「同じもの」は別の話です。類比で言えば、日本語の書き言葉と話し言葉が同じではないのと似ています。土台の発想は共通でも、動く文脈が違います。

AccessでVBEを開いてコードを書く経験を持つ人が「VBScript」という言葉を聞くと、自分が書いているVBAコードのことだと思いがちです。しかし実際には、VBScriptはAccessの外で動く別のエンジンです。AccessのVBAとWindowsのVBScriptは、別のDLLファイルとして存在します。VBAはOfficeに含まれ、VBScriptはWindowsに搭載されたvbscript.dllとして独立しています。

AccessのVBAが受ける間接的な影響

AccessのVBA自体はVBScript廃止の直接の対象ではありません。ただし、VBAのコードの中でVBScriptの部品を呼び出しているケースは別です。VBScript廃止がAccess VBAに与える影響の記事で詳しく書きましたが、代表的には次の3パターンが該当します。

パターンコード例影響
VBScript.RegExpによる正規表現CreateObject("VBScript.RegExp")あり。Windows版M365 Version 2508(Build 19127.20154)以降はRegExp互換機能がVBAに組み込まれ、既存コードも多くがそのまま使える
ScriptControlでVBScriptを実行Language = "VBScript"あり。VBScriptエンジン依存のため削除フェーズで動かなくなる
VBAから.vbsファイルを呼び出すShell関数やwscript.exe経由あり。廃止第3段階で.vbs単体実行が非対応になる見込み

通常のVBA(フォーム操作・クエリ実行・DAO/ADOによるレコード処理・FileSystemObject・Dictionaryなど)はVBScriptに依存しないため、廃止の直接的な対象にはなりません。VBScriptと似た名前が含まれますが、FileSystemObjectとDictionaryはVBScriptではなくMicrosoft Scripting Runtime(scrrun.dll)に属しており、廃止対象とは別物です。ただし、VBScriptを間接的に利用している箇所は意外な形で混在することがあるため、VBScriptを無効にした検証環境での動作確認が最も確実な点検手段です。

コードの点検の入り口として、VBEのCtrl+F検索で「VBScript」「ScriptControl」「.vbs」の3語を順に検索してください。これらがヒットしなくても、参照設定(ツール→参照設定)にも目を通して「Microsoft VBScript Regular Expressions 5.5」のチェックがないか確認することをお勧めします。なお、ProgIDや.vbsのパスを変数や文字列連結で動的に組み立てているコードは単純な検索では検出できないため、動作テストも組み合わせるのが確実です。Accessのコードを点検する入り口が塞がっている場合(VBEのパスワードロックや.accdeのみ残存など)は、無料の解析可否チェックで現状確認から始められます。

VBScript廃止のスケジュール(2025年11月時点)

MicrosoftはVBScriptの廃止を3段階で進めています。2025年11月時点の状況は次のとおりです。

段階内容時期
第1段階Windows 11バージョン24H2以降、VBScriptはオプション機能(FOD)として提供。当面はプリインストールされ既定で有効のまま実施済み
第2段階VBScript FODが既定で無効になる。使い続けるには手動での有効化が必要Microsoftの説明では「おおよそ2026年か2027年」(確定日は未発表)
第3段階将来のWindowsリリースでVBScriptが削除される予定未定

この廃止はWindowsのVBScriptエンジン(vbscript.dll)に対するものです。AccessやExcelのVBAエンジンは別のDLLに存在しており、廃止のスコープに入っていません。VBAが廃止される、という情報はMicrosoftの公式資料に存在しません(2025年11月8日現在)。

VBAと関連技術を混同しやすい理由

Access周辺には似た名前の技術がいくつかあり、混同しやすい状況があります。整理しておきます。

名称何かVBAとの関係
VBScriptWindowsのスクリプトエンジンからのVB系言語文法が近いが別物。廃止対象
VB6(Visual Basic 6.0)かつてのスタンドアロンアプリ開発言語VBAとはVisual Basic系の近縁技術だが別製品。VB6 IDEのサポートは2008年に終了
VBScript.RegExpVBScriptエンジン提供の正規表現オブジェクトVBAから呼べるが、呼ぶとVBScriptに間接依存する
Microsoft Scripting RuntimeFileSystemObject等を提供するscrrun.dllVBAから参照できる。VBScriptとは別のDLL。廃止対象外
Office スクリプト(Office Scripts)Excel on the webおよびWindows版・Mac版対応ExcelのTypeScript系自動化手段VBAとは別。Access非対応、Excel専用

AccessのVBAがどこまで責任を持つかはAccessのマクロとVBAの違いで書いています。VBAとマクロを混同している場合は、そちらも参照してください。

VBAをこれから使う人は何を気にすべきか

VBScript廃止の話を見て「AccessのVBAも使えなくなるのでは」と不安になる方がいます。その心配は現時点では不要です。

AccessのVBAで気にするべきことは、廃止そのものより保守性のほうです。VBAは書いた人以外には読めない状態になりやすく、担当者が退職すると誰も手が出せなくなります。また、VBEプロジェクトをパスワード保護し、そのパスワードが引き継がれないと、自社でもコードを確認できなくなるおそれがあります。こうした状態になると、将来的な書き換えが必要になったとき(VBScript依存のコードが見つかったときも含め)に身動きが取れなくなります。属人化の問題についてはAccess属人化の危険度と脱・属人化の進め方で整理しています。

VBScript依存のコードが含まれる可能性があり、かつ中身が確認できない状態のAccessは、今のうちに構造を把握しておくと対処の選択肢が広がります。

よくある質問

Q. VBScriptが廃止されたら、AccessのVBAコードを全部書き直すのですか。

全部書き直す必要はありません。Microsoftの公式ガイドが主に挙げているのは、外部.vbsファイルの実行とVBScript系ライブラリ(RegExpなど)の参照の2分類です。当社ではこれに加えてScriptControl(Language = "VBScript"指定)も確認することを推奨しています。VBEでこれら3語(VBScript・ScriptControl・.vbs)を検索し、参照設定にもVBScript系ライブラリがなければ、一次点検としては依存なしとみてよいでしょう。ただしこの検索は代表的な一次点検であり、ProgIDや.vbsのパスを動的に組み立てたコードは検出できません。最終確認にはVBScriptを無効にした検証環境での動作テストを組み合わせることをお勧めします。

Q. VBAとVBScriptは文法が同じなのに、なぜ別物なのですか。

同じVisual Basic系の文法を共有していますが、言語仕様と実行ホストが異なる別の言語です。VBAはOfficeのプロセス内で動くのに対し、VBScriptはWindowsのスクリプトホストエンジン上で動きます。データ型の扱いやエラー処理など、文法の土台が似ていても実装上の制約は別々です。

Q. FileSystemObjectやDictionaryを使っていますが、VBScriptの影響を受けますか。

受けません。これらはMicrosoft Scripting Runtime(scrrun.dll)の機能であり、VBScript(vbscript.dll)とは別のDLLです。廃止されるのはvbscript.dllであって、scrrun.dllは今回の廃止対象に含まれていません。公式VBAガイドの著者もコメント欄でこの点を明確にしています。

Q. On Error GoTo がVBScriptで使えないのはなぜですか。

VBScriptがラベルへの分岐構文を設計上サポートしていないためです。VBScriptはOn Error GoTo 0(エラー処理の解除)は使えますが、On Error GoTo ラベル(エラー発生後に特定の処理へ分岐する構文)は使えません。VBScriptを使う場面では主にOn Error Resume Nextでエラーを抑制し、エラー番号(Err.Number)を確認して処理します。AccessのVBAではOn Error GoTo ラベルが使えますが、ScriptControl経由でVBScriptコードを実行する場合は、その中でOn Error GoTo ラベルへの分岐は使用できません。VBAのエラー処理の書き方はAccess VBAのエラー処理入門にまとめています。

触れないAccessが「診断できるか」だけ、確かめませんか。

顧客データは送信不要。発注の義務もありません。

約2分・ファイル送信不要・発注義務なし/説明はオンライン・売り込みはしません