Visual Basic for Applications

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索
Visual Basic for Applications (VBA)
登場時期 1993
設計者 マイクロソフト
開発者 マイクロソフト
最新リリース 7.1 (Office 2013)
型付け 型システム
影響を受けた言語 QuickBASIC
Microsoft Visual Basic
プラットフォーム Microsoft Windows
macOS
ライセンス Proprietary EULA

Visual Basic for Applications(ビジュアルベーシック・フォー・アプリケーションズ、VBA)は、マイクロソフト製のMicrosoft Officeシリーズに搭載されているプログラミング言語である。

概要[編集]

マイクロソフトが1990年代に開発していた汎用プログラミング言語Microsoft Visual Basicを、同社製品のMicrosoft Officeに搭載したものがVBAである。VBA を使用することで、ExcelAccessWordなど、Officeのアプリケーション・ソフトウェアの機能をカスタマイズしたり、拡張したりすることができる。

Microsoft OfficeシリーズにはVBAのコード作成・編集ソフトが最初から付属しているため、使用を始めるにあたり、Office以外の特別なソフトの用意やセッティングを要しない。文献やネット情報も多く、最低限の学習で誰でも手軽にプログラミングが始められる。実行も容易で、C言語などではソースコードを書き上げてからコンピュータに実行させる前に機械語に変換して実行プログラム形式として出力するためのコンパイルおよびリンク(ビルド)作業が必要だが、VBAはこの手順が自動で、書いたコードを1アクションで直接コンピュータに実行させることができる。手軽に利用できる一方で、汎用プログラム言語に共通の機能は一通り備え、高度な機能まで修得しようとすると相応の学習が必要である。

機能・用途[編集]

  • 定型業務の自動化、省力化。例えば、毎日更新されるデータを出社してからいちいち手入力し、手順を入力して計算させていた業務を、夜の間に自動でソフトを起動し、データを読み込ませ、朝までに処理させておくことができる。またマクロ記録/再生という操作手順の記録/再生機能を使って、プログラムに関する知識が少ないユーザーでも、ある程度の定型業務の自動化を行うことができる。
  • 特定の使用目的への最適化。例えばある会社で、社員の一覧名簿を作成し、自社独自の給与体系に従い、各自の給与を自動で計算することができる。またその場合、考慮する数字を自動で参照して集計するなど、目的に応じた特殊な関数を作成することもできる(ユーザー定義関数という)。また、ユーザー独自のフォームを作成することができ、様々なプラグインを組み込むことなども可能である。
  • Officeの使用に特化しMicrosoft Office専用という印象が強いが、限定的ながらInternet ExplorerなどOffice以外のソフトを制御する機能が与えられている。またマイクロソフト社からしかるべきライセンスを取得することで他のアプリケーションに組み込むことも可能である。実際、マイクロソフト社に買収される前のVisioにも搭載されていた。CADソフトのAutoCADMicroStation V8等にも搭載されている。

VBA の歴史[編集]

1994年、マイクロソフトはExcel 5.0とともにVBAをリリースした。それは従来までのマクロ言語の代替でしかなかった。

しかし、翌年にリリースしたOffice 95や、1997年のOffice 97において、Excel以外のアプリケーション、すなわちAccessやWordにもVBAを搭載していった。合わせてVBAの仕様拡張も行われ、VBAはOffice製品に共通したプログラミング言語として確立される。

近年の動向[編集]

VBAは、同社のVisual Basicから派生した言語であり、Visual Basicと同様、ActiveXを使用することで既存資源の流用も可能である。ただ、近年[いつ?]マイクロソフト社はActiveX/Component Object Modelから.NET Frameworkへの転換を進めており、Microsoft Office System 2003には従来版にあった「Developer Edition」(VBAカスタムアプリケーション開発用のパッケージ)が存在せず、替わりにVisual Studio Tools for the Microsoft Office System (のちのVisual Studio Tools for Office) と呼ばれる製品が出荷されている。

コード例[編集]

以下は、Excelにおいて、「Alpha」という名前のワークシートを削除するVBAの例である。

Application.DisplayAlerts = False
Worksheets("Alpha").Delete
Application.DisplayAlerts = True

また、Excelで以下のコードを実行すると、セルA1からI9の範囲に掛け算九九の表を作成することができる。

For i = 1 To 9
    For j = 1 To 9
        Cells(i, j).Value = i * j
    Next
Next

下記のように配列を用いて、全ての値を配列に格納した上で一度に出力するように上記のコードを書き換えると、高速に動作するコードになる。

Dim KukuArray(8, 8) As Integer

For i = 1 To 9
    For j = 1 To 9
        KukuArray(i - 1, j - 1) = i * j
    Next
Next

Range("A1:I9").Value = KukuArray

条件によって4色以上に色を塗り分けるときも、VBAを利用する(3色以下のときは一般機能の「条件付き書式」を使用するのが望ましい)。以下のコードを実行するとセルB2からE15までの範囲内のセルを5以下→水色、6以上10以下→明るい緑、11以上15以下→黄色、16以上→赤と塗り分けることができる。

Dim myCell As Range

For Each myCell In Range("B2:E15")
    Select Case myCell.Value
    Case Is <= 5
        myCell.Interior.Color = RGB(0, 255, 255)
    Case 6 To 10
        myCell.Interior.Color = RGB(0, 255, 0)
    Case 11 To 15
        myCell.Interior.Color = RGB(255, 255, 0)
    Case Is > 15
        myCell.Interior.Color = RGB(255, 0, 0)
    End Select
Next

以下は、VBAと共にExcelごとプログラムを終了するVBAの例である。

Application.Quit

ユーザー定義関数[編集]

VBAを用いて、ユーザーが新たに関数を作成することもできる。ユーザー定義関数を作成するにはFunctionプロシージャを用いる。以下はHERONという名でヘロンの公式を用いるユーザー定義関数のコードである。実用には、負の値や三角条件を満たさない値が入力されることを想定して、下記のコードにエラー処理ルーチンを追加しておくことが望ましい。

定義したユーザー定義関数は通常の(組み込みの)ワークシート関数同様、数式の中で用いることで呼び出す。この例で言えば、=HERON(3,4,5)とセルに入力すると、数式を入力したセルに演算結果として6と出力される。

Function HERON(1, 2, 3) As Variant
    
    s = (1 + 2 + 3) / 2
    HERON = Sqr(s * (s - 1) * (s - 2) * (s - 3))

End Function

VBAのセキュリティ問題[編集]

VBAで記述したプログラムはExcelなどのファイルの一部として格納される。そのため、ファイルを開くと同時に自動実行されるようになっている悪意のあるVBAプログラム(マクロウイルス)で、重要なファイルが削除されるなど、クライアントが大きなダメージを受けることがある。この危険性は、各アプリケーション上でのセキュリティ設定や、ウイルス対策ソフトの導入などによって回避することができる。

外部リンク[編集]