如何用VLOOKUP结合近似日期范围与编码条件查询对应类别?
用VLOOKUP实现双条件(Code+日期范围)匹配查询
原始数据
| Code | Beg. date | End date | Class |
|---|---|---|---|
| 54 | 01/03/2021 | 10/10/2020 | 166 |
| 54 | 11/10/2021 | 31/12/9999 | 322 |
| 102 | 10/04/2020 | 31/08/2021 | 180 |
| 102 | 01/09/2021 | 30/06/2022 | 190 |
| 102 | 01/07/2022 | 31/12/9999 | 200 |
查询需求
匹配条件:Code=102,日期区间01/05/2021 - 31/05/2021,预期结果为190(对应第4行记录的区间)。
方法1:数组公式版VLOOKUP(Excel 2019+/365)
假设查询的Code存于单元格G1,查询日期(取区间内任意日期即可,这里用01/05/2021存于G2),使用以下公式:
=VLOOKUP(1,IF(A:A=G1,--(B:B<=G2)),4,TRUE)
- 非Excel 365/2021版本输入后需按
Ctrl+Shift+Enter触发数组运算,365/2021版本直接回车即可。 - 逻辑:
IF(A:A=G1,--(B:B<=G2))先筛选出同Code的行,将符合Beg. date<=查询日期的行标记为1,其余为FALSE;VLOOKUP近似查找最接近1的项,返回对应第4列的Class值。
方法2:辅助列实现双条件匹配
如果不想用数组公式,新增辅助列(如E列),在E2单元格输入:
=A2&"|"&TEXT(B2,"yyyy-mm-dd")
下拉填充所有行,将Code和标准化后的Beg. date拼接为唯一匹配键。
查询公式(G1为目标Code,G2为查询日期):
=VLOOKUP(G1&"|"&TEXT(G2,"yyyy-mm-dd"),E:D,3,TRUE)
- 逻辑:将查询条件按相同规则拼接,通过VLOOKUP近似匹配找到小于等于拼接值的最大项,对应返回Class。
关键注意事项
- 必须保证同一Code下的Beg. date是升序排列,否则近似匹配会返回错误结果。
- 日期格式需统一,避免因格式差异导致拼接或比较失效。
内容的提问来源于stack exchange,提问作者José Durand
相关产品推荐
相关产品推荐

