関数は自分で作れる
ExcelにはSUM関数やIF関数など、便利な関数がたくさん用意されています。しかし、実務では「あとちょっとだけ自分のやりたいことに合わない」と感じることがないでしょうか?
そんなときに活用できるのが、VBAで関数を自作する方法(Functionプロシージャ)です。
「え、関数って自分で作れるの?」と驚く方もいますが、やってみると意外と簡単です。
Functionプロシージャの基本構文
まずは、Functionプロシージャの基本的な書き方を紹介します。
Function AddTax(price As Double) As Double
AddTax = price * 1.1
End Function
この関数は、税込価格を求めるシンプルな例です。
解説
Functionから始めて、自作の関数名を書きます。※今回の場合はAddTaxが関数名です。(price As Double)は、引数とその型です。
この関数で必要な引数です。普段使う関数のように「=AddTax(price)」の「price」の部分に、数値もしくは、セルを指定すると、その金額×1.1する、というのが今回作成した関数です。As Doubleは、関数の戻り値の型です。
戻り値、というのは結果のことで、計算した結果を「Double型(小数を含む数値)」で出してほしい、という指示です。AddTax = ○○のように、関数名に値を代入することで戻り値が決まります。
Excelシートからも使える
上の関数を標準モジュールに書けば、Excelのセルに =AddTax(1000) と入力して、1100 を返す関数として利用できます。
複数の引数を持たせて柔軟に使う
次に、複数の条件に対応した関数を作ってみましょう。たとえば、割引後の価格を計算する関数です。
Function DiscountPrice(price As Double, rate As Double) As Double
DiscountPrice = price * (1 - rate)
End Function
この関数は、価格と割引率を引数として受け取り、割引後の金額を返します。
使い方
Excelで =DiscountPrice(1000, 0.2) と入力すると、800 が返ってきます。
実務での例
- 商品の単価と契約割引率から実際の請求金額を計算
- 社員の手当支給率に応じた支給額の算出 など
関数内でエラー処理も可能
業務の中では、入力ミスやデータ不備に対応した関数が必要な場面もあります。次は、文字列の長さに応じたメッセージを返す関数を作ってみます。
Function CheckLength(txt As String) As String
If Len(txt) > 10 Then
CheckLength = "長すぎます"
ElseIf Len(txt) = 0 Then
CheckLength = "未入力です"
Else
CheckLength = "OK"
End If
End Function
解説
Len(txt)で文字数を取得します。- 条件分岐(If文)を使って判定結果を返しています。
活用例
- 顧客コードの文字数チェック
- コメント欄の未入力チェック
実装のメリット
Functionプロシージャを使うと、次のようなメリットがあります。
- 処理を共通化できる(同じ処理を何度も書かずに済む)
- 関数としてセルから呼び出せる(業務での活用が簡単)
- メンテナンスが楽になる(修正箇所が1カ所で済む)
注意点と補足
- Functionプロシージャは、標準モジュールに書くことでシート関数として使える
- Subプロシージャのように直接実行はできない(関数として呼び出す)
- 複数の値を返したい場合は、配列を使う必要あり(初学者にはやや高度)
まとめ
VBAでは、関数を自作することができます。特に、Excel標準の関数では対応しづらい細かな処理において、Functionプロシージャは非常に役立ちます。
今回紹介したポイントをまとめると、
- Excelシートから
=関数名(引数)で呼び出せる - 複数の引数や条件分岐も使える
業務にぴったり合った処理を自作関数で補い、Excel作業をより効率よく、確実なものにしていきましょう。
