VBA Choose 関数:リストから選択した値を取得する

はじめに

Excel VBA マクロの Choose 関数からリストから選択した値を取得する方法を紹介します。

Choose 関数は、リストの中から選択した値を返します。

Choose(1, "A", "B", "C") なら "A" を返します。

インデックスに対応した値を取得したいときに使用します。

選択肢で条件分岐するには「Select 文」をご覧ください。
  • 目次
    • Choose 関数
    • 解説
    • 使用例

Choose 関数

Choose(インデックス, 値1)
Choose(インデックス, 値1, 値2…)
インデックスに対応するを取得します。

引数「インデックス」取得する引数「値」の番号を指定します。
最初の値は 1 です。
引数「値」文字列、数値、日付など何でも指定できます。
戻り値の型引数「値」の型

解説

引数「インデックス」が 1 なら 1 つ目の引数「値」を、2 なら 2 つ目の引数「値」を返します。

引数「インデックス」が引数「値」の数を超えるときや 1 未満のときは Null を返します。

引数「値」に関数を入力すると、取得しないときでも必ずその関数が実行されます。

配列を作成したり If 文や Select 文で条件分岐する必要がなくなります。

曜日名を取得

Weekday 関数」に対応する曜日名を引数「値」から取得して、「WeekdayName 関数」では対応していない好きな形式で取得できます。

使用例

リストから選択した値を取得する。

Dim v As Variant
v = Choose(1, 1, "Tips", False)
Debug.Print(v) ' 1

v = Choose(2, 1, "Tips", False)
Debug.Print(v) ' Tips

v = Choose(3, 1, "Tips", False)
Debug.Print(v) ' False

v = Choose(4, 1, "Tips", False)
Debug.Print(v) ' Null

If 文や Select 文などで条件分岐しなくてよくなります。

Sub 実行()
    Dim s As String

    s = GetWeek(1)
    Debug.Print(s) ' 日曜日

    s = GetWeek(2)
    Debug.Print(s) ' 月曜日

    s = GetWeek(Weekday(Date))
    Debug.Print(s) ' 日曜日、本日の曜日
End Sub

' index に対応した曜日を取得する
Function GetWeek(ByVal index As Integer) As String
    GetWeek = Choose(index, "日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日")
End Function

リストの中の関数はすべて実行されます。

Sub 実行()
    Dim v As Variant
    v = Choose(1, "Tips", 関数(2), 関数(3))
    Debug.Print(v) ' 2 3 Tips
End Sub

Function 関数(ByVal i As Integer) As Integer
    Debug.Print(i) ' Choose を呼び出すと必ずこの関数が実行される
End Function