
VBAとは
VBAとはVisual Basic for Applications(ビジュアル・ベーシック・フォー・アプリケーション図)の略で、マイクロソフトOfficeの各アプリケーション(ExcelやWordなど)に内蔵されているプログラム言語です。
VBAの土台となっているのは汎用言語であるVisual Basicです。
Visual BasicのBASICとはBeginner’s All purpose Symbolic Instruction Codeの略で初心者向けのプログラミング言語です。
BASIC言語には以下のような特徴があります。
- 初心者(非プログラマー)でもプログラムしやすい
- 汎用言語(会計用とかアプリ制御用とかに特化していない)
Visual Basic(ビジュアル・ベーシック)はこのBASICの言語仕様を基にしたコンピューター言語製品です。
Visual Basicを略してVB(ブイビー)とも呼ばれます。
Visualという名前の通り、視覚的にプログラムを開発できます。
単体のVisual Basicはサポート終了
単体の言語製品としてのVisual BasicはWindowsアプリの開発に広く使われた時代もありましたが、すでにサポートが終了しています。
後継製品は一応、Visual Basic .NETなのですが、Visual Basicからかなり仕様が変更されたため、Visual Basicとは違う系統の言語製品と捉えられることが多いと思います。
VBSも非推奨
VBS(Visual Basic Scripting Edition)とはWindows標準のスクリプト言語です。
その名の通り、Visual Basicに似た文法でスクリプトファイル(拡張子.vbs)を記述できます。
VBSからマイクロソフトOfficeの操作も可能です(ただし、VBSとOffice間でプロセス間通信が発生するためパフォーマンスの問題はあります)。
現在、マイクロソフトはVBSを非推奨としており、Windows標準でなく必要な人だけが有効化する位置づけになるとしています。
そのため現在、自動化等でVBSを利用しているなら、Pythonなど他のソリューションに移行するのがおすすめです。
for Applicationsの意味
ではそんなVisual Basicに「for Applications」がつくVisual Basic for Applications (VBA)の実体はというと、アプリケーションの開発者がVisual Basicの機能をアプリ内に組み込むためのライブラリ(プログラム部品)です。
ExcelなどのOfficeアプリケーションはこのVBAを組み込んでいます。
また、VBAは別にOfficeアプリケーション専用ではありません。
IE(インターネット・エクスプローラー)やAutoCAD(オートデスク社のCADソフト)などにもVBAが組み込まれています。
VBAが生き残る理由
単体のVisual Basicはすでにサポート終了したのに対し、VBAは現在でも広く使われています。
でも、VBAもいずれVisual Basic .NET for Applicationsになるのでは?
と思われるかもしれません。
しかし、Visual Basic .NETはBasicと名が付くものの非プログラマーでも簡単に習得できるようなプログラム言語ではありません。
例えばExcelを使う事務職の人がVisual Basic .NETでExcel作業を自動化するのはハードルが高いかと思います。
さらに前述の通り、Visual Basicとの互換性もないため、もしマイクロソフトOfficeのVBAがVisual Basic .NETになったら今までに作成されたVBAプログラムを書き換えなければなりません。
そうしたプログラマーでなくても扱える簡単さと過去の資産がある限り、VBAは生き残ると思われます。
マクロとVisual Basicの違い
OfficeアプリではこのVBAを「Visual Basic」と表記している箇所と「マクロ」と表記している箇所があります。

