如何在Excel中统计日期范围内指定日期(1日、15日)的出现次数
Excel统计日期范围内1日和15日出现次数的最优方法
方法一:SUMPRODUCT数组公式(推荐,无辅助列)
直接用一个公式就能搞定,假设开始日期存在A1,结束日期在B1,输入以下公式:
=SUMPRODUCT(--(DAY(ROW(INDIRECT(A1&":"&B1)))={1,15}))
公式拆解:
ROW(INDIRECT(A1&":"&B1)):生成起始到结束日期之间的所有日期序列(日常使用中,只要日期范围不超过Excel最大行数1048576就没问题)DAY(...):提取每个日期的“日”部分(比如2022/4/1提取出1)--(DAY(...)={1,15}):判断每个日期的日数是否是1或15,返回的TRUE/FALSE通过--转换成1/0SUMPRODUCT:把所有符合条件的1加起来,就是总次数
你提到的2022年4月1日到2022年6月17日的例子,代入公式会直接返回6,完全符合预期。
方法二:辅助列+COUNTIFS(适合新手)
如果觉得数组公式不好理解,可借助辅助列:
- 先在表格里列出日期范围内的所有日期(比如放在C列)
- 在D列输入公式
=DAY(C1),下拉填充到所有日期行,提取每个日期的日数 - 最后用公式统计:
=SUM(COUNTIFS(D:D,{1,15}))
或者拆成两个COUNTIF相加:
=COUNTIFS(D:D,1)+COUNTIFS(D:D,15)
方法三:大日期范围适配方案
如果日期范围极大,超过ROW函数的行数限制,可改用NETWORKDAYS.INTL反向计算(把非1/15的日期都算作工作日,用总天数减去工作日数得到目标次数):
=DATEDIF(A1,B1,"d")+1 - NETWORKDAYS.INTL(A1,B1,"0000000",ROW(INDIRECT(A1&":"&B1))*(DAY(ROW(INDIRECT(A1&":"&B1)))<>1)*(DAY(ROW(INDIRECT(A1&":"&B1)))<>15))
不过这个方法复杂度高,日常场景优先用前两种。
内容的提问来源于stack exchange,提问作者Pankaj-Talesara
相关产品推荐
相关产品推荐

