Excel関数 逆引き集 | 複数列をまとめて取得 → CHOOSE

Excel VBA Excel
スポンサーリンク

概要

「この表の 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つを押さえておくと、「複数列をまとめて欲しい」場面で、
いつでもサッと取り出せる武器になります。

タイトルとURLをコピーしました