概要
「条件によって参照する列を切り替えたい」
「ユーザーが選んだ番号に応じて、別の表・別の列を参照したい」
「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 を何段も書く必要がなくなり、
「柔軟で壊れにくい参照式」を作れるようになります。
