求助:Excel动态提取唯一ID对应最新目标日期行的公式优化(避免重复ID)
求助:Excel动态提取唯一ID对应最新目标日期行的公式优化(避免重复ID)
兄弟我懂你折腾好几天的崩溃!我帮你捋清需求后给你几个靠谱的解决方案,分不同Excel版本,你按需选~
需求回顾
- 从Sheet1提取行,要求日期匹配Sheet2里的任意指定日期(比如Sheet2的C2、C3)
- 每个ID(Sheet1的B列)只保留对应最新日期的那一行
- 结果要动态更新(Sheet2换日期/Sheet1改数据自动同步),输出不能有空白行
方案1:Excel 365/2021最优解(动态数组公式)
如果你的Excel是365或2021版本,直接用这个简洁的动态数组公式,输入后会自动溢出结果,完全没有空白行:
=LET( filtered_rows, FILTER(Sheet1!A2:C11, ISNUMBER(XMATCH(Sheet1!C2:C11, Sheet2!C2:C3))), unique_ids, UNIQUE(INDEX(filtered_rows,,2)), latest_dates, BYROW(unique_ids, LAMBDA(id, MAXIFS(INDEX(filtered_rows,,3), INDEX(filtered_rows,,2), id))), XLOOKUP(unique_ids&latest_dates, INDEX(filtered_rows,,2)&INDEX(filtered_rows,,3), filtered_rows, "") )
公式逻辑拆解
filtered_rows:先筛选出Sheet1中日期在Sheet2指定范围内的所有行unique_ids:从筛选结果中提取不重复的IDlatest_dates:对每个唯一ID,找到筛选结果里对应的最新日期- 最后用
XLOOKUP通过「ID+最新日期」的组合匹配回完整行,输出最终结果
方案2:旧版Excel兼容方案(无动态数组)
如果你的Excel是2019及更早版本,用下面两种方法:
方法A:数组公式(输入后按Ctrl+Shift+Enter确认)
在结果区域的第一个单元格(比如D2)输入公式,然后向右填充到F列,再向下填充直到出现空白:
=IFERROR(INDEX(Sheet1!A$2:C$11, MATCH(1, (COUNTIF(D$1:D1, Sheet1!B$2:B$11)=0)*(ISNUMBER(MATCH(Sheet1!C$2:C$11, Sheet2!C$2:C$3, 0))*(Sheet1!C$2:C$11=MAXIFS(Sheet1!C$2:C$11, Sheet1!B$2:B$11, Sheet1!B$2:B$11, Sheet1!C$2:C$11, "<="&MAX(Sheet2!C$2:C$3), Sheet1!C$2:C$11, ">="&MIN(Sheet2!C$2:C$3)))), 0), COLUMN(A1)), "")
方法B:辅助列法(更易调试,适合新手)
在Sheet1的D列(辅助列)输入公式(从D2开始):
=IF(ISNUMBER(MATCH(C2, Sheet2!C$2:C$3, 0)), IF(C2=MAXIFS(C$2:C$11, B$2:B$11, B2, C$2:C$11, "<="&MAX(Sheet2!C$2:C$3), C$2:C$11, ">="&MIN(Sheet2!C$2:C$3)), "保留", "剔除"), "剔除")这个公式会标记符合日期条件且是该ID最新日期的行为「保留」,其他为「剔除」。
在结果区域提取数据:
在D2输入公式,向右填充到F列,向下填充直到空白:=IFERROR(INDEX(Sheet1!A$2:A$11, SMALL(IF(Sheet1!D$2:D$11="保留", ROW(Sheet1!A$2:A$11)-ROW(Sheet1!A$2)+1), ROW(A1))), "")
注意事项
- 如果Sheet2的日期范围不止两个(比如C2:C10),只需要把公式里的
Sheet2!C$2:C$3改成对应的范围即可,动态数组版本会自动适配 - 辅助列法虽然多了一列,但逻辑更直观,出错后更容易排查,适合刚接触Excel公式的朋友
备注:内容来源于stack exchange,提问作者Allycat123
相关产品推荐
相关产品推荐

