Excel関数 逆引き集 | 参照先を切り替える → CHOOSE

Excel VBA Excel
スポンサーリンク

概要

「条件によって参照する列を切り替えたい」
「ユーザーが選んだ番号に応じて、別の表・別の列を参照したい」
「IF を何段も書くのはイヤ。もっとスッキリ書きたい」

そんなときに便利なのが CHOOSE(チューズ)関数です。

CHOOSE は
“番号に応じて、指定した値(または範囲)を返す”
という関数で、
参照先を切り替えるスイッチとして使うと非常に強力です。

初心者でもすぐ使えるように、テンプレート形式で分かりやすく解説します。


CHOOSE の基本

書式

=CHOOSE(番号, 値1, 値2, 値3, …)

番号
1 → 値1
2 → 値2
3 → 値3
…というように、番号に応じて返す内容が切り替わります。

ここでのポイントは、
値1・値2・値3 に「セル範囲」を入れてもよい
ということです。

つまり、

  • 1 を選んだら A列を参照
  • 2 を選んだら B列を参照
  • 3 を選んだら C列を参照

というように、参照先そのものを切り替えることができます。


参照先を切り替える基本パターン

例:番号に応じて参照列を切り替える

A列:商品コード
B列:商品名
C列:単価

F2 に「1,2,3 のどれか」を入力し、
G2 に「F2 の番号に応じて A~C列の値を返す」式を書きたいとします。

G2 に次の式を書きます。

=CHOOSE(F2, A2, B2, C2)

F2=1 → A2
F2=2 → B2
F2=3 → C2

というように、参照先が切り替わります。


XLOOKUP と組み合わせて「検索先を切り替える」

CHOOSE の真価は、検索関数の参照先を切り替えるときに発揮されます。

例:検索値は同じだが、戻り列を切り替えたい

A列:商品コード
B列:商品名
C列:単価
D列:在庫数

F2:商品コード
G2:戻りたい項目番号(1=商品名、2=単価、3=在庫)

G2 の番号に応じて、XLOOKUP の戻り列を切り替えます。

H2 に次の式を書きます。

=XLOOKUP(
    F2,
    A2:A100,
    CHOOSE(G2, B2:B100, C2:C100, D2:D100),
    "未登録"
)

動きはこうです。

  • G2=1 → CHOOSE が B列(商品名)を返す
  • G2=2 → CHOOSE が C列(単価)を返す
  • G2=3 → CHOOSE が D列(在庫)を返す

つまり、
XLOOKUP の戻り範囲を CHOOSE で切り替えている
という構造です。


VLOOKUP の「列番号」を CHOOSE で柔軟にする

VLOOKUP は「列番号」を指定しますが、
列の順番が変わると壊れやすいという弱点があります。

CHOOSE を使うと、列番号を柔軟に扱えるようになります。

例:VLOOKUP の列番号を CHOOSE で切り替える

=VLOOKUP(F2, A2:D100, CHOOSE(G2, 2, 3, 4), FALSE)

G2=1 → 2列目
G2=2 → 3列目
G2=3 → 4列目

というように、列番号を CHOOSE で管理できます。


複数の表を切り替える(CHOOSE の応用)

CHOOSE は「範囲」も返せるので、
複数の表そのものを切り替えることもできます。

例:Aマスタ・Bマスタ・Cマスタを切り替える

F2:1,2,3 のどれか
G2:検索したい商品コード

Aマスタ:SheetA!A2:B100
Bマスタ:SheetB!A2:B100
Cマスタ:SheetC!A2:B100

H2 に次の式を書きます。

=XLOOKUP(
    G2,
    CHOOSE(F2, SheetA!A2:A100, SheetB!A2:A100, SheetC!A2:A100),
    CHOOSE(F2, SheetA!B2:B100, SheetB!B2:B100, SheetC!B2:B100),
    "未登録"
)

F2=1 → SheetA を参照
F2=2 → SheetB を参照
F2=3 → SheetC を参照

というように、マスタそのものを切り替えることができます。


CHOOSE のメリット

IF を何段も書かなくてよい

IF で書くとこうなります。

=IF(G2=1, B2:B100,
 IF(G2=2, C2:C100,
 IF(G2=3, D2:D100)))

CHOOSE なら一行で済みます。

=CHOOSE(G2, B2:B100, C2:C100, D2:D100)

列の順番が変わっても壊れにくい

CHOOSE は「列番号」ではなく「範囲そのもの」を返すため、
列の並び替えに強いです。

XLOOKUP と相性が抜群

XLOOKUP の「戻り範囲」を CHOOSE で切り替えるのは、
実務で非常に使われるテクニックです。


よくあるつまずきと注意点

CHOOSE の番号は 1 から始まる

0 や負の数は使えません。

範囲のサイズは揃える

CHOOSE の中に入れる範囲は、
行数が揃っていないと XLOOKUP などでエラーになります。

参照先が多すぎると可読性が落ちる

CHOOSE は便利ですが、
5個以上の参照先を切り替えると式が長くなりがちです。
その場合は、別の表で「参照先一覧」を作るなど工夫しましょう。


例題

問題1

A2:A100 に商品コード、B2:B100 に商品名、C2:C100 に単価があります。
F2 に 1 または 2 を入力し、
G2 に「1なら商品名、2なら単価」を返す CHOOSE の式を書いてください。

=CHOOSE(F2, B2, C2)

問題2

A2:A100 に商品コード、B2:B100 に商品名、C2:C100 に単価、D2:D100 に在庫があります。
G2 に 1~3 の番号を入力し、
H2 に「番号に応じて B~D列を返す」式を書いてください。

=CHOOSE(G2, B2, C2, D2)

問題3

F2 に商品コード、G2 に 1~3 の番号が入っています。
番号に応じて XLOOKUP の戻り列を切り替え、
H2 に商品名・単価・在庫のいずれかを返す式を書いてください。

=XLOOKUP(F2, A2:A100, CHOOSE(G2, B2:B100, C2:C100, D2:D100), "未登録")

問題4

F2 に 1~3 の番号が入っています。
番号に応じて、SheetA・SheetB・SheetC の商品名列を参照する XLOOKUP の式を書いてください
(検索値は G2)。

=XLOOKUP(
    G2,
    CHOOSE(F2, SheetA!A2:A100, SheetB!A2:A100, SheetC!A2:A100),
    CHOOSE(F2, SheetA!B2:B100, SheetB!B2:B100, SheetC!B2:B100),
    "未登録"
)

問題5

A2:A100 に商品コード、B2:D100 に 3種類のマスタ値が入っています。
F2 に 1~3 の番号が入っているとき、
G2 に「F2 の番号に応じて B~D列の値を返す」式を書いてください。

=CHOOSE(F2, B2, C2, D2)

まとめ

CHOOSE は、
「番号に応じて参照先を切り替える」ための万能スイッチ
です。

特に次のテンプレートは実務で非常に使えます。

参照先切り替えの基本形

=CHOOSE(番号セル, 範囲1, 範囲2, 範囲3)

XLOOKUP の戻り範囲を切り替える

=XLOOKUP(検索値, キー列, CHOOSE(番号, 戻り列1, 戻り列2, 戻り列3))

複数マスタを切り替える

=XLOOKUP(検索値,
         CHOOSE(番号, マスタ1キー, マスタ2キー, マスタ3キー),
         CHOOSE(番号, マスタ1値, マスタ2値, マスタ3値))

CHOOSE を使いこなせば、
IF を何段も書く必要がなくなり、
「柔軟で壊れにくい参照式」を作れるようになります。

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