如何在指定月份处于两个日期区间时自动填充列?
实现指定月份匹配日期区间的自动填充公式
适用场景(Excel 365/2021 动态数组版本)
假设表格结构:
- A列:待提取的名称
- B列:开始日期
- C列:结束日期
- D列:复选框(勾选返回
TRUE,未勾选返回FALSE) - F1:目标月份(输入日期格式,比如
2024-5-1代表五月)
在需要填充的单元格输入以下公式,将自动生成所有符合条件的名称:
=FILTER(A:A, (B:B<=EOMONTH(F1,0))*(C:C>=EOMONTH(F1,-1)+1)*(D:D=FALSE), "无匹配")
公式说明
EOMONTH(F1,-1)+1:计算目标月份的第一天(例:F1为2024-5-10时,结果为2024-5-1)EOMONTH(F1,0):计算目标月份的最后一天(例:2024-5-31)B:B<=EOMONTH(F1,0):确保开始日期不晚于目标月份最后一天C:C>=EOMONTH(F1,-1)+1:确保结束日期不早于目标月份第一天- 以上两个条件组合,判断目标月份与B-C的日期区间存在重叠
D:D=FALSE:排除D列复选框已勾选的行"无匹配"为无符合条件数据时的显示文本,可按需修改
兼容旧版Excel(无FILTER函数)
若Excel版本不支持动态数组,使用以下数组公式(输入后按Ctrl+Shift+Enter确认,再下拉填充):
=IFERROR(INDEX(A:A,SMALL(IF((B:B<=EOMONTH(F1,0))*(C:C>=EOMONTH(F1,-1)+1)*(D:D=FALSE),ROW(A:A)),ROW(A1))),"")
特殊情况处理(F1为文本月份)
若F1输入的是文本格式月份(比如五月),先将文本转换为对应日期再计算,公式调整为:
=FILTER(A:A, (B:B<=EOMONTH(DATEVALUE(F1&" 1"),0))*(C:C>=EOMONTH(DATEVALUE(F1&" 1"),-1)+1)*(D:D=FALSE), "无匹配")
注意事项
- 确保B、C列是标准日期格式,而非文本格式(可通过设置单元格格式为「日期」验证)
- 若复选框勾选后返回数字
1而非TRUE,将公式中的D:D=FALSE改为D:D=0即可
内容的提问来源于stack exchange,提问作者spence1
相关产品推荐
相关产品推荐

