Excel VBA スタンダードの暗記項目まとめ【第一章 プロシージャ】
この記事では、VBAエキスパートの「Excel VBA スタンダード」の受験用に、暗記すべき項目について、公式の試験範囲の第一章をまとめました。
とくに暗記すべきところは「太文字」や「表」でまとめてあります。とくにステートメントやメソッド、プロパティについては、記述できるレベルまで仕上げておくことをおすすめします。
この記事では暗記を優先するため、解説をできるだけ省いています。学習未経験の人は、Excel VBA スタンダードの公式テキストなどで試験範囲の内容に目を通してからの利用を推奨します。
また、公式テキストに掲載されていないなど、試験に出る可能性の低い内容の解説は、基本的に割愛しています。
Excel VBA スタンダード 第一章 プロシージャ
1.1 複数のプロシージャを使ったマクロ
モジュールの中には複数のプロシージャを用意し、以下のようにマクロを作ることができます。
Sub Macro1()
Range("A1") = "マント"
End Sub
Sub Macro2()
Range("A1") = Range("A1") & "ヒヒ"
End Sub
また、Subプロシージャは、「Sub プロシージャ名」で始まり「End Sub」で終わります。
また、プロシージャが別のプロシージャを呼び出す場合、以下のように引数を渡すことができます。Macro2では、MsgBoxにより「マントヒヒバブーンマンドリル」と表示されます。
Sub Macro1()
Dim Animal1 As String
Dim Animal2 As String
Dim Animal3 As String
Animal1 = "マントヒヒ"
Animal2 = "バブーン"
Animal3 = "マンドリル"
Call Macro2(Animal1, Animal2, Animal3)
End Sub
Sub Macro2(A As String, B As String, c As String)
MsgBox A & B & c
End Sub
1.2 Callステートメント
「Call プロシージャ名」で、別のプロシージャを呼び出すことができます。下の例では、Macro1の中でCallステートメントを使い、Macro2を呼び出しています。
Sub Macro1()
Range("A1") = "マント"
Call Macro2
End Sub
Sub Macro2()
Range("A1") = Range("A1") + "ヒヒ"
End Sub
1.3 値を共有する
モジュールレベル変数
プロシージャの中で宣言した変数は、基本的にプロシージャの中でしか利用できません(後述する参照渡しで、別プロシージャで扱うことはできます)。
一方、宣言セクション(「Sub プロシージャ名」の前の部分)に宣言した変数は「モジュールレベル変数」となり、同一モジュール内の全てのプロシージャで使用することができます。
以下の例では、宣言セクションで「A」を宣言しているため、Macro2のメッセージで「マントヒヒ」と表示されます。
Dim A As String
Sub Macro1()
A = "マントヒヒ"
Call Macro2
End Sub
Sub Macro2()
MsgBox A
End Sub
参照渡しと値渡し(ByRefとByVal)
引数を渡す際には「参照渡し」と「値渡し」があります。引数の宣言で「ByRef」とすると参照渡し、「ByVal」とすると値渡しになります。指定なしのデフォルトは参照渡しです。
以下の例では、「ByRef」で明示的に参照渡しとなっている「Name1」の値のみ、Macro2で書き換えられるため、Macro1のMsgBoxの表示は「マンドリルバブーン」となります。
Sub Macro1()
Dim animal1 As String
Dim animal2 As String
animal1 = "マントヒヒ"
animal2 = "バブーン"
Call Macro2(animal1, animal2)
MsgBox animal1 & animal2
End Sub
Sub Macro2(ByRef A As String, ByVal B As String)
A = "マンドリル"
B = "マンドリル"
End Sub
1.4 Functionプロシージャ
Functionプロシージャは、呼び出し元に値を返すことができます。
「Function マクロ名」で開始し、最後は「End Function」で終了します。また、値を返す場合は、Function名に返したい値を代入します。
以下の例では、Functionから返された値により、Macro1のMsgBoxで「バブーン」と表示されます。
Sub Macro1()
Dim A As String
A = "マントヒヒ"
A = Macro2
MsgBox A
End Sub
Function Macro2()
Macro2 = "バブーン"
End Function
<<第十章 デバッグへ | 第二章 変数の活用へ>>