【21】VBAのユーザー関数をエクセルで使う方法

記事で紹介しているエクセル
・エクセル2019 [64ビット版]

目次

ユーザー関数をエクセルで使ってみよう

前回は、エクセルの標準関数(組込関数)について解説しました。

今回は自分でVBAで作ったユーザー関数をエクセルで使う方法について解説します。

まずは以下のサンプルコードを見て下さい。

'サブ プロシージャ
Sub test18_Sub()
    
    test18_Sub = "Subプロシージャ"
    
End Sub

'ファンクション プロシージャ
Function test18_Function()
    
    test18_Function = "Functionプロシージャ"
    
End Function

ここには2つのプロシージャ(関数)があります。

  • test18_Sub()
  • test18_Function()

この2つのプロシージャには大きな違いがあります。

「サブプロシージャ」と「ファンクションプロシージャ」の違いについて

エクセルで使うことを学ぶには、「サブプロシージャ」と「ファンクションプロシージャ」の違いを押させておく必要があります。

2つのプロシージャの先頭には以下の違いがあります。

  • Sub test18_Sub()
  • Function test18_Function()

この2つは「Sub(サブ)」と「Function(ファンクション)」です。

「Sub」はこれまでのサンプルコード解説で使ってきたので分かると思います。

一方で「Function」は何でしょうか?

大きな特徴は以下の通りです。

  1. プログラムの実行処理自体は「Sub」と「Function」で違いはない
  2. 「Sub」は戻り値を設定できないが、「Function」は戻り値が設定可能
  3. 「Function」はエクセルのセルで使うことが可能
  4. 「Function」は単独で実行できない

プログラムの実行処理自体は「Sub」と「Function」で違いはない

「Sub」と「Function」で、実行したプログラムに違いは生じません。

よって、それぞれ「Sub」と「Function」を書き換えれば、基本的には簡単に変更できます。

ただし、戻り値を「Function」で指定した場合、そのまま「Sub」に置き換えるとエラーになります。

「Sub」は戻り値を設定できないが、「Function」は戻り値が設定可能

「戻り値」については前回説明しましたが、関数では実行結果を取得することができます。

この戻り値を「Sub」は設定できません。

一方、「Function」では戻り値が設定可能であり、逆に戻り値をが無くてもOKです。

「Function」はエクセルのセルで使うことが可能

「Function」はエクセル標準関数のように、エクセルのセルで使う事が可能です。

「画像1」のように、セルにユーザー関数を入力しようとすると、関数の候補が表示されます。

画像1:セルへユーザー関数の入力

この時の候補は「Function」であり、「Sub」は表示されません。

強引に「Sub」の関数を入力してもエラーになります。

「test18_Function()」の実行結果は「画像2」の通りです。

画像2:test18_Function()の実行結果

値を戻す方法は、ファンクションプロシージャ名に代入するだけです。

これにより、セルには「Functionプロシージャ」という値が表示されます。

「Function」は単独で実行できない

「Function」は単独で実行できず、「Sub」は単独での実行が可能です。

例えば、エクセルやVBEからマクロを「画像3」のように実行しようとします。

画像3:マクロの実行一覧

すると実行できるのは「Sub」のみであり、「Function」は表示されていません。

これは、「Sub」は単独で実行できるのに対して、「Function」は呼び出される事で実行できるという違いがあるからです。

この辺の使い分けは、プログラムを作っていくうちに、何となく分かってくるかと思います。

引数をユーザー関数に設定しよう

前回、標準関数を紹介した際に「引数」を使いました。

ユーザー関数でも引数の設定が可能です。

引数を設定する「Function」の書き方は以下の通りです。

Function test18_keisan(Num As Integer)
    
    test18_keisan = Num * 10
    
End Function

関数の括弧()の中に、変数宣言をします。

2つ以上引数がある場合はカンマで区切ります。

Function test18_keisan(Num1 As Integer, Num2 As Integer)

この「test18_keisan(Num As Integer)」関数では、引数を変数Numに代入します。

そして変数Numを×10して、戻り値としています。

test18_keisan = Num * 10

つまり、入力した値を10倍にするための関数です。

実際に入力すると、以下のように表示されます。

画像4:test18_keisan(Num As Integer)の実行結果

このように、ユーザー関数を作る事で、様々なエクセルで使える関数を作成できます。

プログラミングの入門編は以上になります。

次回からはVBAプログラミングの初級編に入っていきます。

よかったらシェアしてね!
目次
閉じる