🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

ExcelのCHOOSE関数 — 位置でN番目の項目を選ぶ(そして隠れた必殺技)

|

ExcelのCHOOSE関数 — 位置でN番目の項目を選ぶ(そして隠れた必殺技)

要点CHOOSE(index_num, value1, value2, …) は、渡したリストの中から 位置 index_num にある項目を返します:CHOOSE(2, "A", "B", "C")"B" です。 値の一致ではなく位置で選ぶ——これこそが、1 から N までの数を既に生み出す数式 (WEEKDAYMONTH など)の完璧な相棒になる理由です。使われていない力:「値」は 単一セルだけでなく、範囲まるごとでもかまいません。

=CHOOSE(2, "Gold", "Silver", "Bronze")              ' -> "Silver"
=CHOOSE(WEEKDAY(A2), "Sun","Mon","Tue","Wed","Thu","Fri","Sat")
=CHOOSE(MONTH(A2), "Q1","Q1","Q1","Q2","Q2","Q2","Q3","Q3","Q3","Q4","Q4","Q4")
=SUM(CHOOSE(scenario, Q1_Sales, Q2_Sales, Q3_Sales))  ' 範囲まるごとを選ぶ

CHOOSE は Excel で最も古い関数の1つでありながら、最も静かに役立つ関数の1つです。多くの 人は数値をラベルに変える方法として出会い、その後、範囲まるごとを返せることには気づかない ままです——けれど、そこにこそ他のどの関数もこれほど綺麗にはできない働きがあります。

この記事でわかること

  • 考え方の軸:ルックアップではなく位置で選ぶ
  • それがなぜ CHOOSE を WEEKDAYMONTH、そして 1〜N の任意の数の自然な相棒にするのか
  • インデックスが範囲外のときの #VALUE! の罠(そして小数のインデックスがどうなるか)
  • CHOOSE と SWITCH、INDEX の比較——正しいものを選ぶ
  • 必殺技:範囲を返してシナリオを切り替えたり、列を並べ替えたりする

考え方の軸:一致ではなく位置で選ぶ

番号の付いた棚を思い浮かべてください。CHOOSE は位置番号を受け取り、そのスロットに置かれて いるものを渡します:

=CHOOSE(3, "Gold", "Silver", "Bronze", "Steel")
'        ▲ 位置 3  ->  "Bronze"

インデックスは 1 始まりです:1 は最初の値、2 は2番目、という具合です。これが CHOOSE と、その従兄弟 SWITCH との決定的な違いです。 SWITCH は*「私の値に等しいケースはどれ?」と尋ねます。CHOOSE は「N 番のスロットには 何がある?」*と尋ねます——中身を調べることは決してなく、ただ位置まで数えるだけです。 だから CHOOSE は、「N 番目のもの」を意味する数を既に持っているときにこそ輝きます。

定番の使い方:計算した数値をラベルに変える

これほど多くの Excel 関数が 1〜N の整数を返すので、CHOOSE はその整数を人間に読める何かに 変換する手軽な方法です。WEEKDAY は 1〜7 を、MONTH は 1〜12 を返します——どちらも そのまま CHOOSE に渡せます:

=CHOOSE(WEEKDAY(A2), "Sun","Mon","Tue","Wed","Thu","Fri","Sat")   ' 曜日名
=CHOOSE(MONTH(A2),  "Jan","Feb","Mar","Apr","May","Jun",
                    "Jul","Aug","Sep","Oct","Nov","Dec")           ' 月名
=CHOOSE(ROUNDUP(MONTH(A2)/3,0), "Q1","Q2","Q3","Q4")              ' 四半期

対応づけはインラインに、順序どおりに収まり、保守すべきルックアップテーブルもありません。 元が綺麗な連番の整数なら、これはネストした IF にも補助テーブルにも勝ります。

罠:リストの外を指すインデックス

CHOOSE には厳格なルールが1つ、緩やかなルールが1つあります。

厳格なルール——範囲外はエラー。 index_num が 1 未満、または渡した値の個数より 大きいと、CHOOSE は #VALUE! を返します:

=CHOOSE(4, "A", "B", "C")     ' -> #VALUE!  (値は3つしかない)
=CHOOSE(0, "A", "B", "C")     ' -> #VALUE!  (インデックスは1始まりなので0は無効)

これは、インデックスが範囲外になりうるデータから来るときに噛みついてきます——空セルは 0 と読まれ、想定外のコードは N+1 と読まれます。IFERROR で守るか、先にインデックスを検証しましょう。

緩やかなルール——小数は切り捨てられる。 小数のインデックスは使用前に最も近い整数へ 切り下げられるので、CHOOSE(2.9, …)CHOOSE(2, …) のように振る舞います。知って おくと便利で、ときどき驚かされます。

必殺技:CHOOSE は範囲まるごとを返せる

ここが、ほとんどのチュートリアルが飛ばす部分です。value 引数は単一の値である必要は ありません——範囲でかまいません。それにより CHOOSE は列やテーブルまるごとを切り替える スイッチになり、本当に強力な2つのパターンが解き放たれます。

シナリオの切り替え。 選択用のセルに応じて、1つの数式を別々のデータセットに向けます:

