Excelなどでマクロを学ぼうとしたときに、専門的な用語が多くて理解しにくい時はないでしょうか。
けど、そんな中で悩むことは、
・マクロとVBAの使い分け方がわからない
ですよね。
今回は、
します!
もくじ
VBAとは何?
VBAとはなんでしょうか?
マクロより難しいイメージがありますね。
VBAとは「Visual Basic for Applications」の頭文字をとった用語で、Microsoft社製のプログラミング言語です。
ExcelやWord、パワーポイント、Outlook、AccessなどOffice製品を対象に自動化処理を実現することができます。
OfficeをインストールするとあわせてこのVBAも一緒に実装されますので、Officeがインストールされている環境であれば、追加インストールをする必要なく、即座に使うことができます。
マクロとは何?
次にマクロとはなにか解説します。
マクロとは、一般的なコンピュータ用語で、複数の操作や命令をぎゅっとまとめた機能集合体を意味します。
Microsoftはこのマクロの概念をOfficeに取り入れ、Officeアプリケーションの操作や命令など一連の処理をひとつにまとめた単位をマクロと定義づけています。
マクロとVBAの違いは何?
マクロとVBAの違いについて説明をします。
マクロとVBAの違いは、
②VBAはMicrosoftの用語である一方、マクロは一般用語であり、他の製品でも使われている
③VBAで作ったコードはマクロとして認識されるものとされないものがある
になります。
①については前述の通り、プログラミング言語と機能ということで概念自体が異なることがわかります。
②についてはマクロは他の製品でも用語として使われていますが、VBAはMicrosoftの背品だけしか使えません。
③については実際にサンプルコードを実装してみて、違いを確認してみましょう。
VBAをまとめる方法は2種類
VBAをまとめる方法は2種類あります。それはFunctionとSubで、それぞれ、Functionプロシージャ、Subプロシージャと呼んでいます。
プロシージャとはVBAの機能の最小単位を意味します。
書式 | 説明 |
---|---|
Function <プロシージャ名>(<受け取る値>) As <返すデータ型> ・・・ End Function |
命令の実行結果を呼び出し元に返します。 ワークシート関数として使用可能です。 |
Sub <プロシージャ名>(<受け取る値>) ・・・ End Sub |
命令を実行します。戻り値はありません。またワークシート関数としては使用できません。 |
この2種類のプロシージャですが、VBAを実装したとしてもマクロとして認識されるのは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プロシージャで定義されていること
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が実行されます。
さいごに
いかがでしょうか。
今回は、
しました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す