VBAとは

VBAとはVisual Basic for Applications(ビジュアル・ベーシック・フォー・アプリケーション図)の略で、マイクロソフトOfficeの各アプリケーション(ExcelやWordなど)に内蔵されているプログラム言語です。

Visual Basicとは

Visual Basic for ApplicationsのBasicとはコンピューターのBASIC言語のことです。

BASICとはBeginner’s All purpose Symbolic Instruction Codeの略で 初心者向けの汎用命令コードのことです。

このBASIC言語には以下のような特徴があります。

  • 初心者(非プログラマー)でもプログラムしやすい
  • 汎用言語(会計用とかアプリ制御用とかに特化していない)

Visual Basic(ビジュアル・ベーシック)はこのBASICの言語仕様を基にしたコンピューター言語製品です。

Visual Basicを略してVB(ブイビー)とも呼ばれます。

Visualという名前の通り、視覚的にプログラムを開発できます。

単体のVisual Basicはサポート終了

単体の言語製品としてのVisual Basicは既にサポートが終了しています。

後継製品は一応、Visual Basic .NETなのですが、Visual Basicからかなり仕様が変更されたため、Visual Basicとは違う系統の言語製品と捉えられることが多いと思います。

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の違いとはプログラム知識を必要とするか否かです。

マクロ
プログラム知識がなくても使える機能
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???

・・・と思う方も多いと思いますが、大量のメール処理が必要な業務ではOutlookのVBAは便利です。

特定のメールを受信時に自動で返事を書く、複雑なHTMLメールを自動生成する、などの処理がVBAで記述できます。

Access

AccessはVBAによるプログラムが必須の唯一のOfficeアプリです。

ExcelやWordなど他のOfficeアプリが基本的にはプログラム(VBA)知識不要で使えるのに対し、AccessはVBAを使ってデータベースプログラムを作るためのプラットフォームだからです。

Excelのような表形式データでなく、RDB(リレーショナルデータ)形式のデータを処理できます。

Access 2019
マイクロソフト
2台までのWindows PCで利用可能

オブジェクトとは

VBAのプログラムを作成するためには大きく2つの知識が必要です。

  • Visual Basic言語の知識
  • Officeアプリのオブジェクトの知識

Visual Basic言語の知識とはif文とかfor文とか言ったプログラム言語の知識です。

こちらは前述の通り、初心者向けのBASIC言語ですから覚えるのは比較的簡単だと思います。

それよりも難しいのはOfficeアプリの「オブジェクト」の知識です。

VBAによるプログラムは基本的に

  1. 操作したいオブジェクトを特定する
  2. オブジェクトを操作する

の繰り返しです。

そしてオブジェクトには大きく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プログラムに慣れてからイベントを学習するのがおすすめです。

コメント