You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel条件返回需求:匹配EMP ID提取对应行非空日期值

解决Excel多列非空日期提取问题

场景回顾

根据Sheet1单元格H3的EMP ID,匹配Sheet2中B列对应的行,提取该行D、G、I列的非空日期并依次列出(空值自动排除)。


方案1:Excel 365/2021(支持动态数组)

直接用TOCOL+FILTER组合,自动溢出所有非空日期到下方单元格:

=TOCOL(FILTER(Sheet2!D:G:I, Sheet2!B:B=Sheet1!H3), 1)
  • FILTER:筛选出Sheet2中B列等于Sheet1!H3的行,仅保留D、G、I列数据
  • TOCOL:将筛选后的多列数据转为单列,参数1表示忽略空值

如果需要把所有非空日期合并到一个单元格(用逗号分隔),用TEXTJOIN:

=TEXTJOIN(", ", TRUE, FILTER(Sheet2!D:G:I, Sheet2!B:B=Sheet1!H3))
  • TRUE:自动忽略空值,只拼接非空日期

方案2:旧版Excel(无动态数组支持)

需要逐个单元格提取非空值,以下公式需按Ctrl+Shift+Enter作为数组公式输入:

提取第一个非空日期(比如放在Sheet1的J3)

=IFERROR(INDEX(Sheet2!$D:$I, MATCH(Sheet1!$H3, Sheet2!$B:$B, 0), SMALL(IF(INDEX(Sheet2!$D:$I, MATCH(Sheet1!$H3, Sheet2!$B:$B, 0), 0)<>"", COLUMN(Sheet2!$D:$I)-COLUMN(Sheet2!$D$1)+1), 1)), "")

提取第二个非空日期(放在Sheet1的J4)

把公式里的SMALL(...,1)改成SMALL(...,2)即可:

=IFERROR(INDEX(Sheet2!$D:$I, MATCH(Sheet1!$H3, Sheet2!$B:$B, 0), SMALL(IF(INDEX(Sheet2!$D:$I, MATCH(Sheet1!$H3, Sheet2!$B:$B, 0), 0)<>"", COLUMN(Sheet2!$D:$I)-COLUMN(Sheet2!$D$1)+1), 2)), "")
  • 以此类推,修改SMALL的第二个参数,就能提取第N个非空日期,IFERROR用来处理无更多非空值时的空白显示

为什么嵌套IF+VLOOKUP无法解决?

VLOOKUP只能返回匹配行中指定列的第一个值,嵌套IF仅能有限判断几个列的空值情况,无法自动遍历并收集所有非空日期。上述方案通过筛选/索引+数组遍历的方式,实现了对目标列非空值的批量提取。

内容的提问来源于stack exchange,提问作者Abhishek Gaurav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 07:17:45