- Home ›
- Excel VBA入門 ›
- VBA基礎知識
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 のプログラムが作成されるのかを確認してみます。「開発」タブをクリックしてください。
リボンが表示されたら、「コード」グループの中の「マクロの記録」をクリックしてください。
記録するマクロの名前や保存場所を設定するダイアログが表示されます。今回はデフォルトのままとし、マクロ名は「Macro1」としました。設定が終わりましたら「OK」をクリックしてください。これ以降の Excel での操作内容が記録されます。
今回は記録する操作として D3
セルに計算式を入力しました。
マクロの記録を終了します。「開発」タブをクリックしリボンが表示されたら、「コード」グループの中の「記録終了」をクリックしてください。
マクロの記録が終了しました。
それではマクロがどのように記録されているのかを確認してみます。「開発」タブをクリックしリボンが表示されたら、「コード」グループの中の「Visual Basic」をクリックしてください。
Visual Basic Editor が起動します。
マクロを記録すると「標準モジュール」が追加されます。追加されたモジュールをダブルクリックしてください。
コードウィンドウ内に先ほどマクロとして記録された VBA のプログラムが表示されます。(シングルクォーテーション( '
)のあとに記述されているのはコメントなので省略しています)。
Sub Macro1() Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "=RC[-2]+RC[-1]" Range("D3").Select End Sub
マクロを記録するときにマクロ名として「Macro1」を指定しました。そのマクロ名が Sub プロシージャ名として Sub Macro1()
のように使用されています。そして記録した操作と同じことを実行できるコードが Sub プロシージャ内に VBA を使って記述されています。
このように Excel でマクロを記録すると、 VBA のプログラムが作成されて保存されていることが確認できました。このプログラムを実行すると、マクロの記録をしたときに行ったのと同じ操作が実行されます。
なおマクロを実行すると、実行するときに選択したマクロ名が付いた Sub プロシージャが呼び出されてプログラムが実行されます。
マクロのプログラムをVBAで修正する
マクロの記録によって作成された VBA プログラムを修正してみます。コードウィンドウ上で次のようにプログラムを書き換えました。
Sub Macro1() ActiveCell.FormulaR1C1 = "=RC[-2]*RC[-1]" End Sub
元々記録されていたマクロは、現在アクティブなセルの値として、アクティブセルの 2 つ左のセルの値とアクティブセルの 1 つ左のセルの値を加算した結果を入力するものでした。今回は加算ではなく乗算するように書き換えています( +
を *
に変更していあす)。
このように記録されたマクロは VBA を使ったプログラムとして保存されているので、 VBA の構文を知っていればマクロとして記録されたプログラムをあとから修正することができます。
それでは修正されたマクロを実際に実行してみます。 D2
セルをクリックして選択したあと、「開発」タブをクリックしてください。
リボンが表示されたら「コード」グループの中の「マクロ」をクリックしてください。
「マクロ」ウィンドウが開きます。実行するマクロ名をクリックして選択したあと「実行」をクリックしてください。
元々のマクロの記録を VBA を使って修正したものが実行されました。アクティブセルの 2 つ左のセルの値とアクティブセルの 1 つ左のセルの値を乗算した結果がアクティブセルに入力されました。
実行したマクロの名前は元々マクロの記録で保存したものでしたが、実際にマクロをの実行で行われたのは先ほど VBE で修正したプログラムでした。
なおマクロの記録によって作成された Sub プロシージャも、ゼロから VBA で作成した Sub プロシージャと違いはないので、 Visual Basic Editor 上で実行することもできます。
VBAのプログラムをマクロのように実行する
今度はゼロから VBA で作成したプログラムを、 Excel のシート上からマクロと同じように実行してみます。 Excel VBA Editor を開いてください。
マクロの記録によって作成された 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
※ 同じモジュールの中に複数の Sub プロシージャを記述すると、自動的に間に横棒が表示されます。
簡単に説明すると、アクティブセルを左上のセルとして、そこから 5 行 5 列のセルに 1 から 25 までの乱数を入力するものです。このようなプログラムはマクロの記録を使って作成するよりも直接 VBA を使って作成した方が簡単です。
VBA を使ってゼロから作成したプログラムも、マクロの記録で作成されたプログラムと同じように実行することができます。 Excel のシートで B4code> セルをクリックして選択したあと、「開発」タブをクリックしてください。
リボンが表示されたら「コード」グループの中の「マクロ」をクリックしてください。
「マクロ」ウィンドウが開きます。マクロ名の中に先ほど VBA を使って作成した Sub プロシージャのプロシージャ名がマクロ名として表示されているのでクリックして選択したあと「実行」をクリックしてください。
プログラムが実行されてアクティブセルの位置から 5 行 5 列のセルに 1 から 25 までの乱数が入力されました。
このように VBA を使って作成したプログラムも、マクロの記録で作成したマクロと同じように実行することができます。
-- --
Excel VBA とマクロの違いについて解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。