结合Excel COUNTIFS和聚合函数

假设我有一个Excel电子表格,其中包含学生的详细信息和学生参加的课程date。 可以说,行标题是:

名字 – 学生成绩 – 课程评估date – 课程安排B – 课程安排C等

那么显然每个学生都有一个单独的行,包括他们的成绩和学生所在课程的date。我想避免对表格进行修改,因为格式已经build立了一段时间。

我正在寻找某种方式来计算所有具有特定年级的学生,这些学生在特定date之间参加了课程。 例如,计算2012年1月1日至2012年3月31date间参加课程的“C”级所有学生。

我猜最后的公式将会是date范围列上的COUNTIFS和MAX的某种组合,但是我看不到如何在逐行的基础上应用这个。

所有的build议非常感谢!

最好的问候,克里斯

假设你有B2:B100成绩和5列C2:G100date,那么你可以使用这个公式来计算特定年级学生在特定date学习课程的人数。

=SUMPRODUCT((MMULT((C$2:G$100>=J2)*(C$2:G$100<=K2)*(B$2:B$100=I2),{1;1;1;1;1})>0)+0)

其中J2K2是该期间( 1-Jan-2012 1-Mar-2012 )的开始和结束date, I2是特定等级( C

{1;1;1;1;1}部分取决于date列的数量,所以如果有7个date列,则需要将其更改为{1;1;1;1;1;1;1} …..或者你使用这个版本dynamic调整公式

=SUM((MMULT((C$2:G$100>=J2)*(C$2:G$100<=K2)*(B$2:B$100=I2),TRANSPOSE(COLUMN(C2:G100))^0)>0)+0)

后面的公式是一个“数组公式”,你需要用CTRL+SHIFT+ENTER

更新

对于特定date范围内的不同成绩的数量,假定您有一个有限的成绩列表,然后在工作表的某处列出,例如M2:M10 ,然后您可以使用这个“数组公式”

=SUM(1-ISNA(MATCH(M$2:M$10,IF(MMULT((C$2:G$100>=J2)*(C$2:G$100<=K2),{1;1;1;1;1}),B$2:B$100),0)))

CTRL+SHIFT+ENTER