Excel多表筛选:选供应商编号后基于Spend_2022返回All_Spend唯一行
解决方案公式及说明
核心公式
在Auto_Pop工作表的目标单元格输入以下公式(Excel 365/2021及以上版本直接回车即可,无需Ctrl+Shift+Enter):
=UNIQUE(FILTER(All_Spend, ISNUMBER(MATCH(All_Spend[Item #], FILTER(Spend_2022[Item #], Spend_2022[Supplier #]=Auto_Pop!$A$2), 0)), "No matching rows"))
公式拆解
- 内层FILTER:
FILTER(Spend_2022[Item #], Spend_2022[Supplier #]=Auto_Pop!$A$2)
从Spend_2022表格中,筛选出与Auto_Pop!$A$2(选中的供应商编号)匹配的所有Item #,得到2022年该供应商采购的物料编号列表。 - MATCH+ISNUMBER:
ISNUMBER(MATCH(All_Spend[Item #], ..., 0))
遍历All_Spend中的每个Item #,检查其是否存在于上述2022年物料编号列表中,返回TRUE/FALSE的判断结果,作为外层筛选的条件。 - 外层FILTER:
FILTER(All_Spend, ..., "No matching rows")
根据上述判断结果,从All_Spend中筛选出所有符合条件的行,无匹配时返回提示文本。 - UNIQUE:对筛选后的所有行去重,返回唯一的采购记录。
注意事项
- 确保Spend_2022和All_Spend都是通过
Ctrl+T创建的正式Excel表格,结构化引用(如Spend_2022[Item #])才能正常生效。 - 若使用Excel 2019及更早版本,因不支持FILTER和UNIQUE函数,需改用Index+Small+Match的组合数组公式,可参考以下替代方案:
此公式需按=IFERROR(INDEX(All_Spend, SMALL(IF(ISNUMBER(MATCH(All_Spend[Item #], IF(Spend_2022[Supplier #]=Auto_Pop!$A$2, Spend_2022[Item #]), 0)), ROW(All_Spend)-ROW(All_Spend[#Headers])), ROW(A1)), COLUMN(A1)), "")Ctrl+Shift+Enter数组输入,然后下拉右拉填充,同时需配合辅助列用COUNTIF判断重复来实现去重。
内容的提问来源于stack exchange,提问作者Feketenyek
相关产品推荐
相关产品推荐

