【VBA】Functionの使い方【戻り値の取得、複数の引数や配列を渡す】

Excel VBAの「Function」の大きな特徴は「戻り値」があるのと「ワークシート関数」として使えるということです。戻り値や引数には、値や、配列、オブジェクト、複数の値を使いことができます。「Function」の使い方をマスターしていきいましょう。
はじめに
この記事では、「Function」の使い方について、ご紹介します。
「Function」には、「引数」を入力して、「戻り値」を取得して使います。
「Sub」と違うのが「戻り値」があるというところです。
Functionは、次の変数を「戻り値」として使うことができます。
- 値
- 配列
- オブジェクト
- 複数の値 ←配列もしくは参照渡しを使う
「Function」で「複数の値」を戻り値に設定するのはできないので、「配列」もしくは「参照渡し」を使うことで、代用します。
Functionの引数には、次の値を渡せます。
- 値
- 配列
- オブジェクト
- 複数の値
Functionは、「ワークシート関数」として使うことができます。
「ショートカットの登録」や、「ボタンへの登録」は、できないので、このときは「Sub」を使いましょう。
では、「Function」の使い方について、解説していきます。
この記事を読むメリット
- 「Function」の使い方がわかります
目次
Functionを使う
「Function」を使ってみます。
Functionを作成する
簡単なコードをで、「Function」を作成してみます。
Sub TEST1() '値を渡して、値を取得 Dim A A = TEST2(1) MsgBox A End Sub Function TEST2(B) '引数に1を足す TEST2 = B + 1 End Function
「Function」は、引数を渡して、計算した結果を「戻り値」として取得することができます。
引数を渡して戻り値を取得できる

実行してみます。
引数を渡して戻り値を取得できた

引数を渡して計算した結果を戻り値として取得できました。
こんな感じで、戻り値を取得できるのがポイントです。
戻り値を取得する
次の変数を戻り値として、取得してみます。
- 配列
- オブジェクト
- 複数の値
では、一つずつやってみます。
配列を取得する
戻り値に「配列」を入力することで、「配列」を取得できます。
Sub TEST1() Dim A '配列を取得する A = TEST2(2) End Sub Function TEST2(B) '配列を作成 Dim C C = Array(1, 2, 3) '配列の各値に引数を掛ける For i = 0 To 2 C(i) = C(i) * B Next '配列を戻す TEST2 = C End Function
こんな感じで、戻り値に配列を入力して、配列を取得します。
「配列」を戻り値に入力

では、実行してみます。
「配列」を取得できた

配列を取得できました。
オブジェクトを取得する
オブジェクトを「戻り値」として取得するには、「Set」を使います。
Sub TEST1() Dim A 'オブジェクトを取得する Set A = TEST2(1) MsgBox A.Name End Sub Function TEST2(B) 'オブジェクトを戻す Set TEST2 = Worksheets(B) End Function
こんな感じで、「Set」を使って、「戻り値」にオブジェクトを入力すると、オブジェクトを戻すことができます。
「Set」を使って「オブジェクト」を取得

取得するが側にも「Set」を付けて変数に入力します。
実行してみます。
「オブジェクト」を取得できた

オブジェクトを取得することができました。
複数の戻り値を取得する
「複数の値」を「戻り値」として取得することは、「Function」の機能としてはできません。
代替案としては、
- 「配列」を使って複数の値を取得
- Subで「参照渡し」を使う
という方法があります。
「配列」を使って複数の値を取得
「配列」を使って複数の値を取得してみます。
手順としては、
- 複数の値を「配列」にして戻す
- 「配列」をわけて変数に入力
という感じです。
Sub TEST1() Dim A '複数の値を配列として取得 A = TEST2(1) Dim E, F E = A(0) '配列を値にわける F = A(1) '配列を値にわける Debug.Print E Debug.Print F End Sub Function TEST2(B) '複数の値を作成 Dim C, D C = 1 * B D = 2 * B '複数の値を配列にして、戻す TEST2 = Array(C, D) End Function
複数の値を「配列」にして戻した後に、複数の配列にわけると、「複数の値」を戻り値として取得できます。
イメージはこんな感じです。

では、実行してみます。

複数の値を取得できました。
Subで「参照渡し」を使う
2つ目は、Subで「参照渡し」を使う、という方法です。
Sub TEST1() '複数の値の初期値を作成 Dim A, B A = 0 B = 0 '参照渡しで値を渡す Call TEST2(1, A, B) Debug.Print A Debug.Print B End Sub Sub TEST2(C, D, E) '複数の値を計算して戻す D = 1 * C E = 2 * C End Sub
Subを使って「参照渡し」で複数の変数を渡すことで、「複数の値」を戻り値として取得できます。
イメージは、こんな感じです。

