使用转置公式 google 表对多行求和

Sum across many rows with transposed formulas google sheets

我正在尝试构建一个公式来计算日期范围内发生的 classes 的总数。这是我可以使用的公式,但它需要包含数百行(即从 B2 到 B500 左右的 'Class Counts')。有什么方法可以将它变成一个数组,这样我就不必有一页又一页长的公式了吗?

=countifs(transpose(unique(filter('All Data'!$A:$A,'All Data'!$B:$B='Class Counts'!$B2))),">="&'All Totals'!$N4,transpose(unique(filter('All Data'!$A:$A,'All Data'!$B:$B='Class Counts'!$B2))),"<"&'All Totals'!$N5)+
countifs(transpose(unique(filter('All Data'!$A:$A,'All Data'!$B:$B='Class Counts'!$B3))),">="&'All Totals'!$N4,transpose(unique(filter('All Data'!$A:$A,'All Data'!$B:$B='Class Counts'!$B3))),"<"&'All Totals'!$N5)+
countifs(transpose(unique(filter('All Data'!$A:$A,'All Data'!$B:$B='Class Counts'!$B4))),">="&'All Totals'!$N4,transpose(unique(filter('All Data'!$A:$A,'All Data'!$B:$B='Class Counts'!$B4))),"<"&'All Totals'!$N5)
+ ... etc.

'All Data' A 列包含 class 的日期,B 列包含 class 的姓名(对每个学生重复,但只能计算一次)。 'Class Counts' B 列包含唯一 class 名称的列表。 'All Totals' 单元格 N4 和 N5 包含开始检查的月份。

目标是当且仅当它落在 'All Totals' 上的 N4 和 N5 指定的数据范围内时,才对 class 的每次出现计数一次。唯一的问题是,最终会有数百个 classes 横跨许多年。

我的想法是将它变成一个数组公式并计算整个范围,但我所有的尝试都返回了 0 个计数。

我不能分享实际的 sheet 因为里面有个人信息,但我在这里创建了一个测试版本: https://docs.google.com/spreadsheets/d/1Nf0f5Bnuwe0-dnH6zHILGntdv2JDywFOTvmTjteXVLQ/edit?usp=sharing

我要修复的公式位于“导入”选项卡上。

编辑: 我意识到这方面的 "transpose" 方面可能没有必要,所以我将公式向下编辑了一点,但仍然无法自动对所有 'Class Counts' class 名称求和( B 列)。

=countifs(unique(filter('All Data'!$A:$A,'All Data'!$B:$B='Class Counts'!$B2)),">="&'All Totals'!$N4,unique(filter('All Data'!$A:$A,'All Data'!$B:$B='Class Counts'!$B2)),"<"&'All Totals'!$N5)
+countifs(unique(filter('All Data'!$A:$A,'All Data'!$B:$B='Class Counts'!$B3)),">="&'All Totals'!$N4,unique(filter('All Data'!$A:$A,'All Data'!$B:$B='Class Counts'!$B3)),"<"&'All Totals'!$N5)
+countifs(unique(filter('All Data'!$A:$A,'All Data'!$B:$B='Class Counts'!$B4)),">="&'All Totals'!$N4,unique(filter('All Data'!$A:$A,'All Data'!$B:$B='Class Counts'!$B4)),"<"&'All Totals'!$N5)
+ ... etc

谢谢!

尝试:

=QUERY('All Data'!A2:B, 
 "select B,count(B) 
  where A >= date '"&TEXT('All Totals'!N4, "yyyy-mm-dd")&"' 
    and A <  date '"&TEXT('All Totals'!N5, "yyyy-mm-dd")&"'
  group by B 
  label count(B)''")

如果您只想要特定的 类 尝试:

=QUERY('All Data'!A2:B, 
 "select B,count(B) 
  where A >= date '"&TEXT('All Totals'!N4, "yyyy-mm-dd")&"' 
    and A <  date '"&TEXT('All Totals'!N5, "yyyy-mm-dd")&"'
    and B matches '"&TEXTJOIN("|", 1, 'Class Counts'!B2:B)&"' 
  group by B 
  label count(B)''")

和 return 只有它的总和:

=SUM(QUERY('All Data'!A2:B, 
 "select count(B) 
  where A >= date '"&TEXT('All Totals'!N4, "yyyy-mm-dd")&"' 
    and A <  date '"&TEXT('All Totals'!N5, "yyyy-mm-dd")&"'
    and B matches '"&TEXTJOIN("|", 1, 'Class Counts'!B2:B)&"' 
  group by B 
  label count(B)''"))

正则表达式括号修复:

=INDEX(SUM(QUERY(UNIQUE('All Data'!A2:B), 
 "select count(Col2)
  where Col1 >= date '"&TEXT('All Totals'!N4, "yyyy-mm-dd")&"' 
    and Col1 <  date '"&TEXT('All Totals'!N5, "yyyy-mm-dd")&"' 
    and Col2 matches '"&
 SUBSTITUTE(SUBSTITUTE(TEXTJOIN("|", 1, 'Class Counts'!B2:B), "(", "\("), ")", "\)")&"' 
  group by Col2
  label count(Col2)''")))