Skip to content
nishi_74322014 edited this page Aug 31, 2026 · 3 revisions

Visual Basic for Applications (VBA)

概要

  • Microsoft Office シリーズに搭載されているプログラミング言語

  • ExcelAccess
    Word、Outlook、PowerPoint などの機能を拡張できる。

  • .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 が搭載された。

VBA 4-7

搭載 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

VSA

VB.NETをサポートする Visual Studio for Applications (VSA) は、
.NET Framework のバージョン 2.0 でサポート対象外となった。

VSTO

Excelアドインを参照。

Office for Mac

  • Microsoft Office 2008 for Mac でサポートを一度廃止。
  • Microsoft Office for Mac 2011 で復活
  • 以降、廃止予定なしとのこと。

VBA7

  • 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)が公式の拡張方式

マクロの既定ブロックは実務への影響が大きい。
配布する場合は信頼できる場所への配置署名が必要になる。

参考


Tags: 移行, ツール類, Visual Basic, 移行, EUC

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally