Excel VBAとマクロの違い

Excel であらかじめ指定した操作を自動で行ったりするには VBA を使ってプログラムを作成して実行しますが、 Excel で用意されているマクロの機能を使ってもマクロとして記録した操作をあとから自動で行うことができます。ここでは Excel VBA とマクロの違いについて解説します。

(Last modified: )

ExcelのマクロとVBAの関係

Excel での操作をマクロとして記録すると、操作した内容を順番にプログラムとして記録します。このとき使用されるプログラミング言語が VBA です。つまりマクロを記録するというのは VBA を使ったプログラムを自動的に作成しているのと同じです。マクロは VBA で記述されているので、 VBA の書き方を知っていればマクロとして記録されたプログラムをあとから自由に修正することができます。

このように VBA はマクロを記録するときに使われるプログラミング言語ですが、 VBA を使ってマクロの記録を使わずにゼロからプログラムを作成することもできます。作成したプログラムはマクロを実行するのと同じように呼び出して実行することができます。作成されたプログラムはマクロの記録で作られたものなのか、それとも VBA を使ってゼロから作られたものなのか区別はできません。

簡単な操作であればマクロをの記録を開始したあと実際に Excel 上で操作することで簡単に VBA のプログラムを作成できます。逆に非常に複雑な処理を行いたい場合、それを実際に Excel 上で操作して記録するのは現実的ではありません。 VBA を使ってプログラムを最初から作成した方が簡単です。

マクロの記録で作成されたVBAのプログラム

それでは実際にマクロを記録して、どのような VBA のプログラムが作成されるのかを確認してみます。「開発」タブをクリックしてください。

マクロの記録で作成されたVBAのプログラム(1)

リボンが表示されたら、「コード」グループの中の「マクロの記録」をクリックしてください。

マクロの記録で作成されたVBAのプログラム(2)

記録するマクロの名前や保存場所を設定するダイアログが表示されます。今回はデフォルトのままとし、マクロ名は「Macro1」としました。設定が終わりましたら「OK」をクリックしてください。これ以降の Excel での操作内容が記録されます。

マクロの記録で作成されたVBAのプログラム(3)

今回は記録する操作として D3 セルに計算式を入力しました。

マクロの記録で作成されたVBAのプログラム(4)

マクロの記録を終了します。「開発」タブをクリックしリボンが表示されたら、「コード」グループの中の「記録終了」をクリックしてください。

マクロの記録で作成されたVBAのプログラム(5)

マクロの記録が終了しました。

それではマクロがどのように記録されているのかを確認してみます。「開発」タブをクリックしリボンが表示されたら、「コード」グループの中の「Visual Basic」をクリックしてください。

マクロの記録で作成されたVBAのプログラム(6)

Visual Basic Editor が起動します。

マクロの記録で作成されたVBAのプログラム(7)

マクロを記録すると「標準モジュール」が追加されます。追加されたモジュールをダブルクリックしてください。

マクロの記録で作成されたVBAのプログラム(8)

