如何从过滤后的动态数组中提取特定列最小值所在行?
两种解决方法:公式法 & Power Query法
公式法(适配你现有FILTER的思路)
假设数据结构为:A列=产品名称,B列=供应商,C列=价格,可针对单个产品或批量生成所有产品的结果:
- 单个产品最低价:
=MIN(FILTER(C:C, A:A=指定产品单元格)),直接对FILTER筛选出的价格列取最小值 - 单个产品对应供应商:
=INDEX(B:B, MATCH(指定产品单元格&MIN(FILTER(C:C,A:A=指定产品单元格)), A:A&C:C, 0)),通过「产品+最低价」的组合匹配对应行,提取供应商 - 批量生成所有产品结果(动态数组,无需下拉填充):
在空白单元格输入以下公式,会自动生成包含所有产品名称、最低价供应商、最低价的完整表格:
=LET( 产品列表, UNIQUE(A:A), 最低价, MAP(产品列表, LAMBDA(x, MIN(FILTER(C:C,A:A=x)))), 对应供应商, MAP(产品列表, LAMBDA(x, INDEX(B:B,MATCH(x&MIN(FILTER(C:C,A:A=x)),A:A&C:C,0)))), HSTACK(产品列表, 对应供应商, 最低价) )
Power Query法(更简便的批量处理)
如果数据量较大,Power Query是更高效的方案,步骤如下:
- 选中数据区域,点击Excel顶部「数据」选项卡→「从表格/区域」,将数据导入Power Query编辑器
- 选中「产品名称」列,点击「转换」选项卡→「分组依据」
- 在分组设置窗口中:
- 分组依据:选择「产品名称」
- 添加第一个分组规则:新列名填「最低价」,操作选「最小值」,列选择「价格」
- 添加第二个分组规则:新列名填「对应供应商」,操作选「自定义」,然后输入公式
=Table.SelectRows(_, each [价格] = [最低价])[供应商]{0}
- 点击「确定」,即可得到每个产品对应最低价和供应商的表格,最后点击「关闭并上载」将结果放回Excel
注:如果存在多个供应商给出同一最低价,把公式里的
{0}改成Text.Combine(_, ", "),就能把所有符合条件的供应商合并成逗号分隔的文本。
内容的提问来源于stack exchange,提问作者Monxstar
相关产品推荐
相关产品推荐

