ユーザ定義関数
ユーザー定義関数はVBAで作成できるオリジナル関数です。
標準のワークシート関数では複雑になってしまう処理もあらかじめユーザー定義関数で処理の定義をしておくことで簡単に処理を実行することができます。
Function【ファンクション】プロシージャー
ユーザー定義関数は処理結果を返すFunction【ファンクション】プロシージャーを標準モジュールに記述して作成します。
Function【ファンクション】プロシージャーの書式と設定値の説明
Function 関数名(引数名 As データ型,引数名 As データ型,・・) As 戻り値のデータ型
処理内容
関数名 = 処理結果
End Function
- 関数名
関数名は変数名の名前付け規則と同じで日本語も使用できます。 - (引数名 As データ型,引数名 As データ型,・・)
引数は「引数名 As データ型」の書式で引数として受け取るデータ型を指定します。複数の引数を受け取るときはカンマ「,」で区切って記述します。「引数名」も「関数名」と同じく変数名の名前付け規則で任意の名前を付けられます。 - As 戻り値のデータ型
ユーザー定義関数の戻り値のデータ型を指定します。 - 処理内容
実行する処理を記述します。 - 関数名 = 処理結果
プロシージャー内には処理内容を記述して、その結果を「関数名」に格納し、ユーザー定義関数の戻り値にします。プロシージャー内の処理で使用したいデータは「引数」を介して受け取ります。 - End Function
End【エンド】ステートメントを使用して、 Functionプロシージャーを終了します。
税込売上の内消費税額を求めるユーザー定義関数コード例
Function 内税(税込 As Long) As Long 内税 = 税込 / 13.5 End Function
実行方法・実行結果
※実行方法はB2セルに「=内税(A2)」と直接入力する方法もあります。
合否を判定するユーザー定義関数コード例
Function 合否(得点 As Integer) As String If 80 <= 得点 Then 合否 = "合格" Else 合否 = "不合格" End If End Function
実行結果
Optional【オプショナル】キーワード
ユーザー定義関数に省略可能な引数を設定するには、引数名の前にOptional【オプショナル】キーワードを記述します。
省略可能な引数設定の書式と設定値の説明
Function 関数名(Optional 引数名 As データ型 = 省略時の値,・・) As 戻り値のデータ型
処理内容
End Function
- (Optional 引数名 As データ型 = 省略時の値,・・)
省略可能な引数を設定するには、引数名の前にOptional【オプショナル】キーワードを設定します。引数を省略した場合に設定する値は代入演算子「=」を使用して記述します。Optional【オプショナル】キーワードを付けた引数のあとに記述する引数は、すべてOptional【オプショナル】キーワードを付ける必要があります。(省略可能な引数の後に省略不可の引数は設定できない)また、ParmArray【パームアレイ】キーワードを使用して、配列を受け取る引数を設定した場合はどの引数にもOptional【オプショナル】キーワードは使用できません。
省略可能な引数を使用したユーザー定義関数コード例
Function 税込額(税抜額 As Long, Optional 税率 As Long = 8) As Long 税込額 = 税抜額 * (税率 / 100) + 税抜額 End Function
コードの解説
税抜額を税込額にするユーザー定義関数です。必須の引数は「税抜額」でOptional【オプショナル】キーワードで指定した引数「税率」は省略可能です。省略した場合は8%の税率で計算されます。
実行結果
ParamArray【パラメータアレイ】キーワード
ユーザー定義関数に渡されるデータの個数が不定の引数を設定するには、引数名の前にParamArray【パラメータアレイ】キーワードを記述します。
ParamArray【パラメータアレイ】キーワードを使用した書式と設定値の説明
Function 関数名(ParamArray 引数名() As Variant) As 戻り値のデータ型
処理内容
関数名 = 処理結果
End Function
- (ParamArray 引数名() As Variant)
ParamArray【パラメータアレイ】キーワードを付けた引数は、省略可能な動的配列変数として扱うことができます。複数の引数を設定する場合は、最後の引数に対してのみ設定できます。また、省略可能な引数を設定するOptional【オプショナル】キーワードや、値渡しに設定するByVal【バイバル】キーワード、参照渡しに設定するByRef【バイリフ】キーワードと一緒に使用するこはできません。ParamArray【パラメータアレイ】キーワードを設定した引数のデータ型はバリアント(Variant)型になります。
セルの値を文字列として連結するコードと解説
組み込み関数としてセルの数値の合計を返すSUM【サム】関数がありますが、このコード例ではセルの値の合計ではなく、値を連結するユーザー定義関数になります。
Function 連結(ParamArray 引数() As Variant) As Variant Dim i As Integer Dim 結果 As Variant For i = 0 To UBound(引数) 結果 = 結果 & 引数(i) Next i 連結 = 結果 End Function
1行目【Function 連結(ParamArray 引数() As Variant) As Variant】
ユーザー定義関数を意味するFunction【ファンクション】プロシージャーを定義します。関数名に「連結」を設定し、その引数の前にParamArray 【パラメータアレイ】キーワードを記述して引数を不特定の数設定できる動的配列変数として定義します。引数のデータ型はバリアント型になります。その後の戻り値のデータ型をバリアント型(Variant)で定義します。
2~3行目【Dim i As Integer
Dim 結果 As Variant】
Dim【ディム】キーワードを使用して、繰り返し処理で使用されるカウンター変数「i」を整数型(Integer)で宣言します。同じく、処理結果を格納する変数「結果」をバリアント型(Variant)で宣言します。
4~6行目【For i = 0 To UBound(引数)
結果 = 結果 & 引数(i)
Next i】
For【フォー】ステートメントを使用して繰り返し処理を実行します。繰り返し回数を表すカウンター変数「i」に0~動的配列変数の要素数の上限値を取得するUBound【ユーバウンド】関数を使用して、設定されている引数の数を取得してユーザー定義関数の連結に設定された引数分の繰り返し処理を実行します。繰り返し処理の中で変数「結果」に連結演算子のアンパサンド「&」で連結した値を代入します。
7行目【連結 = 結果】
ユーザー定義関数「連結」に処理の結果が格納されている変数「結果」の値を代入します。
実行結果
以上で、ユーザー定義関数についての解説を終了します。ありがとうございました。