如何用INDEX/MATCH获取对应MoQ下最低价格的位置?
匹配对应MoQ的最低价格(Excel函数实现)
需求与测试数据
需要根据「MoQ参考值」,从对应MoQ匹配的价格列中找出最低价格,或返回该价格的列标题:
- 当MoQ参考值为2时,筛选所有MoQ=2的价格并取最低价
- 当MoQ参考值为1时,匹配唯一对应MoQ=1的价格
测试表格结构与数据:
| MoQ参考值 | 选用价格? | Price1 | MoQ1 | Price2 | MoQ2 | ExtraPrice1 | ExtraMoQ1 |
|---|---|---|---|---|---|---|---|
| 2 | 空 | 189 | 1 | 182 | 2 | 176.89 | 1 |
| 1 | 空 | 0.75 | 5 | 空 | 空 | 1 | 1 |
预期结果:
- B2单元格返回
ExtraPrice1(或价格176.89) - B3单元格返回
ExtraPrice1
现有公式问题分析
- 第一个公式仅匹配首个符合MoQ的列,未遍历所有匹配项并筛选最低价
- 第二个公式的
ROW(1:1)仅生成单个行号,无法定位所有匹配的MoQ位置 - 第三个公式的
FILTER仅返回MoQ值,无法关联到左侧对应的价格列
解决方案
方案1:返回最低价格对应的列标题(Excel 365/2021 动态数组版)
在B2单元格输入以下公式,下拉填充:
=LET( price_cols, C2:G2, moq_cols, D2:H2, price_headers, C$1:G$1, valid_prices, FILTER(price_cols, moq_cols=A2), valid_headers, FILTER(price_headers, moq_cols=A2), INDEX(valid_headers, MATCH(MIN(valid_prices), valid_prices, 0)) )
逻辑说明:
LET定义变量简化公式,price_cols提取当前行所有价格列(C、E、G),moq_cols提取对应MoQ列(D、F、H)FILTER筛选出MoQ与参考值匹配的价格和标题MIN(valid_prices)获取筛选后的最低价格,MATCH定位其位置,INDEX返回对应标题
方案2:直接返回最低价格值(Excel 365/2021 动态数组版)
无需标题时,使用简化公式:
=LET( price_cols, C2:G2, moq_cols, D2:H2, valid_prices, FILTER(price_cols, moq_cols=A2), MIN(valid_prices) )
方案3:兼容旧版Excel(2019及更早,数组公式)
输入公式后需按Ctrl+Shift+Enter完成输入:
- 返回标题:
=INDEX(C$1:G$1,MATCH(MIN(IF(D2:H2=A2,C2:G2)),IF(D2:H2=A2,C2:G2),0))
- 返回价格:
=MIN(IF(D2:H2=A2,C2:G2))
逻辑说明:
IF(D2:H2=A2,C2:G2)生成数组,仅保留MoQ匹配的价格,其余为FALSEMIN提取数组中的最低价格,MATCH定位其位置后用INDEX返回对应标题
内容的提问来源于stack exchange,提问作者Notus_Panda
相关产品推荐
相关产品推荐