例えば「Excelマクロ」と言ったり、「Excel VBA」と言ったりで混乱している人も多いのではないでしょうか。
コンピューターの文脈でいう「マクロ」の本来の意味は「一連の単純な手順を実行する機能」です。
しかし、現在のマイクロソフトOfficeアプリに「一連の単純な手順を実行する機能」はありません。
何かの処理を自動で実行するためにはVisual Basicのプログラムが必要です。
Visual Basicのプログラムを自動生成
いくら初心者向けとはいえVisual Basicは汎用プログラム言語です。
ある程度は勉強しないとプログラムは書けません。
しかし、まったくVisual Basicの知識がなくてもプログラムを作れる機能があります。
それが「マクロの記録」です。
マクロの記録とは手動でのOfficeアプリの操作からVisual Basicのプログラムを自動生成する機能です。
そうして記録されたマクロの「実行」すると自動生成されたVisual Basicのプログラムが実行されます。
プログラム知識を必要とするか否かの違い
つまり、OfficeアプリでのマクロとVisual Basicの違いとはプログラム知識を必要とするか否かです。
VBAで何ができるのか
VBAが一番使われているのはExcelではないでしょうか。
そのためかVBAによるExcel操作の自動化は有名ですが、Excel以外ではどんなことができるのでしょうか。
PowerPoint
Excelの次にVBAによる自動化がイメージしやすいのはPowerPointかと思います。
標準にないアニメーションのVBAでの作成ですね。
他にもデータベースやExcel等のデータからPowerPointの表内に値を設定するなどの操作はVBAで自動化できます(Excelで計算してPowerPointで転記している人は多いのではないでしょうか)。
Word
VBAでデータベースやExcel等の内容等から文書を自動生成する、逆に文書の情報をデータベース等に出力するなどが可能です。
ただ、Wordは差し込み印刷やフィールドコードなどVBAを使わずに文書の一部を動的に変更できる機能も充実しているため、VBAで文書自動生成までやる必要がある場面は少ないかもしれません。
Outlook
……と思う方も多いと思いますが、大量のメール処理が必要な業務ではOutlookのVBAは便利です。
特定のメールを受信時に自動で返事を書く、複雑なHTMLメールを自動生成する、などの処理がVBAで記述できます。
Access
AccessはVBAによるプログラムが必須の唯一のOfficeアプリです。
ExcelやWordなど他のOfficeアプリが基本的にはプログラム(VBA)知識不要で使えるのに対し、AccessはVBAを使ってデータベースプログラムを作るためのプラットフォームだからです。
Excelのような表形式データでなく、RDB(リレーショナルデータ)形式のデータを処理できます。
オブジェクトとは
VBAのプログラムを作成するためには大きく2つの知識が必要です。
- Visual Basic言語の知識
- Officeアプリのオブジェクトの知識
Visual Basic言語の知識とはif文とかfor文とか言ったプログラム言語の知識です。
こちらは前述の通り、初心者向けのBASIC言語ですから覚えるのは比較的簡単だと思います。
それよりも難しいのはOfficeアプリの「オブジェクト」の知識です。
VBAによるプログラムは基本的に
- 操作したいオブジェクトを特定する
- オブジェクトを操作する
の繰り返しです。
そしてオブジェクトには大きく3つの機能があります。
- プロパティ
- メソッド
- イベント
プロパティ
プロパティとはオブジェクトが持っている値をVisual Basicの代入構文で読み書きする機能です。
'A1セルのオブジェクトを特定する Set object = Range("A1") '「Value」プロパティでA1セルの値を読み出し、Visual Basicの変数に保存 v = object.Value '「Value」プロパティでA1セルの値を書き込む object.Value = 123
メソッド
メソッドとはVisual Basicの関数呼び出し構文でオブジェクトに特定の動作をさせる機能です。
'A1セルのオブジェクトを特定する Set object = Range("A1") '「Select」メソッドでA1セルを選択状態にする object.Select
イベント
イベントとはオブジェクトからの通知をVisual Basicの関数定義構文で受け取る機能です。
'ワークシート変更時にイベントを受け取る関数を定義する Private Sub Worksheet_Change(ByVal object As Range) '変更された範囲にA1セルが含まれるなら If Not Intersect(object, Range("A1")) Is Nothing Then MsgBox "A1セルの値が変更されました" End If End Sub
上のWorksheet_Change関数はExcelが呼び出します。
自分のVBA関数から呼ばれることはありません。
これはプロパティやメソッドに比べるとわかりづらい概念です。
また、対話的なプログラムでなく順番に処理を実行していくだけのプログラムなら基本的にイベントは不要です。
そのため、VBAの学習順序としてはとりあえず、オブジェクトの特定方法とプロパティ・メソッドを覚え、ある程度VBAプログラムに慣れてからイベントを学習するのがオススメです。
VBAを学ぶ
VBAはプログラマーだけでなく、Excelを使う事務や営業など非プログラマーの人が独学で開発している職場も多いのではないでしょうか。
そうした「VBA担当者」のような人がよく読んでいるのが「VBAエキスパート公式テキスト」です。
VBAエキスパート試験向けの本のため特に、
ような人にはVBAの知識(試行錯誤でいじっているだけではわからない部分)を網羅的に学べます。
ただ、
- 前任者からVBAを引き継いだばかり
- 上司からExcel作業をVBAで自動化するように言われたばかり
で何をどうしたらいいかわからない場合は本を読むだけではVBAで開発できるようにはなりません。
VBA以外のプログラム言語でも同じですが、実際に手を動かしてプログラミングする必要があります。
そうした場合はオンラインのVBA基礎コースで手を動かしてVBAプログラムスキルを身につけてから、VBAエキスパート公式テキストで知識を補強するのが効率がいいかと思います。
コメント
vbsの終了が約束されたので、vbaも危ないのかなあと思ってみたり
.netにしない宣言もあったしPythonになるかも?