如何用Excel公式在不同工作表提取指定人员的唯一产品ID
获取Excel中人员X购买的唯一产品ID(公式实现方案)
问题背景
现有包含人员(Person)、产品ID(Product id)的购买记录如下:
- X 43
- Y 58
- X 34
- X 28
- X 34
- Y 26
- Y 57
需要在Excel的不同工作表中,通过公式获取人员X购买的唯一产品ID(已知数据透视表可实现,但需要公式解法),预期结果为:43、34、28。
方案1:适用于Excel 365/2021(支持动态数组)
这是最简洁的解法,利用UNIQUE和FILTER函数组合实现:
假设原始数据存放在Sheet1中:A列为「Person」,B列为「Product id」。在目标工作表的任意空白单元格(比如A1)输入以下公式:
=UNIQUE(FILTER(Sheet1!B:B, Sheet1!A:A="X"))
公式解释:
FILTER(Sheet1!B:B, Sheet1!A:A="X"):先从Sheet1的B列中筛选出所有Person为「X」的产品ID(会包含重复的34)UNIQUE(...):对筛选结果进行去重,最终得到唯一的产品ID列表,公式会自动溢出显示所有结果,无需手动下拉填充。
方案2:适用于旧版Excel(不支持动态数组)
如果你的Excel版本不支持动态数组函数,可使用数组公式结合INDEX+MATCH+COUNTIF实现:
假设原始数据的范围是Sheet1!$A$2:$B$8(A2:A8是Person,B2:B8是Product id),在目标工作表的A1单元格输入以下数组公式,输入完成后按Ctrl+Shift+Enter确认(旧版Excel需手动触发数组计算):
=INDEX(Sheet1!$B$2:$B$8, MATCH(0, COUNTIF($A$1:A1, Sheet1!$B$2:$B$8)*(Sheet1!$A$2:$A$8<>"X"), 0))
输入完成后,下拉填充单元格直到出现#N/A,此时前面的单元格就是人员X购买的唯一产品ID。
公式解释:
COUNTIF($A$1:A1, Sheet1!$B$2:$B$8):统计当前单元格上方已经出现过的产品ID,避免重复输出*(Sheet1!$A$2:$A$8<>"X"):排除Person不是「X」的记录MATCH(0, ..., 0):找到第一个既不属于已输出列表、又属于Person X的产品ID的位置INDEX(...):根据位置取出对应的产品ID
内容的提问来源于stack exchange,提问作者Harshal Gajare




