エクセルの関数・マクロ・VBAが無料で分かる。
HOMEエクセル VBA > VBAの概要

VBAの概要

VBAとは、「Visual Basic for Applications」の略で、マイクロソフト社のOfficeアプリケーションで処理を自動実行するためのプログラミング言語です。 VBAでプログラミングすると、記録機能で作成したマクロではできないより複雑で柔軟性のある処理が実行できるようになります。


マクロ記録機能の欠点


・不要なコードが記述される
・繰り返しの操作や条件分岐ができない
・ユーザーが操作できない
・汎用性に欠ける
下矢印
VBAによるプログラミングで解決!

VBAの特徴

VBAは、オブジェクト指向のプログラミング言語と呼ばれています。これはつまり、「何に対してどう処理するのか」という記述の仕方をするからです。 「何」にあたるのが「オブジェクト」で、処理の対象となります。また、VBAはイベント駆動型プログラムでもあります。イベントとは、 処理を実行するきっかけとなる操作のことで、「ボタンをクリックした」とか、「ブックを開いた」というような操作がイベントにあたります。 VBAでは、何かのイベントをきっかけとして処理を自動的に実行させることができます。



記録機能で作成したマクロの弱点

マクロの記録機能では、マクロを手軽に作成できます。しかし、記録機能で作成したマクロでできることには限界があり、より実用的な処理をしたい場合にはVBAの知識が必要となります。 ここでは、記録機能で作成したマクロの限界を理解し、VBAによるプログラミングの必要性を確認しましょう。

不要なコードが記述される

たとえばマクロの記録機能で「セルA1のフォントを14ポイントで太字にし、セルA1〜G1のセルを連結して中央揃えにする」という操作をすると以下のように記録されます。 この中で必要なコードは赤枠部分だけですが、文字書式などは初期設定の値まで記録され、コードだけを見ると何を設定したのか分からなくなってしまいます。 VBAで、マクロを編集して必要なコードだけを残すことによりシンプルで見やすいコードになり、また処理スピードが早くなる場合もあります。

■マクロ記録により記述されたコード
Sub タイトルの書式()

    Range("A1").Select
    With Selection.Font
       Name = "MS Pゴシック"
       .Size = 14
       .Strikethrough = False
       .Superscript = False
       .Subscript = False
       .OutlineFont = False
       .Shadow = False
       .Underline = xlUnderlineStyleNone
       .ColorIndex = xlAutomatic
    End With
    Selection.Font.Bold = True
    Range("A1:G1").Select
    With Selection
       .HorizontalAlignment = xlCenter
       .VerticalAlignment = xlCenter
       .WrapText = False
       .Orientation = 0
       .AddIndent = False
       .IndentLevel = 0
       .ShrinkToFit = False
       .ReadingOrder = xlContext
       .MergeCells = False
    End With
    Selection.Merge

End Sub

赤字の部分が自動記録されたコードの中で必要な部分です。
それ以外の黒字の部分は自動記録されたコードの中の不要な部分です。


■VBEで編集して必要な部分だけを残したコード
Sub タイトルの書式()

    Range("A1").Select
    Selection.Size = 14
    Selection.Font.Bold = True

    Range("A1:G1").Select
    Selection.HorizontalAlignment = xlCenter

    Selection.Merge

End Sub

不要な部分を削除することで、見やすくシンプルなコードになります。
また、不要な部分が無いので、マクロの内容が分かりやすくなります。


繰り返し処理や条件分岐ができない

マクロ機能では、実際に行った操作のみが記録されます。そのため、条件によって違う処理をしたり、同じ処理を繰り返し実行する、といった動作を行うことができません。 VBAを使用すれば、セルの値が条件を満たすまで繰り返し同じ処理を実行したり、条件を満たす場合と、満たさない場合で異なる処理を実行するなど、 より複雑な処理が実行できるようになります。


ユーザーと対話できない

マクロで実行した操作は元に戻すことができません。記録機能で作成したマクロは、[マクロの実行]ボタンをクリックするとすぐに処理を実行するので、 間違えて実行してしまった場合には取り返しがつかなくなる場合があります。VBAでプログラミングすると、事前に確認のメッセージを表示したりすることで、 ユーザーの意思を確認することができます。


汎用性に欠ける

マクロの記録機能では、セル範囲の選択が固定となります。そのため、たとえば表の拡張によるセル範囲の変更に対応できず、汎用性に欠けます。 VBAを使用すれば、表の大きさが変更されても、それに応じた処理が実行でき、より柔軟で汎用的な処理をすることができます。



VBAを使用してマクロを作成するには

マクロの記録機能を使用せずに、VBAでマクロを作成するには、VBEを起動して直接コードを記述します。 ここでは、VBAを使用してマクロを作成するための一連の流れを紹介します。

作成したマクロはブックごとに保存されるので、マクロを保存したいブックを開いておきます。

表の項目に1行おきに色を付けるマクロを作成します。
VBEを起動してマクロをさくせいします。
VBEの起動

@[ツール]をクリック

A[マクロ]に合わせる

B[Visual Basic Editor]をクリック


VBEが起動します。

VBEが起動



[ユーザーフォームの挿入]の↓をクリック

C[ユーザーフォームの挿入]の↓をクリック

