依開關指定的價目表取價(IF + 查表)
測試案例
1
2
3
重設
提交
A
B
C
D
E
F
G
1
2
3
4
5
6
7
8
9
10
○ 就緒 請在反白的目標儲存格輸入公式,然後點「提交」。
測試案例
1
2
3
重設
提交
A
B
C
D
E
F
G
1
2
3
4
5
6
7
8
9
10
○ 就緒 請在反白的目標儲存格輸入公式,然後點「提交」。
題目
題目說明
兩份價目表並排:舊價在 A2:B5、新價在 D2:E5,由 H2 這個開關決定用哪一份——它寫著 "New" 或 "Old",SKU 在 H1。把價格填進 Price 儲存格 H3。
同一條公式要同時讀 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 選的是「一個查表」,不只是選值:每個分支都是一次完整的 VLOOKUP,各自打一張表。因為兩張表是獨立範圍,調價時不需要重新排序。INDEX + MATCH 是同一個思路,只是位置是明著找出來的,兩張表欄位順序不同時更好讀。
解題思路
答案寫在 H3。送出時我們會換 3 組輸入重跑你的公式,寫死數字一定過不了 —— 公式必須跟著儲存格走。
- 目標儲存格是 H3
- H2 的開關決定要用哪張表
- IF 的每個分支都是一整條 VLOOKUP
- 公式形狀:=IF(?, VLOOKUP(?, ?, ?, ?), VLOOKUP(?, ?, ?, ?))
官方解法
展開 2 種解法(建議先自己試一次)
解法 1:IF 在兩條 VLOOKUP 之間選
=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:IF 在兩組 INDEX MATCH 之間選
=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)))
同樣的開關,但回傳欄是直接指名而不是數欄號。兩張表欄位順序不同時特別好用。
函數指南
常見問題
怎麼從兩張表其中之一取值?
把整條查表放進每個分支:=IF(開關="New", VLOOKUP(鍵, 新表, 2, 0), VLOOKUP(鍵, 舊表, 2, 0))。
為什麼不把兩張表併成一張?
多數情況下應該併。只有在兩張表結構不同,或舊表必須凍結供歷史報表使用時,才保持分開。