Excel跨表筛选需求:提取Sheet2中未满2岁人员的Op#至Sheet1
提取Sheet2中未满2岁人员的Op#列表到Sheet1
方案1:Excel 365/2021 动态数组公式(推荐)
在Sheet1的A2单元格输入以下公式,会自动生成所有符合条件的Op#:
=FILTER(Sheet2!A:A,DATEDIF(Sheet2!B:B,TODAY(),"Y")<2,"无符合条件人员")
公式逻辑:
DATEDIF(Sheet2!B:B,TODAY(),"Y")<2:计算Sheet2中每个人员的周岁年龄,判断是否小于2岁,返回一组布尔值(TRUE/FALSE)FILTER(Sheet2!A:A, 条件, "无符合条件人员"):从Sheet2的A列(Op#列)筛选出满足条件的内容;如果没有符合条件的人员,返回指定提示文本。
方案2:旧版Excel 数组公式(适配无动态数组功能的版本)
在Sheet1的A2单元格输入以下公式,按Ctrl+Shift+Enter完成数组输入,然后下拉填充到足够多行:
=IFERROR(INDEX(Sheet2!$A:$A,SMALL(IF(DATEDIF(Sheet2!$B:$B,TODAY(),"Y")<2,ROW(Sheet2!$B:$B)-1),ROW(A1))),"")
逐部分解释公式逻辑:
DATEDIF(Sheet2!$B:$B,TODAY(),"Y")<2:和方案1逻辑一致,生成判断是否未满2岁的布尔数组IF(...,ROW(Sheet2!$B:$B)-1):将满足条件的行号(减去表头所在行号,假设Sheet2表头在第1行)提取出来,不满足条件的返回FALSESMALL(...,ROW(A1)):按从小到大的顺序提取符合条件的行号;下拉时ROW(A1)会自动变为ROW(A2)、ROW(A3),依次取第1、第2、第3个符合条件的行号INDEX(Sheet2!$A:$A,...):根据提取的行号,从Sheet2的A列取出对应的Op#IFERROR(..., ""):当没有更多符合条件的人员时,返回空值,避免显示错误提示
注意事项:
- 确保Sheet2中的出生日期列是标准日期格式,如果是文本格式,
DATEDIF会报错 - 若Sheet2的表头不在第1行,需调整
ROW(Sheet2!$B:$B)-1中的减数值(比如表头在第2行则减2)
内容的提问来源于stack exchange,提问作者afonso granja
相关产品推荐
相关产品推荐

