按开关指定的价目表取价(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))。
为什么不把两张表并成一张?
多数情况下应该并。只有在两张表结构不同,或旧表必须冻结供历史报表使用时,才保持分开。