【VBAリファレンス|実務向け】ユーザー定義関数を作る|Excel VBAで「自分専用の関数」を実装しよう

スポンサーリンク

導入: なぜ「ユーザー定義関数」が必要なのか

Excel業務において、標準のSUM関数やVLOOKUP関数だけでは計算が複雑すぎて、数式が長くなりすぎてしまうことはありませんか?数式が複雑になると、修正時のミスや第三者による解読が困難になります。
そんな時に役立つのが「ユーザー定義関数」です。VBAで独自の関数を作成しておけば、ワークシート上で「=MyFunction(A1)」のように、標準関数と同じ感覚で呼び出すことができます。再利用性が高く、複雑なロジックを隠蔽できるため、保守性の高いシート作成に必須のテクニックです。

基礎知識: Functionプロシージャの仕組み

VBAには大きく分けて「Sub(処理を実行する)」と「Function(値を返す)」の2種類があります。
ユーザー定義関数は、このFunctionプロシージャを使用します。
関数名に計算結果を代入することで、呼び出し元に値を返すことができます。また、引数(ひきすう)を設定することで、外部からデータを受け取り、その結果を柔軟に変更することが可能です。

実装/解決策: ユーザー定義関数の作り方

VBAエディタ(VBE)を開き、標準モジュールに以下のコードを記述するだけで、即座にワークシートから利用可能になります。重要なのは、引数の「型」を適切に定義することと、計算結果を関数名に代入することです。

サンプルプログラム: 実用的なユーザー定義関数の例

以下は、指定した範囲内の数値をすべて2倍にするというシンプルな関数です。

‘ 標準モジュールに記述してください
Function DoubleRange(rng As Range) As Double
‘ 範囲内の各セルをループして合計値を2倍にする
Dim c As Range
Dim total As Double

total = 0
For Each c In rng
‘ 数値のみを対象に加算
If IsNumeric(c.Value) Then
total = total + c.Value
End If
Next c

‘ 関数名に最終結果を代入して値を返す
DoubleRange = total 2
End Function

ワークシート上では、セルに「=DoubleRange(A1:A10)」と入力すれば動作します。

応用・注意点: 現場で役立つヒントと制限

ユーザー定義関数を使用する際、必ず知っておくべき「現場のルール」があります。

1. 関数内の動作制限
ユーザー定義関数は「値を計算して返す」ためのものです。そのため、セルの色を変える、行を挿入・削除する、別のシートをアクティブにするといった「Excelの環境を変更する処理」は実行できません。これを行うとエラーが発生するか、無視されます。

2. 引数の省略(Optional)
VLOOKUP関数の第4引数のように、引数を省略可能にしたい場合は「Optional」キーワードを使用します。「Optional 値 As 型 = 初期値」と記述することで、引数が渡されなかった場合のデフォルト値を設定できます。

3. 再計算のタイミング
ユーザー定義関数は、引数として指定したセルが変更されたときに自動再計算されます。もし、セルを参照していないのに「現在時刻」などを返すような関数を作る場合は、コードの先頭に「Application.Volatile」と記述することで、シート上のどこかが変更されるたびに再計算されるようになります。

まずは簡単な計算式から自作し、複雑な数式をスッキリ整理することから始めてみてください。業務効率が劇的に向上するはずです。

タイトルとURLをコピーしました