如何修改Excel公式提取同一Invoice ID下的所有产品信息?
提取同一Invoice ID下所有产品的解决方案
我来帮你搞定这个批量提取产品的需求,根据你的Excel版本,有两种实用方法:
方法1:用FILTER函数(推荐Excel 365/2021及以上版本)
如果你用的是支持动态数组的Excel版本,直接用FILTER函数就能一步到位,它会自动把所有匹配的产品ID填充到下方行里,不用手动下拉。
在Invoice表你要放第一个产品ID的单元格(比如假设是A15)输入公式:
=FILTER(Orders!E:E, Orders!A:A=Invoice!$I$10)
- 原理:
FILTER会遍历Orders表的A列,找出所有和Invoice表I10单元格相同的Invoice ID,然后提取对应行的E列(产品ID),结果会自动向下溢出显示所有匹配项。
方法2:用INDEX+SMALL数组公式(兼容老版本Excel)
如果你的Excel不支持动态数组(比如Excel 2019及更早版本),可以用数组公式来实现:
在Invoice表的目标单元格输入公式,然后按Ctrl+Shift+Enter组合键(不是单独回车)完成数组公式输入,之后下拉填充到足够多的行,直到出现空值:
=IFERROR(INDEX(Orders!E:E, SMALL(IF(Orders!A:A=Invoice!$I$10, ROW(Orders!A:A)), ROW(A1))), "")
- 原理拆解:
IF(Orders!A:A=Invoice!$I$10, ROW(Orders!A:A)):找出所有Invoice ID匹配的行号,不匹配的返回FALSESMALL(..., ROW(A1)):按顺序取出第1、2、3...个匹配的行号(下拉时ROW(A1)会变成ROW(A2)、ROW(A3),依次取后续行号)INDEX(Orders!E:E, ...):根据行号提取对应产品IDIFERROR(..., ""):当没有更多匹配项时,显示空值,避免出现#NUM!错误
注意事项
- 确保Orders表A列的Invoice ID和Invoice表I10的单元格格式完全一致(比如都是文本或都是数字),否则会出现匹配不到的情况
- 用动态数组公式时,不要手动下拉填充,Excel会自动溢出结果,强行下拉会覆盖自动生成的内容
- 老版本的数组公式必须按Ctrl+Shift+Enter输入,单独回车公式不会生效
内容的提问来源于stack exchange,提问作者soconfused
相关产品推荐
相关产品推荐

