我有一组复杂的数据,每行可以返回3种不同的条件。我需要能够计算出符合特定条件之一的最后x行。
以下公式对我来说一直很好,但是我发现该公式的一个实例出现故障(该公式至少重复了12次)
=ArrayFormula(LOOKUP(9.99999999999999E+307,IF(FREQUENCY(IF(AQ:AQ)=1,ROW(AQ:AQ)),IF(AQ:AQ<>1,ROW(AQ:AQ)))=0,FREQUENCY(IF(AQ:AQ=1,ROW(AQ:AQ)),IF(AQ:AQ=0,ROW(AQ:AQ))))))
当前标准如下:
0:满足条件x-重置计数器
1:满足条件-增量计数器
2:满足条件z-忽略此行
因此,此:
1
2
2
2
1
1
0
1
1
1
应输出:3
此:
1
2
0
2
2
1
2
1
应输出:2
但是,我遇到的故障不会在达到0时重置计数器,例如:
1
2
1
2
1
1
2
2
2
2
0
应输出:0
但实际上正在输出:4
我已使用该特定数据集测试了所有可能的状况,但无法纠正此问题。我相信公式中有一个错误(特别是9.99999999999999E + 307),但是我很久以前就写了它,所以我无法成功调试它。我已经尝试过1E + 306,但是结果是一样的。
编辑1:应要求,在重新创建问题时,我会尽可能包括表格的精简版。
https://docs.google.com/spreadsheets/d/1SOXiFMEQelqptBvjcabMZGNgG60TRRbe_b65rzT1bi0/edit?usp=sharing
如果滚动到工作表的底部,您会看到Col AQ
的值为0,因此单元格AF2
中的值应该为0
。
您会在工作表中注意到我正在使用“命名范围”。
EDIT2:player0的回答很完美!! <3
我修改了新公式以适应我的电子表格,以便它可以容纳“命名范围”和下拉列表。这个问题对我有很大帮助:
Convert column index into corresponding column letter
最终公式(仅供参考)是:
=ARRAYFORMULA(COUNTIF(
INDIRECT(REGEXEXTRACT(ADDRESS(ROW(), column(INDIRECT($A$1 & Z$1 & "L"))), "[A-Z]+")&
MAX(IF((INDIRECT($A$1 & Z$1 & "L")=0)*(INDIRECT($A$1 & Z$1 & "L")<>""),
ROW(INDIRECT($A$1 & Z$1 & "L"))+1,5))&":"&
REGEXEXTRACT(ADDRESS(ROW(), column(INDIRECT($A$1 & Z$1 & "L"))), "[A-Z]+")), 1))
答案 0 :(得分:1)
=ARRAYFORMULA(COUNTIF(INDIRECT("A"&
MAX(IF((A2:A=0)*(A2:A<>""), ROW(A2:A)+1, ROW(A2)))&":A"), 1))