【Excel VBA入門】ユーザー定義関数の作り方。Functionプロシージャを理解する

【Excel VBA入門】ユーザー定義関数の作り方。Functionプロシージャを理解する

こんにちは、業務自動化ツール開発担当の吉池(@valmore_myoshi)です。

VBAを書いていてコードを再利用したいと思ったことはないですか?

プログラミングではよくある処理として同じコードを何度も使う場面が多々あります。そんなときはユーザー定義関数としてまとめてしまうのがオススメです!

本記事では、ユーザー定義関数のメリットから作り方、ワークシート関数として登録する方法まで解説します。

ユーザー定義関数とは?

ユーザー定義関数とは、Functionプロシージャを使って作成した独自関数のことです。ExcelにはSUM関数やIF関数といったワークシート関数がはじめから用意されていますが、ゼロからオリジナルの関数を作ることができるのです。

ユーザー定義関数のメリット

ユーザー定義関数のメリットは下記の3つあります。

  1. 一連の処理をまとめて再利用できる
  2. Subプロシージャと異なり、戻り値を指定できる
  3. ワークシートからも呼び出せる

まず一つ目は処理をまとめて再利用できることです。再利用できれば何度も同じコードを書く手間が省けます。また、コードを修正したいときもファイル内に散らばった一連の同じコードすべてに手を入れる必要なく、関数だけの修正で済みます。

メリットの二つ目はユーザー定義関数には戻り値を指定できることです。コードを再利用するだけならSubプロシージャでも可能ですが戻り値は指定できません。

Subプロシージャの再利用について興味がある方はこちらの記事をご覧ください。
【Excel VBA入門】マクロをパーツ化!Subプロシージャを分割して使う方法

最後のメリットは、ユーザー定義関数がワークシート関数としてExcelから呼び出せることです。既存のワークシート関数で実現できない機能を独自の関数として登録できます。

ユーザー定義関数でできないこと

ユーザー定義関数は基本的に呼び出されることが前提です。そのため、呼び出し元に値を返す処理しか許可されていません。

そのため、下記のような処理はユーザー定義関数では実現できません。

  • ウィンドウのサイズ変更
  • セル内の式の編集
  • セル内のテキストのフォント、色、パターン等の変更

ユーザー定義関数の作り方

ユーザー定義関数はFunctionプロシージャで下記のように定義します。関数名のほかに引数や戻り値のデータ型を指定します。そして、戻り値の指定は関数名に続けて戻り値をイコールで結びます。

Function 関数名(引数名 As データ型) As 戻り値のデータ型
    処理内容
    処理内容
    処理内容

    関数名 = 戻り値
End Function

例えば、税抜価格を渡すと税込価格を返してくれるユーザー定義関数は下記のようになります。執筆現在(2019/9/30)はまさに消費税が変わる一日前ですが、基準日をもとに消費税率を変えています。

Sub macro()
    Debug.Print (CalcTax(100))
End Sub

Function CalcTax(price As Long) As Double
    Dim d As Date
    Dim tax As Double
    
    ' 消費税が変わる基準日
    d = #10/1/2019#
 
    If d > Date Then
        tax = 1.08
    Else
        tax = 1.1
    End If
    
    CalcTax = price * tax
End Function

複数の引数を設定する

引数は複数指定できます。Optionalキーワードをつけた引数の設定は任意です。

Sub macro()
    Debug.Print (CalcTax(100, True))
End Sub

Function CalcTax(price As Long, Optional isEatIn As Boolean = False) As Double
    Dim d As Date
    Dim tax As Double
    
    ' 消費税が変わる基準日
    d = #10/1/2019#
    
    ' 消費税率
    tax = 1.08
 
    If d <= Date And isEatIn Then
        tax = 1.1
    End If
    
    CalcTax = price * tax
End Function

ワークシート関数として登録する

ユーザー定義関数を作成すれば、作成元のExcelからは=関数名()として呼び出せます。しかし、別のブックから関数を呼び出すには作成元のブックを開いた状態で=作成元ブック名!関数名()と指定しなければなりません。

つまり、Book1.xlsmで作成したCalcTax関数をBook2.xlsxから呼び出すには、Book2.xlsxの任意のセル上で=Book1.xlsm!CalcTax(100)と指定する必要があります。

ユーザー定義関数の作成元ブックを開かずとも、どこからでも関数を使うにはアドインとしてExcelに登録する方法があります。

作り方はとっても簡単。ユーザー定義関数を作ったらExcelアドイン(.xlamファイル)として保存します。そして、Excelの「ファイル」→「オプション」からアドインメニューを選択します。

アドインメニュー

アドインメニューから設定ボタンをクリックし、有効化したいアドインにチェックを入れてOKボタンで完了です。これでどこからでもユーザー定義関数を使えるようになります。

まとめ

ユーザー定義関数のメリットや作り方、アドインとして登録する方法を解説してきました。関数としてコードをまとめることができればプログラミングに要する時間も短縮できます。

さらに一度定義した関数はワークシート関数としても使えるので、VBAがわからない方にもExcel上から関数形式で使っていただくこともできますね。

コーディングの時間短縮に直結するので、ぜひユーザー定義関数を使ってみてください。