【发布时间】:2017-03-22 09:16:52
【问题描述】:
问题
如何将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))))
.
注意:
- 以上代码只是部分解决方案。我会将代码的 ARRAYFORMULA 版本替换到代码的正确部分
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 有一个单个 公式...
=arrayformula(if(COUNTIF(Meta!$B$5:$B, ("=" & Timetable_Code)), (Timetable_Code & " ( " & Timetable_StudentCount & " )") ,""))
.
优点
- 非常容易理解
- 非常容易修改
- 无需将公式复制到其他单元格
缺点
- 创建了两 (2) 个辅助表(我认为其中一个不需要)
再次,我喜欢输出,但我真的不喜欢第二个辅助表 (Schedule!C20)。我觉得这个表可以消除,但我一直无法弄清楚如何消除。
【问题讨论】:
标签: excel-formula google-sheets array-formulas