Excel多条件查找:基于产品类型、高度、宽度三条件的匹配查询求助


实现方案
方案1:Excel公式实现(适配不同版本)
适用Excel 365/2021版本
核心逻辑用XLOOKUP做区间匹配+INDEX取交叉值,提前在名称管理器中为不同产品类型的参数表定义三个名称:
[产品类型]_高度:对应参数表的高度区间上限行[产品类型]_宽度:对应参数表的宽度区间上限列[产品类型]_成本:对应参数表的成本取值区域
输入单元格假设:
- 产品类型输入:
A1 - 目标高度输入:
B1 - 目标宽度输入:
C1
公式如下:
=LET( height_arr, INDIRECT(A1&"_高度"), width_arr, INDIRECT(A1&"_宽度"), cost_arr, INDIRECT(A1&"_成本"), // 匹配高度对应的行号,XLOOKUP第5参数为1代表找大于等于目标值的最小区间上限 h_row, XLOOKUP(B1, height_arr, SEQUENCE(ROWS(height_arr)),,1), // 匹配宽度对应的列号 w_col, XLOOKUP(C1, width_arr, SEQUENCE(COLUMNS(width_arr)),,1), result, INDEX(cost_arr, h_row, w_col), // 0值返回无法生产,否则返回成本 IF(result=0, "无法生产", result) )
兼容旧版Excel(2019及更早)
用MATCH做模糊匹配替代XLOOKUP:
=IFERROR( LET( h_row, MATCH(B1, INDIRECT(A1&"_高度"),1), w_col, MATCH(C1, INDIRECT(A1&"_宽度"),1), result, INDEX(INDIRECT(A1&"_成本"), h_row, w_col), IF(result=0, "无法生产", result) ), "参数超出可查询范围" )
方案2:多参数表优化方案
如果参数表数量较多,可提前将所有产品类型的参数合并到一张总表,新增「产品类型」列,配合Power Query做动态查询,后续参数更新只需维护总表即可,无需新增自定义名称。
如果需要避免INDIRECT函数的易失性性能问题,可替换为SWITCH函数匹配对应区域:
cost_range, SWITCH(A1, "类型A", Sheet2!D3:I8, "类型B", Sheet2!D10:I15, NA())
内容的提问来源于stack exchange,提问作者globster
相关产品推荐
相关产品推荐

