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
相关产品推荐
相关产品推荐

