VBAとマクロの違いって何?実際に動かしわかりやすく解説!

Excelなどでマクロを学ぼうとしたときに、専門的な用語が多くて理解しにくい時はないでしょうか。

けど、そんな中で悩むことは、

・そもそもマクロとVBAの違いがわからない
・マクロとVBAの使い分け方がわからない

ですよね。

今回は、

・マクロとVBAの違いについて実際にコードを動かしながら解説

します!

VBAとは何?

VBAとはなんでしょうか?

マクロより難しいイメージがありますね。

VBAとは「Visual Basic for Applications」の頭文字をとった用語で、Microsoft社製のプログラミング言語です。

ExcelやWord、パワーポイント、Outlook、AccessなどOffice製品を対象に自動化処理を実現することができます。

OfficeをインストールするとあわせてこのVBAも一緒に実装されますので、Officeがインストールされている環境であれば、追加インストールをする必要なく、即座に使うことができます。

マクロとは何?

次にマクロとはなにか解説します。

マクロとは、一般的なコンピュータ用語で、複数の操作や命令をぎゅっとまとめた機能集合体を意味します。

Microsoftはこのマクロの概念をOfficeに取り入れ、Officeアプリケーションの操作や命令など一連の処理をひとつにまとめた単位をマクロと定義づけています。

マクロとVBAの違いは何?

マクロとVBAの違いについて説明をします。

マクロとVBAの違いは、

①VBAはプログラミング言語を差し、マクロはVBAなどでOfficeに実装した機能を指す
②VBAはMicrosoftの用語である一方、マクロは一般用語であり、他の製品でも使われている
③VBAで作ったコードはマクロとして認識されるものとされないものがある

になります。

①については前述の通り、プログラミング言語と機能ということで概念自体が異なることがわかります。

②についてはマクロは他の製品でも用語として使われていますが、VBAはMicrosoftの背品だけしか使えません。

③については実際にサンプルコードを実装してみて、違いを確認してみましょう。

タカヒロ
タカヒロ
Google社の表計算ソフトスプレッドシートでも、自動化処理をまとめたものを「マクロ」と読んでいますね。

VBAをまとめる方法は2種類

VBAをまとめる方法は2種類あります。それはFunctionとSubで、それぞれ、Functionプロシージャ、Subプロシージャと呼んでいます。

プロシージャとはVBAの機能の最小単位を意味します。

書式 説明
Function <プロシージャ名>(<受け取る値>) As <返すデータ型>
・・・
End Function
命令の実行結果を呼び出し元に返します。
ワークシート関数として使用可能です。
Sub <プロシージャ名>(<受け取る値>)
・・・
End Sub
命令を実行します。戻り値はありません。またワークシート関数としては使用できません。

この2種類のプロシージャですが、VBAを実装したとしてもマクロとして認識されるのはSubプロシージャのみとなります。

タカヒロ

タカヒロ
Functionプロシージャ、Subプロシージャの違いの詳細については以下の記事でもまとめていますので、よろしければご参照ください。

VBAを実装してマクロと認識されるか確認する

VBAを実装してマクロと認識されるか確認をしてみましょう。

サンプルコード

サンプルコードは以下の通りです。

Function test1() As String
  test1 = "テスト出力1"
End Function

Sub test2()
  MsgBox "テスト出力2"
End Sub

Sub test3(strTemp As String)
  MsgBox strTemp
End Sub

VBAを実装する

実装手順は以下の通りです。

Excel側にVBAを実装していきます。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

マクロと認識されてるVBAを確認する

マクロと認識されてるVBAを確認してみましょう。

「開発」タブの「VBA」をクリックします。

3つのプロシージャのうち「test2」だけが認識されましたね。

つまり、それ以外のプロシージャはマクロとして認識されないということになります。

VBAがマクロと認識される条件

VBAがマクロと認識される条件については以下の通りとなります。

①Subプロシージャで定義されていること
②Subプロシージャに引数を割り当てていないこと

①Subプロシージャで定義されていること

VBAがマクロと認識される条件のうちの一つ目はSubプロシージャで定義されていることになります。

Function test1() As String
  test1 = "テスト出力1"
End Function

マクロとして認識されなかったFunctionプロシージャは計算結果を返す目的のプロシージャで、ワークシート関数のように単体で呼び出して使用するものとなりますので、マクロとは使用方法が異なるということがあげられます。

実施の使用方法です。
シートにFunctionプロシージャ名「test1()」をいれます。

シートに結果が表示されましたね。

②Subプロシージャに引数を割り当てていないこと

VBAがマクロと認識される条件のうちの二つ目はSubプロシージャで定義されていても引数を割り当てるとマクロとして認識されません。

Sub test3(strTemp As String)
  MsgBox strTemp
End Sub

プロシージャに引数を割り当てると、単体としては実行できないので、必ず引数を受け渡す上位プロシージャが必要になります。

マウロというよりはマクロを実現するための一パーツという位置づけになります。

引数付きSubプロシージャをマクロとして認識させる

実際に使う場合はメインプロシージャと組み合わせて使用します。

Sub test2_1()
  Call test3("テスト出力3")
End Sub

Sub test3(strTemp As String)
  MsgBox strTemp
End Sub

メインプロシージャの「test2_1」がマクロとして認識されましたね。

実行結果です。

Functionプロシージャをマクロとして認識させる

Functionプロシージャも同じ要領でメインプロシージャと組み合わせるとマクロとして認識されます。

サンプルコードはtest2_2プロシージャからFunctionプロシージャtest1を呼び出し、その返り値をtest3プロシージャへ受け渡し、ポップアップ表示させる内容となります。

Sub test2_2()
  test3 (test1)
End Sub

Function test1() As String
  test1 = "テスト出力1"
End Function

Sub test3(strTemp As String)
  MsgBox strTemp
End Sub

マクロとして認識されましたね。

実行結果です。

イベントプロシージャはマクロとして認識されない

また、Subプロシージャにあるイベントプロシージャでも同様のことが言えます。

イベントプロシージャとはセルを選択したり、シートを切り替えたりユーザ操作をきっかけにVBAが実行される機能のことで、引数を持つ形で実装されるので、同じくマクロとしては認識されません。
以下サンプルコードです。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  MsgBox "テスト出力4"
End Sub

実装しても

マクロとは認識されませんね。

Sheet1シートにVBAを実装しセルの選択を動かすと、VBAが実行されます。

さいごに

いかがでしょうか。

今回は、

・マクロとVBAの違いについて実際にコードを動かしながら解説

しました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です