Excel函数需求:按ID匹配Table1行并校验对应月份日期存在性
解决方案:判断ID当月是否有匹配日期
嘿,我来帮你搞定这个Excel函数需求!结合你的场景——Table1存着ID和对应的多个日期,月度日历表要校验每个ID当月是否有匹配日期——我给你两种实用的方案,适配不同的Excel版本:
方法1:用COUNTIFS(兼容绝大多数Excel版本)
先明确几个前提假设(你可以根据自己的实际表格调整):
- 第一张工作表的数据源是正式表
Table1,其中[ID]是标识列,[关联日期]是每个ID对应的日期列(每个ID可能有多行日期) - 月度日历工作表中,当前行的ID在单元格
A2,我们要判断这个ID当前月份是否有匹配的日期
直接在日历表的对应单元格(比如B2)输入这个公式:
=IF(COUNTIFS(Table1[ID], A2, Table1[关联日期], ">="&EOMONTH(TODAY(), -1)+1, Table1[关联日期], "<="&EOMONTH(TODAY(), 0))>0, "存在匹配日期", "无匹配日期")
公式拆解:
EOMONTH(TODAY(), -1)+1:自动计算当前月份的第一天(比如今天是2024年5月15日,结果就是2024/5/1)EOMONTH(TODAY(), 0):自动计算当前月份的最后一天(2024/5/31)COUNTIFS会同时匹配两个条件:ID和日期在当月范围内,只要计数大于0,就说明该ID当月有对应日期
如果你的月度日历是固定某个特定月份(不是自动取当前月),把TODAY()换成目标月份的任意日期就行,比如要判断2024年6月,公式改成:
=IF(COUNTIFS(Table1[ID], A2, Table1[关联日期], ">="&DATE(2024,6,1), Table1[关联日期], "<="&EOMONTH(DATE(2024,6,1), 0))>0, "存在匹配日期", "无匹配日期")
方法2:用动态数组函数(Excel 365/2021及以上版本)
如果你的Excel支持动态数组(比如365或2021版),可以用BYROW批量处理所有ID,不用手动下拉填充:
假设日历表的ID范围是A2:A100,在B2输入这个公式,它会自动向下填充所有行的结果:
=BYROW(A2:A100, LAMBDA(id, IF(ROWS(FILTER(Table1[关联日期], (Table1[ID]=id)*(MONTH(Table1[关联日期])=MONTH(TODAY()))*(YEAR(Table1[关联日期])=YEAR(TODAY()))))>0, "存在", "不存在")))
额外提醒:
- 一定要确保Table1的日期列是真正的日期格式,不是文本格式!如果是文本,函数会识别不了日期范围
- 如果你的Table1不是正式表(只是普通单元格区域),把
Table1[ID]换成对应的单元格范围,比如Sheet1!$A$2:$A$1000,日期列换成Sheet1!$B$2:$B$1000
内容的提问来源于stack exchange,提问作者Bader Alhashel
相关产品推荐
相关产品推荐

