2012-04-01 134 views
1

假设我有一个Excel电子表格,其中包含学生的详细信息以及学生参加的课程日期。比方说,行头是:将Excel COUNTIFS与集合函数结合

名称 - 学生成绩 - 当然A的日期 - 当然B的日期 - 路C等的日期......

那么显然每个学生包含其档次和日期的单独的行的学生出席的课程。我想避免对表格进行修改,因为格式已经建立了一段时间。

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

我猜测最终公式会是某种日期范围列上的COUNTIFS和MAX的组合,但我不明白我可以如何逐行应用这一点。

所有的建议非常感谢!

最好的问候, 克里斯

+0

如果1名学生参加了1场在二月和3月2日证实,他应该算作1日和1月?二月份为0,三月份为1?或2月1日和3月2日? – Aprillion 2012-04-01 10:56:49

回答

2

假设你有B2:B100等级和日期在5列C2:G100那么你可以使用这个公式与谁了课程的具体日期时期的特定等级来算的学生人数。

=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-20121-Mar-2012)和I2的开始和结束日期是一个特定等级(C

{1;1;1;1;1}部分取决于日期的列数,所以如果有7个日期列,那么您需要将其更改为{1;1;1;1;1;1;1} .....或者您可以使用此版本动态调整公式

=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

更新

确认对于不同等级的特定日期范围内的数,然后假设你有一个有限的可能成绩列表,然后在工作表上某处列出,例如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

+0

这工作出色,谢谢。将第一个用作日期固定的列。对于奖励积分,我将如何着手获得该范围内不同数量的行?再次感谢! – 2012-04-02 04:08:59

+0

对不起,只是为了澄清 - 我正在寻找不同年级的学生参加特定日期之间的课程。 – 2012-04-02 06:42:08

+2

对于特定日期内的distince等级的数量,可以用CTRL + SHIFT + ENTER试试这个:'= COUNT(FREQUENCY(IF((C $ 2:G $ 100> = J2)*(C $ 2:G $ 100 <= K2) ,MATCH(B $ 2:B 100 $,B $ 2:乙100,0 $)),ROW(B $ 2:100 B $)-MIN(ROW(B $ 2:B $ 100)))^ 0)'。 – 2012-04-02 08:19:55