如何将Schedule!C20:I29
处的以下简单公式转换为Schedule!C20
处的单个简单ARRAYFORMULA?
=Count(Filter(Students!$B$5:$B, Find(C6, Filter(Students!$J$5:$O,Students!$J$4:$O$4 = 'Current Class'!$B$3))))
.
注意:
Current Class!L6
上面的C6
引用可以采用Schedule!C6:I15
之间的任何单元格。我已将该范围命名为Timetable_Code
。 我以为我可以做到以下几点,但我错了......
=Arrayformula(Count(Filter(Students!$B$5:$B, Find(Timetable_Code, Filter(Students!$J$5:$O,Students!$J$4:$O$4 = 'Current Class'!$B$3)))))
最初,我创建了一个现在位于1st Version - Current Class!L6
的表。此选项卡仅供您参考,很快就会被删除。每个细胞都有一个略有修改的配方。 这个公式正常;然而,它是一个庞然大物,很难修改......
=if(COUNTIF(Meta!$B$5:$B, CONCATENATE("=",if(L$5 = "THURSDAY", "TH", if(L$5 = "SUNDAY", "SU", left(L$5,1))), if(left($K6, 2) = "12", 0, left($K6, 1)))), CONCATENATE(if(L$5 = "THURSDAY", "TH", if(L$5 = "SUNDAY", "SU", left(L$5,1))), if(left($K6, 2) = "12", 0, left($K6, 1)), " ( ", Count(Filter(Students!$B$5:$B, Find(CONCATENATE(if(L$5 = "THURSDAY", "TH", if(L$5 = "SUNDAY", "SU", left(L$5,1))), if(left($K6, 2) = "12", 0, left($K6, 1))), Filter(Students!$J$5:$O,Students!$J$4:$O$4 = $B$3)))), " )") ,"")
.
赞成
缺点
我喜欢输出,但我不喜欢这个缺点,所以我开始创建一个更加编辑友好的代码版本,我很满意。此代码位于Current Class!L6
(以及Schedule!C33
的辅助副本 - 它将被删除。)它在Current Class!L6
处有一个单公式... < / p>
=arrayformula(if(COUNTIF(Meta!$B$5:$B, ("=" & Timetable_Code)), (Timetable_Code & " ( " & Timetable_StudentCount & " )") ,""))
.
赞成
缺点
同样,我喜欢输出,但我真的不喜欢第二个辅助表(Schedule!C20
)。我觉得这张桌子可以被淘汰,但我还是弄不清楚。
答案 0 :(得分:1)
如果您真的想使用arrayformula
,请点击此处。对于Schedule!C20
。
=arrayformula((len(concatenate(index(Students!J5:O, , match('Current Class'!$B$3, Students!J4:O4, 0))))-len(substitute(concatenate(index(Students!J5:O, , match('Current Class'!$B$3, Students!J4:O4, 0))),C6:I15,"")))/len(C6:I15))
可能你可以使用filter
(正如之前所做的那样)代替index & match
部分,但我更喜欢index & match
并且不想再挖掘更多。您还可以使用一个帮助单元格来存储filter
或index & match
结果,以缩短公式。
核心思想是计算字符串中给定字符的出现次数,即len(a1) - len(substitute(a1, ...
。你可以在网上找到很多关于它的文件。
无论如何,如果我是你,我会对目前的状态感到满意。只需锁定并隐藏帮助表或表格即可。没有人关心隐藏的床单,如果发生了不好的事情,你可以恢复任何改变。
答案 1 :(得分:0)
在从@Sangbok Lee那里得到一个好的答案之后,我决定打破他给我的每一部分功能。在这样做的过程中,我发现上周我在Google表格中所做的一些工作的可能性非常小。我在另一个标签中有一个辅助列,就像Sangbok Lee试图做的那样。我所要做的就是将辅助列分成两列(前一个最终计算为1,后者为1)并计算一个额外的计数列
在重新设计了两个公式并测试结果后,我找到了一个让我更满意的解决方案!
Derived
中的差异
Derived
标签=arrayformula(if(countif(Meta!$B$5:$B, (Timetable_Code)), (Timetable_Code & " ( " & vlookup(Timetable_Code, StudentCount_Lookup, 2, false) & " )") ,""))
.
第二个版本查看1st Version - Current Class!L6
第3版和最终版
另请参阅标签Current Class!L6
和Current Class!U6
了解差异。
注意:绿色是旧数据,红色是新数据