概要
「この表の 1列目と3列目だけをまとめて取りたい」
「列の順番を入れ替えた“別表”を一瞬で作りたい」
そんなときに便利なのが CHOOSE 関数です。
CHOOSE は本来「番号に応じて“n番目の引数”を返す」関数ですが、
配列(範囲)を渡すことで、複数列をまとめて返したり、列の順番を組み替えたりできます。
CHOOSE の基本(まずは単体の使い方)
書式
=CHOOSE(index_num, value1, value2, value3, …)
- index_num:何番目を選ぶか(1,2,3,…)
- value1, value2, …:選択候補(数値・文字列・セル・範囲など)
例:
A1, B1, C1 にそれぞれ「りんご」「みかん」「バナナ」が入っていて、
=CHOOSE(2, A1, B1, C1)
と書くと、「2番目の引数」=B1(みかん)が返ります。
ここまでは「候補から1つ選ぶ」だけですが、
value1〜に「列(範囲)」を渡してあげると、“列をまとめて選ぶ”ことができます。
列(範囲)を CHOOSE に渡すとどうなるか
例:列範囲をそのまま渡す
=CHOOSE(1, A2:A10, C2:C10)
index_num が 1 なので、A2:A10 が返ります。
index_num を 2 にすれば、C2:C10 が返ります。
「じゃあ複数列をまとめて返したいときは?」という話に入っていきます。
複数列をまとめて取得する CHOOSE のパターン
ポイントは、CHOOSE を「配列」として使うことです。
2列を横に並べて返す(配列数式)
範囲 A2:A10 と C2:C10 を「2列構成の表」としてまとめて返したいとします。
=CHOOSE({1,2}, A2:A10, C2:C10)
意味をかみ砕くと、
{1,2}が「1番目の引数」「2番目の引数」を並べて返す、という指示- 1番目の引数 → A2:A10
- 2番目の引数 → C2:C10
結果として、「A列・C列の2列セット」が返ります。
この式を、例えば E2 に入力すると、
E列に A2:A10、F列に C2:C10 が“スピル(自動展開)”して表示されます。
列の順番を入れ替える
A列=商品コード、B列=商品名、C列=単価 のとき、
「商品名 → 商品コード → 単価」の順にしたい場合:
=CHOOSE({1,2,3}, B2:B100, A2:A100, C2:C100)
- 1番目の引数 → B2:B100(商品名)
- 2番目の引数 → A2:A100(商品コード)
- 3番目の引数 → C2:C100(単価)
これで「商品名・商品コード・単価」の並びの表を一発で作れます。
XLOOKUP や FILTER と組み合わせて「見つかった行の複数列」を返す
XLOOKUP で複数列を返したい場面
XLOOKUP は本来「1つの戻り範囲」しか指定できませんが、
CHOOSE と組み合わせると「複数列を一気に返す」ことができます。
例:
A2:A100:商品コード
B2:B100:商品名
C2:C100:単価
E2 にコードを入れて、F2 に「商品名+単価の2列セット」を出したい場合:
=XLOOKUP(E2,
A2:A100,
CHOOSE({1,2}, B2:B100, C2:C100))
意味はこうです。
- XLOOKUP は A2:A100 から E2 を検索
- 見つかった行の「CHOOSE({1,2}, B列, C列)」部分を返す
- CHOOSE が「商品名列+単価列」をセットで返す
結果として、F2 に商品名、G2 に単価がスピル表示されます。
FILTER で抽出した結果の列を選び直す
FILTER の結果から「特定の列だけ抜き出す」ときにも CHOOSE は便利です。
=CHOOSE({1,2},
FILTER(A2:C100, 条件),
FILTER(D2:F100, 条件))
といった形で、「抽出した複数列」を再構成できます。
列をまとめて取得するテンプレート
① 既存表の「何列か」をまとめて別表にする
=CHOOSE({1,2,3}, 範囲1, 範囲2, 範囲3)
例:A列=コード、B列=名前、D列=部署 の3列だけ欲しい
=CHOOSE({1,2,3}, A2:A100, B2:B100, D2:D100)
② 表の列順を入れ替えた版を作る
=CHOOSE({1,2,3}, B2:B100, A2:A100, C2:C100)
③ 検索結果として複数列を返す(XLOOKUP と)
=XLOOKUP(検索値,
キー列,
CHOOSE({1,2,…}, 戻り列1, 戻り列2, …))
CHOOSE を使うときの注意点
すべての範囲は「行数」を揃える
例えば、
- A2:A10
- C2:C15
のように行数が違うと、CHOOSE がうまく並べられません。
複数列を返したいときは、行数を揃えてください。
戻り結果は「スピル」するので、右側を空けておく
=CHOOSE({1,2}, A2:A10, C2:C10) のような式は、
入力したセルから右に向かって結果が広がります。
右側にデータがあると #SPILL! になるので、
あらかじめ「ここから右に展開される」とイメージして場所を決めてください。
例題
問題1: A2:A10 に商品コード、C2:C10 に数量が入っています。この2列を「E2:F10」にスピルさせる形でまとめて表示する式を E2 に書いてください。
=CHOOSE({1,2}, A2:A10, C2:C10)
問題2: A2:A100 に商品コード、B2:B100 に商品名、C2:C100 に単価があります。「商品名 → 商品コード → 単価」の順の表を E2 から右方向にスピルさせる式を書いてください。
=CHOOSE({1,2,3}, B2:B100, A2:A100, C2:C100)
問題3: A2:A100 に商品コード、B2:B100 に商品名、C2:C100 に単価があります。E2 の商品コードに対して、「商品名と単価の2列」を F2:G2 にスピル表示する式を書いてください。
=XLOOKUP(E2, A2:A100, CHOOSE({1,2}, B2:B100, C2:C100))
問題4: A2:A100 に社員ID、B2:B100 に氏名、C2:C100 に部署、D2:D100 に役職があります。「氏名+役職」の2列だけを、新しい表として F2 から表示する式を書いてください。
=CHOOSE({1,2}, B2:B100, D2:D100)
問題5: A2:A100 に商品コード、B2:B100 に商品名、C2:C100 に単価があります。E2 の商品コードに対して、「商品名→コード→単価」の3列を F2:H2 にスピル表示する XLOOKUP+CHOOSE の式を書いてください。
=XLOOKUP(E2,
A2:A100,
CHOOSE({1,2,3}, B2:B100, A2:A100, C2:C100))
まとめ
CHOOSE は、一見「ただの選択関数」に見えますが、
配列(範囲)と {1,2,…} を組み合わせることで、
- 複数列をまとめて取得
- 列順の入れ替え
- XLOOKUP や FILTER の戻り値を“複数列化”
といった、“列操作の裏ワザ”が一気に書けるようになります。
型としては、
=CHOOSE({1,2,…}, 範囲1, 範囲2, …)
=XLOOKUP(検索値, キー列, CHOOSE({1,2,…}, 戻り列1, 戻り列2, …))
この2つを押さえておくと、「複数列をまとめて欲しい」場面で、
いつでもサッと取り出せる武器になります。