D[標準モジュール]をクリック


新しい標準モジュール

新しい標準モジュールが追加され、コードウィンドウが表示されました。

VBEの入力支援機能
VBAで直接コードを記述するには、プログラミングの知識が必要ですが、VBEにはより効率的にプログラミングできるように、構文チェック、入力候補のメソッドや プロパティの一覧を自動的に表示するなど、いろいろな入力支援機能が用意されています。そのため、プログラミングの初心者でも入力しやすい環境になっています。


E続けて以下のように入力


Sub 一行置きに色を付ける() '[一行置きに色を付ける]というマクロを記述する

    Dim i As Integer '整数型の変数iを宣言する
    Dim myRow As Integer '整数型の変数myRowを宣言する
    myRow = Range("A65536").End(xlUp).Row 'セルA65536(A列の一番下のセル)から上に向かってデータの入力されているセルを検索し、最初に見つかったセルの列番号を変数myRowに格納する
    For i = 4 To myRow Step 2 '変数iが4から変数myRowの値になるまで以下の処理を繰り返す
        Range(Cells(i,1),Cells(i,2)).Interior.ColorIndex = 36 '「i行目、1列目」のセルから「i行目、2列目」のセルまでのセル範囲の背景色を黄色に変更する
    Next i '変数iに2を足して6行目に戻る

End Sub 'マクロの記述を終了する

マクロの入力ができたら、Excelに切り替えます。

F[表示Microsoft Excel]をクリック

[表示Microsoft Excel]をクリック

Excelの画面に切り替わります。

Excelの画面に切り替わる

[マクロ]ダイアログボックスを表示して、作成したマクロを実行します。

G[ツール]をクリック

H[マクロ]に合わせる

I[マクロ]をクリック


マクロの実行

[マクロ]ダイアログボックスが表示され、VBEで作成したマクロのマクロ名が表示されます。

[マクロ]ダイアログボックスが表示される

J実行するマクロをクリック

K[実行]をクリック

マクロが実行された

マクロが実行され、表の範囲に1行置きに色が付きます。

表のデータが増えても、このマクロを実行すれば1行置きに色が付けられます。


VBEで作成したマクロの保存
VBEで作成したマクロは、Excelでブックを保存する時に同時に保存されます。VBEで保存する必要はありませんが、VBEで保存したい場合は[標準]ツールバーの[(ブック名)の上書き保存]ボタンをクリックして保存することができます。

ショートカットキーで[マクロ]ダイアログボックスを表示する
ショートカットキーを使用して[マクロ]ダイアログボックスを表示するには、[Alt]+[F8]キーを押します。素早く[マクロ]ダイアログボックスを表示する場合に便利です。



VBAの概要

記録機能でマクロを作成することの限界は、VBAでプログラミングすることにより補うことができます。VBAを使えば、より使いやすく、実用的なマクロを作成することができるようになります。 ここでは、VBAはどのようなプログラミング言語なのかということを説明します。


VBAの歴史

VBA(Visual Basic Applications)は、Basicというプログラミング言語を元に作成されています。Basicは「Beginner's All purpose Symbolic Instruction Code」の 略で、プログラミング初心者向きのわかりやすい言語です。
Basicの頃のコンピュータは、OSがMS-DOSだったため、文字を入力して操作するCUI(キャラクターユーザーインターフェイス)という環境でした。 Windowsが登場すると、画面上のボタンをクリックしたり、ウィンドウをドラッグしたりするなど、マウスを使って操作するGUI(グラフィカルユーザーインターフェイス)に 作業環境が変わりました。その環境の変化に対応するため、Visual Basicというプログラミングが開発され、Windows上で動作するアプリケーションが作成できるようになりました。 VBAは、Visual BasicをベースにマイクロソフトのOfficeアプリケーション用に開発されたプログラミング言語のことです。

VBAが使えるアプリケーション
VBAは、Office95のときは、Excel、Accessのみで利用できましたが、Office97では、Excel、Access、Word、PowerPointで利用できるようになりました。 そして、Office2000から、Excel、Access、Word、PowerPoint、OutlookとすべてのOfficeアプリケーションで利用できるようになりました。


オブジェクト指向型言語

Excelでは、「ブックを開く」、「ワークシートを選択する」、「セルを選択する」などの操作をします。VBAで処理を実行する時も、ブック、ワークシート、 セルなどが処理の対象になります。VBAでは、「何に対してどう処理する」という記述の仕方をします。そのため、まず最初に処理の対象は何かということを 指定する必要があります。処理の対象のことを「オブジェクト」と呼んでいます。そのため、VBAは「オブジェクト指向型言語」と言われています。


イベント駆動型プログラム

マクロが自動的に実行されるきっかけとなる操作を「イベント」といいます。VBAでは、「ブックを開くとき」、「シートに変更があったとき」、 「シートを選択したとき」など、ある操作をきっかけとして処理を自動的に実行するように指定することができます。 たとえば、「ブックを開いたときに、ブックを開いた日時をセルA1に表示する」といったことができます。VBAは、きっかけとなるイベントにより 処理が実行できることから、「イベント駆動型(イベントドリブン型)プログラム」と呼ばれています。


イベントプロシージャ
イベントによって実行するマクロのことをイベントプロシージャといいます。