Visual Basic for Applications

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

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

概要[編集]

VBA を学習し、使用することで、マイクロソフト社製のExcelAccessWordなどのアプリケーション・ソフトウェアの機能をカスタマイズしたり、拡張することができる。Microsoft OfficeシリーズのアプリケーションにはVBA用の統合開発環境が付属しており、最低限の学習で誰でも手軽にプログラミングが始められる。インタプリタ型の言語であり、コンパイル作業は不要である。

Microsoft Office専用という印象が強いが、実際にはマイクロソフト社からしかるべきライセンスを取得することで他のアプリケーションに組み込むことも可能である。実際、マイクロソフト社に買収される前のVisioにも搭載されていた。CADソフトのAutoCADMicroStation V8等にも搭載されている。

機能・用途[編集]

  • 定型業務の自動化、省力化。例えば、毎日更新されるデータを出社してからいちいち手入力し、手順を入力して計算させていた業務を、夜の間に自動でソフトを起動し、データを読み込ませ、朝までに分析させておくことができる。またマクロという操作手順の記録機能を使って、プログラムに関する知識が少ないユーザーでも、ある程度の定型業務の自動化を行うことができる。
  • 自分の使用目的への最適化。例えばある会社で、社員の一覧名簿を作成し、自社独自の給与体系に従い、各自の給与を自動で計算することができる。またその場合、考慮する数字を自動で参照して集計するなど、目的に応じた特殊な関数を作成することもできる(ユーザー定義関数という)。また、ユーザー独自のフォームを作成することができ、様々なプラグインを組み込むことなども可能である。

VBA の歴史[編集]

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

しかし、翌年にリリースした Office95や、1997年のOffice97において、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と呼ばれる製品が出荷されている。

コード例[編集]

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

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

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

Dim i As Integer
Dim j As Integer

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

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

Dim i As Integer
Dim j As Integer
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 As Double, 2 As Double, 3 As Double) As Variant

    Dim s As Double
    
    s = (1 + 2 + 3) / 2
    HERON = Sqr(s * (s - 1) * (s - 2) * (s - 3))

End Function

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

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

外部リンク[編集]