コードウィンドウ内に先ほどマクロとして記録された VBA のプログラムが表示されます。(シングルクォーテーション( ' )のあとに記述されているのはコメントなので省略しています)。

Sub Macro1()
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=RC[-2]+RC[-1]"
    Range("D3").Select
End Sub

マクロの記録で作成されたVBAのプログラム(9)

マクロを記録するときにマクロ名として「Macro1」を指定しました。そのマクロ名が Sub プロシージャ名として Sub Macro1() のように使用されています。そして記録した操作と同じことを実行できるコードが Sub プロシージャ内に VBA を使って記述されています。

このように Excel でマクロを記録すると、 VBA のプログラムが作成されて保存されていることが確認できました。このプログラムを実行すると、マクロの記録をしたときに行ったのと同じ操作が実行されます。

なおマクロを実行すると、実行するときに選択したマクロ名が付いた Sub プロシージャが呼び出されてプログラムが実行されます。

マクロのプログラムをVBAで修正する

マクロの記録によって作成された VBA プログラムを修正してみます。コードウィンドウ上で次のようにプログラムを書き換えました。

Sub Macro1()
    ActiveCell.FormulaR1C1 = "=RC[-2]*RC[-1]"
End Sub

マクロのプログラムをVBAで修正する(1)

元々記録されていたマクロは、現在アクティブなセルの値として、アクティブセルの 2 つ左のセルの値とアクティブセルの 1 つ左のセルの値を加算した結果を入力するものでした。今回は加算ではなく乗算するように書き換えています( +* に変更していあす)。

このように記録されたマクロは VBA を使ったプログラムとして保存されているので、 VBA の構文を知っていればマクロとして記録されたプログラムをあとから修正することができます。

それでは修正されたマクロを実際に実行してみます。 D2 セルをクリックして選択したあと、「開発」タブをクリックしてください。

マクロのプログラムをVBAで修正する(2)

リボンが表示されたら「コード」グループの中の「マクロ」をクリックしてください。

マクロのプログラムをVBAで修正する(3)

「マクロ」ウィンドウが開きます。実行するマクロ名をクリックして選択したあと「実行」をクリックしてください。

マクロのプログラムをVBAで修正する(4)

元々のマクロの記録を VBA を使って修正したものが実行されました。アクティブセルの 2 つ左のセルの値とアクティブセルの 1 つ左のセルの値を乗算した結果がアクティブセルに入力されました。

マクロのプログラムをVBAで修正する(5)

実行したマクロの名前は元々マクロの記録で保存したものでしたが、実際にマクロをの実行で行われたのは先ほど VBE で修正したプログラムでした。

なおマクロの記録によって作成された Sub プロシージャも、ゼロから VBA で作成した Sub プロシージャと違いはないので、 Visual Basic Editor 上で実行することもできます。

マクロのプログラムをVBAで修正する(6)

VBAのプログラムをマクロのように実行する

今度はゼロから VBA で作成したプログラムを、 Excel のシート上からマクロと同じように実行してみます。 Excel VBA Editor を開いてください。

VBAのプログラムをマクロのように実行する(1)

マクロの記録によって作成された Sub プロシージャの下に、次のように記述してください。

Sub 乱数設置()
    Dim rStart
    Dim cStart
    
    rStart = ActiveCell.Row
    cStart = ActiveCell.Column
    
    Randomize
    
    For rCount = 0 To 4
        For cCount = 0 To 4
            Cells(rStart + rCount, cStart + cStart).Value = Int(25 * Rnd + 1)
        Next cCount
    Next rCount
End Sub

VBAのプログラムをマクロのように実行する(2)

※ 同じモジュールの中に複数の Sub プロシージャを記述すると、自動的に間に横棒が表示されます。

簡単に説明すると、アクティブセルを左上のセルとして、そこから 5 行 5 列のセルに 1 から 25 までの乱数を入力するものです。このようなプログラムはマクロの記録を使って作成するよりも直接 VBA を使って作成した方が簡単です。

VBA を使ってゼロから作成したプログラムも、マクロの記録で作成されたプログラムと同じように実行することができます。 Excel のシートで B4code> セルをクリックして選択したあと、「開発」タブをクリックしてください。

VBAのプログラムをマクロのように実行する(3)

リボンが表示されたら「コード」グループの中の「マクロ」をクリックしてください。

VBAのプログラムをマクロのように実行する(4)

「マクロ」ウィンドウが開きます。マクロ名の中に先ほど VBA を使って作成した Sub プロシージャのプロシージャ名がマクロ名として表示されているのでクリックして選択したあと「実行」をクリックしてください。

VBAのプログラムをマクロのように実行する(5)

プログラムが実行されてアクティブセルの位置から 5 行 5 列のセルに 1 から 25 までの乱数が入力されました。

VBAのプログラムをマクロのように実行する(6)

このように VBA を使って作成したプログラムも、マクロの記録で作成したマクロと同じように実行することができます。

-- --

Excel VBA とマクロの違いについて解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。