Excel VBAの「Choose 関数」について解説します。
Choose 関数とは
Excel VBA の Choose 関数は、インデックスの値に基づいて選択肢のリストから対応する値を返します。
条件分岐や配列の代替として使える場面も多く、知っておくとコードの可読性と効率が向上します。
Choose 関数の構文や引数の設定と実際の使い方について具体的に解説していきたいと思います。
Choose 関数(Visual Basic for Applications リファレンス)
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
Choose(index, choice-1[, choice-2, …[, choice-n]])
引数
指定項目 | 説明 |
---|---|
index | 【必須】1から選択肢(choice)数までの範囲で数値を指定します |
choice | 【必須】選択肢となる値のリストをカンマ区切りで設定します |
※ index が 0 以下または選択肢の数を超える場合は Null が返されます。
※ index が整数ではない場合、最も近い整数に丸めてから評価されます。
※ choice に設定したリスト内にエラーがあった場合、処理が中断します。
(choice に設定したリストは全てが評価されるためです。)
戻り値
index に指定した数値(インデックス番号)に対応する choice-数値 に設定した値が返ります。
index が「1」なら choice-1、「2」なら choice-2 の値が返されます。
解説(使用例)
Choose 関数の使い方について、サンプルコードを使って解説します。
Choose 関数使用サンプル
Choose 関数の簡単な使用例を紹介します。
基本的な使用例
次の例は、変数Subjectの値に対応するリスト項目の値を返します。
'■Choose関数サンプル1(基本的な使用例)
Sub Choose_Sample01()
Dim Subject As Integer
Subject = 2
MsgBox Choose(Subject, "国語", "算数", "理科", "社会")
End Sub
Subject に 2 を指定した場合、Choiceリストのすべてを評価したうえで 2 番目の値「算数」を返しました。

注意する点としては「Choiceリストはすべてが評価される」ということです。Choiceリストには、文字列や数値以外にも関数や式など、なんでも設定できます。リストの一部にエラーがあるとそこで中断されます。
日付から曜日名を取得する例
WeekDay関数を利用して、その戻り値(1~6)に対応する曜日文字を表示させる例です。
'■Choose関数サンプル2(曜日名を取得する例)
Sub Choose_Sample02()
Dim inputDate As Variant
Dim dayIndex As Integer
Dim strWeekd As String
' InputBoxで日付を入力
inputDate = InputBox("曜日を調べたい日付を入力して!", "日付入力")
' WeekDay関数で曜日の整数値を取得
dayIndex = Weekday(inputDate)
' Choose関数で曜日文字を返す
strWeekd = Choose(dayIndex, "日", "月", "火", "水", "木", "金", "土")
' MsgBoxを表示する
MsgBox inputDate & "は" & strWeekd & "曜日です!"
End Sub
はじめに InputBox で曜日を調べたい日付を入力します。

入力された日付を WeekDay 関数で曜日の整数値を変数 dayIndex に返します。
Choose 関数で DayIndex の値に対応する曜日文字をリストの中から返し、変数 strDeekd に代入します。
MsgBox に表示する文字列を整形して次のように表示します。

おわりに
VBAの関数一覧はこちらからご参照ください。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!
VBA の Choose 関数は、選択肢となる値のリストからインデックス(1から始まる整数)に応じた値を選択して返す便利な関数です。条件分岐や配列の代替として使うことができます。
以下、特徴や注意点などを列記しておきます。
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;