MS_VBA - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- 戻る(Microsoft Office、Visual Basic)
- Visual Basic for Applications (VBA)
- Excel、Excel VBA
- Access、Access VBA
-
Microsoft Office シリーズに搭載されているプログラミング言語
-
.NET の中間言語(p コードマシン)と同様の仕組みを持ち、
コンパイラ型およびインタプリタ型両方の性質を持つ。 -
マイクロソフト社からライセンスを取得することで他のアプリケーションに
組み込むことも可能。
(ただし、VBA 6.5 / Office 2007 以降、このライセンスは停止されている模様。)
| 機能 | 内容 |
|---|---|
| オートメーション | 各種作業の自動化。参考:Office サーバー サイド オートメーション |
| ユーザー定義関数 | ユーザー定義関数を定義し、Excel のセルなどから呼び出せる |
| 画面の作成 | ユーザー独自のフォームを作成できる |
| アドイン | 様々なアドインを組み込むことができる |
補足(サーバー サイドでの使用は非推奨): 「オートメーション」は
クライアント(対話的なデスクトップ)での利用が前提である。
Office アプリケーションをサーバー上で無人実行することは
Microsoft が明確に非サポートとしている。
- ライセンス上の問題(各セッションに Office ライセンスが要る)
- ダイアログが出るとプロセスが応答待ちで止まる
- メモリ リーク・プロセスの残留
サーバー側で Excel ファイルを扱うなら、
ClosedXML / EPPlus / NPOI(.NET)など、
Office をインストールせずにファイル形式を直接扱うライブラリを使う。
1993 年(日本では 1994 年)に MS Excel 5.0 で実装
- 瞬く間に開発者の間で、Excel を使用して企業ソリューションを作成するツールとして
成功を収めた。 - AccessBASIC と WordBASIC を置き換え、Microsoft Project、Access と Word に
VBA が搭載された。
| 版 | 搭載 Office | 備考 |
|---|---|---|
| VBA 4.0(1996) | — | C++ で書かれ、オブジェクト指向言語となった |
| VBA 5.0(1997) | Office 97 | Outlook 97 は例外 |
| VBA 6.0 / 6.1(1999) | Office 2000 | COM アドインをサポート |
| VBA 6.2 | Office 2000 SR-1 | |
| VBA 6.3 | Office XP | |
| VBA 6.4 | Office 2003 | |
| VBA 6.5 | Office 2007 | 以降、他アプリケーション向けライセンスを停止 |
| VBA 7.0 | Office 2010 | 64 bit 対応 |
| VBA 7.1 | Office 2013 / 2016 / 2019 |
VB.NETをサポートする Visual Studio for Applications (VSA) は、
.NET Framework のバージョン 2.0 でサポート対象外となった。
Excelアドインを参照。
- Microsoft Office 2008 for Mac でサポートを一度廃止。
- Microsoft Office for Mac 2011 で復活
- 以降、廃止予定なしとのこと。
-
Office 2010 で導入。
-
移行の際に注意が必要(VBA移行)。
-
なんとなく、
- Node.js へ移行されつつある(Excelアドイン)ように見える。
- …が、過去資産もあるので廃止予定も無い。
- …が、新規投資も無さそうではある(VBA8 は無いかなと)。
補足(VBA7 の 64 bit 対応で詰まる点): VBA7 の最大の非互換は
**Declare文(Win32 API 呼び出し)**である。' 32 bit のみ(従来) Declare Function GetTickCount Lib "kernel32" () As Long ' 32/64 両対応(VBA7 以降) #If VBA7 Then Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long #Else Declare Function GetTickCount Lib "kernel32" () As Long #End If
PtrSafeキーワードが必須になった- ポインタ/ハンドルは
LongPtr型にする(Longのままだとクラッシュ)また 32 bit / 64 bit の Office では
32 bit 版 OCX / ActiveX が使えないため、
64 bit Office への移行で動かなくなる資産がある。
補足(最新化:VBA の現在): 「廃止予定も無いが、新規投資も無い」
という観測は概ねその通りで、状況は次のとおり。
項目 状況 VBA 本体 VBA 7.1 のまま。VBA 8 は出ていない 既定の無効化 インターネットから取得したファイルのマクロは既定でブロック(2022 年〜) 後継の位置 Office Script(TypeScript ベース、Excel on the web)/Power Automate 拡張機能 Office アドイン(HTML/JavaScript)が公式の拡張方式 マクロの既定ブロックは実務への影響が大きい。
配布する場合は信頼できる場所への配置か署名が必要になる。
-
Visual Basic for Applications - Wikipedia
https://ja.wikipedia.org/wiki/Visual_Basic_for_Applications -
Office VBA リファレンス | Microsoft Learn
https://learn.microsoft.com/office/vba/api/overview/
Tags: 移行, ツール類, Visual Basic, 移行, EUC