使用COUNTIF结合列标题统计指定日期范围内的已参加课程数量
COUNTIF结合列标题统计指定日期范围内的已参加课程数量
嗨,我来帮你搞定这个统计需求!先理清楚你的场景:表格顶部的列标题都是课程日期,每行对应一位人员,单元格里的Yes/No标记是否参加了该课程;你需要在D列统计每行人员参加的课程中,日期落在A列(起始日)和B列(结束日)之间的数量,而且希望一个公式就能自动填充整列,还能支持后续新增的课程列(哪怕超过N列也没问题)。
给你一个能直接用的动态数组公式,把它输入到D2单元格,就能自动溢出填充整列:
=BYROW(A2:B, LAMBDA(r, COUNTIFS( E1:XFD1, ">"&INDEX(r, 1), E1:XFD1, "<"&INDEX(r, 2), OFFSET(r, 0, COLUMN(E1)-1), "Yes" )))
我给你拆解下这个公式的逻辑:
BYROW(A2:B, LAMBDA(r, ...)):自动遍历A2到B列的每一行,把当前行的起始日、结束日打包传给变量rCOUNTIFS:这是核心的多条件统计函数,同时满足以下三个条件的单元格会被计数:- 第1行的课程日期(从E列到Excel最后一列XFD)大于当前行A列的起始日期
- 第1行的课程日期小于当前行B列的结束日期
- 当前行对应课程的出勤标记为Yes
OFFSET(r, 0, COLUMN(E1)-1):定位到当前行从E列开始的所有出勤数据,确保和课程日期列一一对应
如果你的课程列不是从E列开始的,只要把公式里的E1改成对应的起始列(比如课程从F列开始就改成F1)就行。
这个公式的优势很明显:
- 一次输入到D2,整列自动填充,不用手动复制公式到每一行
E1:XFD1涵盖了所有可能的后续新增列,只要新增的课程列标题是日期,就能自动纳入统计范围
备注:内容来源于stack exchange,提问作者DanCue




