ユーザー関数をエクセルで使ってみよう
前回は、エクセルの標準関数(組込関数)について解説しました。
今回は自分で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」は何でしょうか?
大きな特徴は以下の通りです。
- プログラムの実行処理自体は「Sub」と「Function」で違いはない
- 「Sub」は戻り値を設定できないが、「Function」は戻り値が設定可能
- 「Function」はエクセルのセルで使うことが可能
- 「Function」は単独で実行できない
プログラムの実行処理自体は「Sub」と「Function」で違いはない
「Sub」と「Function」で、実行したプログラムに違いは生じません。
よって、それぞれ「Sub」と「Function」を書き換えれば、基本的には簡単に変更できます。
ただし、戻り値を「Function」で指定した場合、そのまま「Sub」に置き換えるとエラーになります。
「Sub」は戻り値を設定できないが、「Function」は戻り値が設定可能
「戻り値」については前回説明しましたが、関数では実行結果を取得することができます。
この戻り値を「Sub」は設定できません。
一方、「Function」では戻り値が設定可能であり、逆に戻り値をが無くてもOKです。
「Function」はエクセルのセルで使うことが可能
「Function」はエクセル標準関数のように、エクセルのセルで使う事が可能です。
「画像1」のように、セルにユーザー関数を入力しようとすると、関数の候補が表示されます。
この時の候補は「Function」であり、「Sub」は表示されません。
強引に「Sub」の関数を入力してもエラーになります。
「test18_Function()」の実行結果は「画像2」の通りです。
値を戻す方法は、ファンクションプロシージャ名に代入するだけです。
これにより、セルには「Functionプロシージャ」という値が表示されます。
「Function」は単独で実行できない
「Function」は単独で実行できず、「Sub」は単独での実行が可能です。
例えば、エクセルやVBEからマクロを「画像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倍にするための関数です。
実際に入力すると、以下のように表示されます。
このように、ユーザー関数を作る事で、様々なエクセルで使える関数を作成できます。
プログラミングの入門編は以上になります。
次回からはVBAプログラミングの初級編に入っていきます。