コンテンツにスキップ

Visual Basic for Applications

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。240b:250:8261:5a00:407d:4830:7bc4:38e0 (会話) による 2019年2月15日 (金) 13:31個人設定で未設定ならUTC)時点の版 (コード例)であり、現在の版とは大きく異なる場合があります。

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を使用することで、ExcelAccessWordOutlookPowerPointなど、Officeのアプリケーション・ソフトウェアの機能をカスタマイズしたり、拡張できる。

Microsoft OfficeシリーズにはVBAのソースコード作成・編集ソフトウェアおよびプログラム実行環境が最初から付属しているため、使用を始めるにあたり、Office以外の特別なソフトウェアの用意やセッティングを必要としない。文献やネット情報も多く、最低限の学習で誰でも手軽にプログラミングが始められる。また、プログラムの実行が容易なことも特徴である。C言語などではソースコードを書き上げてからコンピュータに実行させる前に機械語に変換して実行プログラム形式として出力するためのコンパイルおよびリンク(ビルド)作業が必要だが、VBAは疑似コード (Pコード) ベースのコンパイラ型およびインタプリタ型両方の性質を持っており[1]、ユーザーが記述したソースコードを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) と呼ばれる製品が出荷されている。

資格検定試験

いずれも、パソコンスクール運営の株式会社オデッセイ コミュニケーションズが実施する民間資格である。全国のパソコン教室などを会場に随時予約可能。受験料は1万数千円程度。

コード例

以下は、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プログラム(マクロウイルス)がファイルに仕込まれることがあるというセキュリティ上のリスクが発生する。特に、ファイルを開くと同時にVBAプログラムが自動実行されるようになっている場合、ファイルを開いただけでシステムに悪影響を及ぼすことになる。メールなどに添付する形で請求書や注文書を装うなどして送りつけられ、不用意に開くとネットバンキングのパスワードを盗まれたり、重要なファイルが削除されたりするなど、クライアントが大きなダメージを受けることがある。一時期は減少していたが、再び増加しつつあるという。[要出典][いつ?][要説明]

Office 2000 SP3以降はセキュリティが強化され、初期設定ではVBAマクロは無効化されている[2]。そのため、マクロを含むファイルを開いただけでプログラムが実行されることはないが、設定次第でセキュリティレベルを下げることもできてしまう[3]

脚注

外部リンク