1. VBAとは何か
VBAは、Microsoftが提供する「イベント駆動型のVisual Basic 6系言語」を、アプリケーション側に内蔵して実行できるようにした仕組みです。ExcelやWordなどのアプリケーションに対して、「手作業を自動化するマクロ」や「独自の処理・ダイアログ」を追加できます。Microsoft Learn
VBAはもともとのVisual Basic 6(VB6)をベースにしていますが、VBAはアプリケーションに組み込まれた形で今も更新され、Officeの新機能への対応などは継続しています。コードはイベント(ブックを開いた、セルが変わった、メールを受信した等)に反応して動きます。Wikipedia+1
VBAは「アプリに貼りつく拡張言語」という位置づけなので、単体のコンパイラやランタイムをユーザーが別途インストールする、というよりは、ホスト(Excel等)に最初から同梱されているという考え方になります。Wikipedia
2. インタプリンタの場所・実行の仕組み
実行モデル(内部で何が起きているか)
VBAのコード(モジュールやフォームのコード)は、そのままテキストで走っているわけではありません。保存時にいったんMicrosoft独自の「P-Code(中間コード、疑似コード)」にコンパイルされ、Officeアプリ側にある仮想マシンがそれを実行します。WordやExcelなどのファイル形式(.docm / .xlsm 等)には、このP-Codeがドキュメント内部の別ストリームとして埋め込まれています。Wikipedia
つまり「VBAはインタプリタ式か?」というと、正確には「VBAエディタがコードをP-Codeに変換 → Office内蔵のVBAランタイム(仮想マシン)がそのP-Codeを実行する」という構造です。純粋な行単位インタプリタよりは、JITなしのVM実行に近いイメージです。Wikipedia
実行エンジン(VBE7.DLLなど)
Office製品にはVBAエディタ(VBE: Visual Basic Editor)とランタイムをまとめたDLLが含まれており、代表的なのが VBE7.DLL(VBA7系)。ExcelやAccessなどを起動すると、このDLLが読み込まれ、そこでVBAコードの編集・実行・デバッグが行われます。Stack Overflow+2Microsoft Learn+2
このDLLはWindows上では通常、次のような場所に置かれています(32bit Officeか64bit Officeかで若干異なりますが、どちらも「Microsoft Shared\VBA\VBA7.1」のようなフォルダ配下です):
-
例(32ビット版 Office の一例):
C:\Program Files (x86)\Common Files\Microsoft Shared\VBA\VBA7.1\VBE7.DLL -
例(Click-to-Run版 Office や64ビット環境):
C:\Program Files\Common Files\Microsoft Shared\VBA\VBA7.1\VBE7.DLL
または、Office内部の仮想化フォルダ配下として
...\Microsoft Office\Root\VFS\ProgramFilesCommonX64\Microsoft Shared\VBA\VBA7.1\VBE7.DLL
のようなパスで参照されるケースもあります。Microsoft Learn+2Stack Overflow+2
ポイントとしては、VBAは「外部に独立したexe」ではなく、Excel.exeやWinWord.exeなどホスト側が VBE7.DLL(等)をロードして、その中のVBA仮想マシンでP-Codeを走らせている、ということです。Wikipedia+2Microsoft Learn+2
3. 言語仕様(ざっくり)
VBAの文法はおおむねVB6と同じで、モジュール単位・手続き(プロシージャ)単位で書きます。よく出てくる要素は次のとおりです。Wikipedia+2Microsoft Learn+2
-
Subプロシージャ / Functionプロシージャ
Sub 名前(引数...) ... End Sub
Function 名前(引数...) As 型 ... End Function
Subは戻り値を返さない手続き、Functionは値を返す手続きです。イベントハンドラ(例:Workbook_Open)もSubとして書きます。Microsoft Learn -
Dim宣言
変数を宣言するときにDim x As Integerのように書きます。
Dimは「この名前の変数を用意し、型はこれです」という宣言です。型を省略するとVariantという「何でも入り得る型」になります。Microsoft Learn+1
Option Explicitをモジュール先頭に書くと、宣言していない変数名の使用を禁止でき、タイプミスによるバグを防げます。Stack Overflow -
型システム
Integer,Long,Double,String,Boolean,Date,Object,Variantなどの基本型があります。配列 (Dim arr() As Long) やユーザー定義型 (Type … End Type) も使えます。Microsoft Learn+1
VBAは静的型付けと動的型付けの両方を許す「ハイブリッド」です。Variantを多用すれば動的的に扱えますが、明示的にAs Longなどと書けばより型安全になります。VBA全体としては「強い/弱い型付けの両方を許す」混合的な性格と言われます。Wikipedia+2Microsoft Learn+2 -
オブジェクトモデルへのアクセス
一番大きい特徴は、ホスト(ExcelやOutlookなど)が公開しているオブジェクトに直接アクセスできることです。
例:Application.Workbooks("Book1.xlsx").Sheets("Sheet1").Range("A1").Value = 123のように、Excelが持つオブジェクトを直接操作します。これはOLE Automation / COMの型ライブラリを通じて公開されています。Wikipedia+2Microsoft Learn+2 -
イベント駆動
「ブックを開いた」「新しいメールを受け取った」といったイベント名に一致するSubを書くと、そのイベント発生時に自動実行されます。Outlookの受信イベントに反応するマクロなどが典型です。Microsoft Learn+1
4. どこで使われているか・現在の主な用途
Microsoft Office製品
VBAは主に次のデスクトップ版Officeアプリに組み込まれています。
-
Excel
-
Word
-
Access
-
Outlook
-
PowerPoint
-
Visio
(Mac版Officeにも基本的に搭載されています。例外的に古いOffice for Mac 2008では一度外されましたが、その後は復活しています。)Wikipedia+2Microsoft Learn+2
これらのアプリごとに「ホストのオブジェクトモデル」が違います。たとえばExcelではワークブック/ワークシート/セルが中心、Outlookではメールアイテムや受信イベントが中心、AccessではDAO/レポート/フォームが中心、というようにAPIが異なります。そのため、VBAの文法そのものは同じでも、同じコードがそのまま別アプリで動くとは限りません。GitHub+2Microsoft Learn+2
Microsoft以外の製品
VBAエンジンは、AutoCAD、ArcGIS、SolidWorksなどの一部のサードパーティ製デスクトップアプリにも組み込まれ、同じように自動化・拡張のスクリプト言語として使われています。つまり「業務用CADにVBAマクロを入れてボタン1つで社内レポートを生成する」といった使い方がいまも現役で存在します。Wikipedia+1
なぜ今でも使われるのか
-
ExcelやAccessと密着しているので、非エンジニアの業務担当者でも社内向けツールを素早く作れる
-
既存の膨大な業務マクロ資産(20年以上分)が動き続けており、互換性が非常に重視されている
-
データの整形・帳票出力・メール送信など、日々のオフィスワークを「ボタン一発」にできる
といった理由から、2025年現在も企業内業務フローで多用されています。Microsoft Learn+1
まとめ
-
VBAは Officeなどに内蔵されたVB6系の拡張・自動化言語です。Excel等の「中」で動き、イベント駆動でタスクを自動化します。Microsoft Learn+1
-
インタプリンタ(実行エンジン)は
VBE7.DLLなどのランタイムDLLとして各ホストアプリに同梱され、ソースをP-Code化したものをその仮想マシンが実行します。場所は...Microsoft Shared\VBA\VBA7.1\VBE7.DLLといった共通フォルダ配下(32/64ビットでパスが多少異なります)。Microsoft Learn+2Stack Overflow+2 -
言語仕様は VB6スタイル(
Sub,Function,Dim,Option Explicit等)で、静的型・動的型を両方許します。ホストのオブジェクトモデルに直接アクセスできるのが最大の特徴です。Wikipedia+3Microsoft Learn+3Microsoft Learn+3 -
利用場所は Excel / Word / Access / Outlook / PowerPoint / VisioなどのOffice製品、および一部の業務向けアプリ(CAD等)。社内業務の自動化・帳票化などで今も現役です。alooba.com+3Microsoft Learn+3Wikipedia+3