=SUM(CHOOSE(scenario, Q1_Sales, Q2_Sales, Q3_Sales))
=AVERAGE(CHOOSE($B$1, Region_North, Region_South, Region_West))

scenario を 1 から 2 に変えると、SUM はまったく別の範囲へ照準を合わせ直します——書き 換えも、全体を IF で包む必要もありません。

左方向ルックアップの裏技。 「VLOOKUP は左を見られない」という古くからの処方箋は、 CHOOSE と配列定数で列順を入れ替えた仮想テーブルを組み立てることです:

=VLOOKUP(F2, CHOOSE({1,2}, C2:C100, A2:A100), 2, FALSE)
' C(キー)を1列目、A(答え)を2列目として提示する

CHOOSE({1,2}, …) は列を入れ替えた2列の配列を返すので、VLOOKUP は答えより物理的に右に ある列を検索できます。古典的な裏技です——そして判断のポイント(下記)にうってつけの場面 でもあります。

CHOOSE と SWITCH、INDEX の比較

重なり合いますが、それぞれに居場所があります:

  • 既に持っているのが綺麗な 1〜N の整数? CHOOSE——特に WEEKDAY/MONTH と組み 合わせるか、範囲まるごとを切り替えるとき。
  • 任意の値(コード、ラベル、連番でないもの)で選ぶ? SWITCH——値を照合します。CHOOSE は位置を数えるだけ です。
  • 既存の範囲やリストから N 番目の項目を取り出す? INDEX & MATCHINDEX(range, n)——候補が数式に打ち込ま れるのではなく、既にセルの中にある場合に向いています。

判断のポイント

CHOOSE が真価を発揮するのは、インデックスが自然に小さな連番の整数で、出力が短く安定 しているとき——曜日名、月名、四半期のラベル、少数のシナリオ範囲などです。そこでは、書ける ものの中で最も直接的です。ただしその限界には厳格でありましょう。打ち込んだ値の長いリスト は、数式のふりをしたデータです。テーブルに入れてルックアップを使えば、ラベルの編集が数式 の編集を意味しなくなります。そして CHOOSE({1,2}, …) の左方向ルックアップの裏技は、優雅 ではありますが、XLOOKUP が完全に取り除いた VLOOKUP の制約を 回避するために存在します——Microsoft 365 なら XLOOKUP に手を伸ばし、並べ替えの曲芸は省き ましょう。CHOOSE の永続的で代替のきかない価値は、位置に基づく選択、とりわけ範囲まるごとに 対する選択です。そこで使えば無敵です。ルックアップテーブルの代用として使えば、保守しにくい 数式を作るだけです。

ExcelMaster の使いどころ

CHOOSE の難しさは構文ではありません——ルックアップに対していつそれが正しい道具なのかを 見極めること、そしてインデックスが決して範囲外に落ちないよう守ることです。 ExcelMaster はその判断を代わりに下します:WEEKDAYMONTH のような計算された 整数をラベルに対応づけるには CHOOSE を使い、インデックスがライブデータから来るときは安全に 包み、シナリオモデルには範囲切り替えのパターンを適用し、ケースが実はテーブルなのであれば 適切なルックアップ(または XLOOKUP)へ導きます。やりたいことを 説明するだけ——「各日付の曜日名を表示して」や「このレポートを Q1・Q2・Q3 の合計で切り替え られるようにして」——すると、想定外の行で #VALUE! を出さない版を書きます。

よくある質問

ExcelのCHOOSE関数はどう動きますか?

=CHOOSE(index_num, value1, value2, …) は位置 index_num にある値を返します。インデックス は 1 始まりなので、CHOOSE(1, …) は最初の値を返します。純粋に位置で選び、値そのものを 調べることは決してありません。

CHOOSE と SWITCH の違いは?

CHOOSE は位置で選びます——数値 N を渡すと N 番目の値を返します。 SWITCH値の一致で選びます——式を渡すと、それに 等しいケースを見つけます。既に 1〜N のインデックスを持っているなら CHOOSE、コードやラベルを 照合するなら SWITCH を使います。

CHOOSE が #VALUE! を返すのはなぜ?

index_num が範囲外——1 未満、または渡した値の個数より大きい——だからです。空セル(0 と 読まれる)はよくある原因です。インデックスを検証するか、数式を IFERROR で包んでください。

CHOOSE は単一の値ではなく範囲まるごとを返せますか?

はい——値引数は範囲でかまいません。=SUM(CHOOSE(sel, RangeA, RangeB, RangeC)) は位置で 範囲まるごとを選びます。これが CHOOSE によるシナリオ切り替えや、VLOOKUP のための古典的な CHOOSE({1,2}, …) 左方向ルックアップの裏技を支える仕組みです。

CHOOSE はルックアップテーブルより優れていますか?

連番の整数で駆動される短く安定したリスト(曜日/月/四半期の名前)なら、CHOOSE のほうが綺麗 です。長い、あるいは頻繁に編集するリストなら、INDEX & MATCH や XLOOKUP を使った本物のルックアップテーブルのほうが保守しやすくなります。数式ではなく データを編集すればよいからです。

検証環境

検証環境: Excel 365 (Windows 11) — 最終確認 2026-07-08。

関連ガイド: ExcelのSWITCH関数 · INDEX & MATCH · ExcelのVLOOKUP関数 · ExcelのIFERROR関数