切り替えセルが指す価格表から引く(IF + 検索)
問題
問題文
価格表が2つ並んでいます。旧価格が A2:B5、新価格が D2:E5 で、どちらを使うかは H2 の "New" / "Old" で決まります。SKU は H1 にあります。価格を Price セル H3 に入れてください。
1つの式で SKU と切り替えの両方を読みます。作業列に IF を置いたり、価格を別の場所へ写したりしないでください。
問題のデータ
表でデータ全体を見る(選択・コピーできます)
| A | B | D | E | G | H | |
|---|---|---|---|---|---|---|
| 1 | SKU | Old price | SKU | New price | SKU | SKU-103 |
| 2 | SKU-101 | 49 | SKU-101 | 52 | Price list | New |
| 3 | SKU-102 | 19.5 | SKU-102 | 21 | Price | |
| 4 | SKU-103 | 22.5 | SKU-103 | 24.99 | ||
| 5 | SKU-104 | 89 | SKU-104 | 95 |
ポイント解説
IF が選ぶのは「値」ではなく「検索そのもの」です。各分岐が1つの表に対する完全な VLOOKUP になります。2つの表は独立した範囲なので、価格改定のたびに並べ替える必要はありません。INDEX + MATCH も同じ考え方で、位置を明示的に探すため、列の並びが違う2表では読みやすくなります。
解き方のヒント
回答は H3 に入力します。送信時は 3 通りの入力で数式を再実行するので、数値を直接書くと必ず失敗します。数式はセルを参照してください。
- 対象セルは H3
- H2 の切り替えが表を選ぶ
- IF の各分岐が VLOOKUP まるごと1つ
- 形:=IF(?, VLOOKUP(?, ?, ?, ?), VLOOKUP(?, ?, ?, ?))
模範解答
模範解答を表示(2 通り・まずは自分で試してみましょう)
方法1:2つの VLOOKUP を IF で選ぶ
=IF($H$2 = "New", VLOOKUP($H$1, $D$2:$E$5, 2, FALSE), VLOOKUP($H$1, $A$2:$B$5, 2, FALSE))
H2 が New なら新しい表から 24.99、Old に変えれば同じセルが 22.50 になります。H1 と H2 を $ で固定しているので、式をコピーしても参照がずれません。
方法2:2組の INDEX MATCH を IF で選ぶ
=IF($H$2 = "New", INDEX($E$2:$E$5, MATCH($H$1, $D$2:$D$5, 0)), INDEX($B$2:$B$5, MATCH($H$1, $A$2:$A$5, 0)))
切り替えは同じで、返す列を番号ではなく範囲で指定します。2つの表で列の順序が違うときに便利です。
関数ガイド
よくある質問
2つの表のどちらかから値を引くには?
各分岐に検索を丸ごと置きます:=IF(切り替え="New", VLOOKUP(キー, 新表, 2, 0), VLOOKUP(キー, 旧表, 2, 0))。
2つの表を1つにまとめないのはなぜ?
多くの場合はまとめるべきです。表の構造が違う場合や、旧表を過去のレポート用に凍結する必要がある場合だけ分けます。