大体でIT

-ちょっと使えるネタを紹介-

大体でIT

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を使って「参照渡し」で複数の変数を渡すことで、「複数の値」を戻り値として取得できます

では、実行してみます。

複数の値を取得できました

複数の値を取得できました。

複数の値を戻したい場合は、「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のコードを記述

Functionのコードを記述しておきます。

Function TEST1()
    TEST1 = 1
End Function

次のFunctionのコードを記述しています。

「Function」のコードを記述

Functionのコードを記述しておきます

では、ショートカットやボタンに登録できるかみてみましょう。

ショートカットに登録できない

マクロを表示してみます。

マクロを表示してみる

マクロを表示してみます

「Function」のコードは表示されません

「Function」のコードは選択できない

「Function」のコードは表示されません

こんな感じで、「Function」のコードは表示されないので、ショートカットを登録はできないです。

ボタンに登録できない

図形に「Function」を登録してみます。

図形にマクロを登録してみる

図形にマクロを登録してみます

「Function」のコードは表示されません。

「Function」のコードは選択できない

「Function」のコードは表示されません

なので、「Function」のコードはボタンに登録することはできません。

ショートカットやボタンの登録をしたい場合は、「Sub」を使いましょう。

おわりに

この記事では、「Function」の使い方について、ご紹介しました。

「Function」には、「引数」を入力して、「戻り値」を取得して使います。

「Sub」と違うのが「戻り値」があるというところです。

Functionは、次の変数を「戻り値」として使うことができます。

  • 配列
  • オブジェクト
  • 複数の値 ←配列もしくは参照渡しを使う

「Function」で「複数の値」を戻り値に設定するのはできないので、「配列」もしくは「参照渡し」を使うことで、代用します。

Functionの引数には、次の値を渡せます。

  • 配列
  • オブジェクト
  • 複数の値

Functionは、「ワークシート関数」として使うことができます。

「ショートカットの登録」や、「ボタンへの登録」は、できないので、このときは「Sub」を使いましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す