【VBA】関数の活用!より強力で再利用可能なコードを作成しよう!


今回はVBAで関数を作っていきます。自作関数を作成することで、自由に使いたいコードを再利用することができます。
プログラミングにおける関数とは、一連の手続きや計算を一つの単位としてまとめたものを言います。
一度定義すれば何度でも呼び出して利用することができるので、何度も使われている部分を抜き取って関数かすることがよくあります。
それぞれの関数は、特定のタスク(機能)を持っていて、必要な入力(引数)を受け取ると、結果(戻り値)を返します。
この原理は、Visual Basic for Applications(VBA)においても同じです。
関数を理解し、適切に使用することで、VBAプログラムはより効率的に、そして可読性の高いものになります。
それでは、VBAの関数について深く掘り下げてみましょう。
関数とは何か?
関数の基本
関数とは、特定の値(引数)を入力として受け取り、ある種の処理を行った結果(戻り値)を返す一連のプログラム文のことです。
関数は、繰り返し行われるタスクや複雑な計算を一箇所にまとめ、必要に応じて呼び出すことができます。
VBAでの関数は一般的に以下の形式で定義されます。
Function FunctionName(arguments) As ReturnType
' 実行する処理
End Function
Function
:VBAに関数を定義していることを示すキーワード。FunctionName
:関数の名前。この名前は一意でなければならず、VBAの他の部分からこの名前を使って関数を呼び出す。arguments
:ここには、関数が受け取る入力(引数)が記述される(無い場合もある)。それぞれの引数には名前とデータ型があり、カンマで区切られる。As ReturnType
:関数の戻り値のデータ型を指定。Integer
、String
、Boolean
、Variant
などEnd Function
:関数定義の終了を示す。
関数内の処理が完了したら、関数名を使って結果を返します。(リターンと呼びます)
平均を計算し返す関数
例えば、次の関数は2つの数値の平均を計算し、その結果を返します。
'関数名に値を渡すことで、リターンできる
Function Average(num1 As Double, num2 As Double) As Double
Average = (num1 + num2) / 2
End Function
上記コードでは、num1とnum2を足して2で割った数値、つまり、平均値を返す(リターンする)関数となります。
関数の利用
作成した関数は、VBAの他の部分から呼び出すことができます。
以下のサブプロシージャは、先ほど定義したAverage
関数を呼び出し、結果をメッセージボックスで表示します。
Sub ShowAverage()
Dim num1 As Double
Dim num2 As Double
Dim average As Double
num1 = 10.5
num2 = 20.3
average = Average(num1, num2)
MsgBox "The average of " & num1 & " and " & num2 & " is " & average
End Sub
SubとFunction

VBAではSubとFunctionのどちらでも関数と言われる再利用可能な部品が作れるんだにゃ。違いを見ていくんだにゃ。
Sub
(サブルーチン)とFunction
(関数)の両方とも再利用が可能です。
どちらも一連のVBAステートメントをまとめて名前をつけることで、それを何度でも呼び出すことができるようになっています。
しかし、その役割と使い方には微妙な違いがあります。
Sub
Sub
はサブルーチンの略で、一連のVBAのステートメントを実行するために使われます。
サブルーチンは、特定のタスクを実行するためのコードのブロックで、そのタスクを繰り返し行う場合や、コードをより読みやすくするために利用されます。
しかし、Sub
は戻り値を返すことができません。
サブルーチンは次の形式で定義されます。
Sub SubName(arguments)
' 実行するステートメント
End Sub
例えば、次のコードは名前を引数として受け取り、メッセージボックスで挨拶を表示します。
Sub SayHello(name As String)
MsgBox "Hello, " & name
End Sub
見ての通り、Subでは戻り値は返せません。
Function
一方、Function
は、先ほど見た通り、一つ以上の入力(引数)を受け取り、何らかの処理を行った後に結果(戻り値)を返すために使われます。
戻り値を返せる点から、一般的に関数はこちらを指します。
関数は次の形式で定義されます。
Function FunctionName(arguments) As ReturnType
' 実行するステートメント
' 戻り値を返す
End Function
例えば、次のSquare
関数は、引数として数値を受け取り、その二乗を返します。
Function Square(num As Double) As Double
Square = num * num
End Function
SubとFunctionの違いと使い分け
要するに、主な違いはSub
が値を返さないのに対し、Function
が値を返すという点です。
どちらを使用するかは、目的によります。
ある処理を行い、何かの結果を返す必要がある場合にはFunction
を使用し、特定のタスクを実行するだけで結果を返す必要がない場合にはSub
を使用します。

VBAを体系的に学びたい場合、本で学ぶことをお勧めしています。
kindle unlimited(キンドルアンリミテッド)であれば、いくつかのVBA関係の本を無料で読むこともできますよ。