【Excelマクロ】VBAで関数を自作して業務に合わせよう(Functionプロシージャ)

関数は自分で作れる

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作業をより効率よく、確実なものにしていきましょう。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール