次の記事では、関数の基礎を説明します。書き込み方法、引数の導入/返し、プロシージャの実行などが含まれます。
目次
VBA関数の基礎構文
VBA関数は使用されるキーワード以外、VBAプロシージャと似てます。主な違いは、関数が値を返すことができることです。
引数がない関数
引数がないVBA関数の基礎構文は次となります。
Function [関数名]() As [返す値のデータ型]
ステートメント1
ステートメント2
…
ステートメントn
[関数名] = [返す値]
End Function
ご覧のとおり、この関数はFunctionステートメントとEnd Functionステートメントを使用して関数の開始と終了になります。
プロシージャと比べると、この関数のステートメントには[関数名] = [返す値]というステートメントがあります。これは関数の返す値ステートメントです。 関数名の後に関数の返す値のデータ型を指定し、構文は変数の宣言に似てます。
次の例をご覧ください。
'関数を宣言する。ランダムにtrueまたはfalse値を返す。関数は返す値のデータ型を指定する必要がある。
Function RandomLogic() As Boolean
RandomLogic = Rnd() > 0.5
End Function
この関数はRandomLogicで、返す値のデータ型はBooleanです。呼び出しを実行すると、trueまたはfalseの値がランダムに返します。 やり方は、VBAにあるRnd関数(0-1の数値をランダムに生成する)を使用し、ランダムの数値を0.5と比較し、trueまたはfalseの値を生成して、その値を関数名に割り当てることです。
引数がある関数
プロシージャと同様に、関数も引数を受け取ることができ、構文もプロシージャと同じです。
Function [関数名]([変数名1] As [データ型1],…[変数名n] As [データ型n]) As [返す値のデータ型]
ステートメント1
ステートメント2
…
ステートメント3
[関数名] = [返す値]
End Function
同様に、関数が受け取った引数は、関数で使用されます。
次の例をご覧ください。
Function Add2Number(num1 As Double, num2 As Double) As Double
Add2Number = num1 + num2
End Function
上記の関数はDoubleデータ型の2つの数値を引数として受け入れ、加算して合計値を返します。また、データ型もDoubleです。
関数の呼び出し(Function)
関数とサブプロシージャの相違点は、関数は値を返すことができるということです。 関数が値を返さない場合にはサブプロシージャと同じであり、呼び出しのやり方もサブプロシージャと同じです。
返す値を使用して関数を呼び出す場合は、通常、2つの状況があります。
- 1つは変数を使用して、関数によって返された値を格納します。
- 1つは関数の返す値を他の計算に参与します。
両方も、関数の呼び出し方法は同じです。引数がない関数は直接書き込まれ、引数がある関数は引数を括弧で囲みます。
Sub Main()
'変数を使用して、関数によって返された値を格納する
Dim result As Double
result = Add(12, 345)
'関数の返すは計算に引き続き参与する
Dim result As Double
result = RandNum + Add(12, 345)
End Sub
'関数:ランダムの値を返す
Function RandNum()
RandNum = Rnd * 100
End Function
'関数:2つの数値の合計値を返す
Function Add(num1 As Double, num2 As Double) As Double
Add = num1 + num2
End Function
早目に関数を終了する
通常、FunctionステートメントとEnd Functionステートメントを関数の開始と終了として使用されます。 ただし、実際の状況によっては、関数を早目に終了する必要がある場合があります。VBAには、プロシージャを早目に終了するために、Exit FunctionとEnd、2つの方法が提供しています。
Exit Functionステートメント
関数のプログラムがExit Functionステートメントに実行されると、今実行中の関数が早目に終了します。
しかし、Exit Functionステートメントは今のプロシージャのみ影響し、親プロシージャまたは関数を呼び出すには影響がないことに注意してください。
Endステートメント
関数のプログラムがEndステートメントを実行すると、今実行中のすべてのVBAプロシージャおよび関数を強制終了します。
実際の開発過程では、End終了ステートメントを慎重に使用する必要があります。 Endステートメントの効果は、コンピューターの強制シャットダウンコマンドに似ています。それを実行すると、値を保存せずにすべてのプログラムを強制終了します。VBAには次の効果があります。
- プログラム内のオブジェクトの各イベントはトリガーされません;
- 実行中のVBAプログラムはすべて強制終了します;
- オブジェクト参照が無効になります;
- 開いているウインドウはすべて閉じられます。
まとめ
関数はプロシージャに似ています。ほとんどの使用方法は同じです。主な相違点は、関数は値を返すことができますが、プロシージャは返すことができないことです。両方は任意数の引数を受け入れることができ、引数はプロシージャまたは関数で使用できます。関数を呼び出すときは、引数を関数名の後の括弧内に配置する必要があります。
コメントを残す