では、実行してみます。

複数の値を取得できました。
複数の値を戻したい場合は、「Sub」で「参照渡し」を使う方法が、シンプルです。
引数を渡す
「Function」に次の変数を渡してみます。
- 配列
- オブジェクト
- 複数の値
では、それぞれ渡してみます。
配列を渡す
「Function」に「配列」を渡してみます。
Sub TEST1() Dim A '配列を渡す A = TEST2(Array(1, 2, 3)) End Sub Function TEST2(B) '配列の各値に2を掛ける For i = 0 To 2 B(i) = B(i) * 2 Next '配列を戻す TEST2 = B End Function
引数に「配列」を入力して渡します。
「配列」を渡す

では、実行してみます。
「配列」を渡して戻り値を取得できた

「配列」を渡して、戻り値を取得できました。
オブジェクトを渡す
次は、「オブジェクト」を渡してみます。
Sub TEST1() Dim A 'オブジェクトを渡す(シートオブジェクトを渡す) A = TEST2(Worksheets(1)) MsgBox A End Sub Function TEST2(B) 'シート名を戻す TEST2 = B.Name End Function
引数に「オブジェクト」を入力して、渡してみます。
「オブジェクト」を渡す

では、実行してみます。
「オブジェクト」を渡して戻り値を取得

「シートオブジェクト」を渡して、戻り値を取得できました。
複数の値を渡す
Functionに、「複数の値」を渡してみます。
Sub TEST1() Dim A '複数の引数を渡す A = TEST2(1, 2, 3) MsgBox A End Sub Function TEST2(B, C, D) '複数の引数を使って、足し算の結果を戻す TEST2 = B + C + D End Function
引数に「複数の値」を入力すれば、複数の引数を渡せます。
「複数の値」を渡す

では、実行してみます。
「複数の値」を渡して戻り値を取得

「複数の値」を渡して、戻り値を取得できました。
関数として使う
Functionのもう一つのポイントが、「ワークシート関数」として使える、というところです。
ワークシート関数として使う
Functionを「ワークシート関数」として使ってみます。
Function Func_TEST(A)
'1を足す
Func_TEST = A + 1
End Function
「Function」で作成したコードを、ワークシート関数で使うことができます。
「ワークシート関数」として使える

ワークシートに計算式を入力すると予測変換もでてきます。
入力すると予測変換もでてくる

入力してみます。
ワークシート関数として使えた

「Function」で作成したコードを、ワークシート関数として使うことができました。
ショートカットやボタンに登録はできない
「Function」は、「ショートカット」や「ボタン」に登録はできないないです。
Functionのコードを記述
Functionのコードを記述しておきます。
Function TEST1() TEST1 = 1 End Function
次のFunctionのコードを記述しています。
「Function」のコードを記述

では、ショートカットやボタンに登録できるかみてみましょう。
ショートカットに登録できない
マクロを表示してみます。
マクロを表示してみる

「Function」のコードは表示されません
「Function」のコードは選択できない

こんな感じで、「Function」のコードは表示されないので、ショートカットを登録はできないです。
ボタンに登録できない
図形に「Function」を登録してみます。
図形にマクロを登録してみる

「Function」のコードは表示されません。
「Function」のコードは選択できない

なので、「Function」のコードはボタンに登録することはできません。
ショートカットやボタンの登録をしたい場合は、「Sub」を使いましょう。
おわりに
この記事では、「Function」の使い方について、ご紹介しました。
「Function」には、「引数」を入力して、「戻り値」を取得して使います。
「Sub」と違うのが「戻り値」があるというところです。
Functionは、次の変数を「戻り値」として使うことができます。
- 値
- 配列
- オブジェクト
- 複数の値 ←配列もしくは参照渡しを使う
「Function」で「複数の値」を戻り値に設定するのはできないので、「配列」もしくは「参照渡し」を使うことで、代用します。
Functionの引数には、次の値を渡せます。
- 値
- 配列
- オブジェクト
- 複数の値
Functionは、「ワークシート関数」として使うことができます。
「ショートカットの登録」や、「ボタンへの登録」は、できないので、このときは「Sub」を使いましょう。
参考になればと思います。最後までご覧くださいまして、ありがとうございました。
関連する記事から探す