Google Sheets ARRAYFORMULA считает предшествующие строки, соответствующие условию - PullRequest
2 голосов
/ 25 марта 2020

Допустим, у меня есть электронная таблица, которая выглядит примерно так:

Name                   D-List
---------------------  ------
Arnold Schwarzenegger
Bruce Willis
Dolph Lundgren
Dwayne Johnson
Jason Statham
Keanu Reeves
Samuel L. Jackson
Sylvester Stallone
Vin Diesel

Для столбца D-List я бы хотел посчитать количество исходящих строк, содержащих строку "d". Если строка не содержит "d", я хочу, чтобы она возвращала пустую строку.

Для любой данной строки я могу заставить ее работать со следующей псевдо-формулой:

=IF(REGEXMATCH(A<row>, "d"), COUNTIF(A<row>, "*d*"), "")
Name                   D-List
---------------------  ------
Arnold Schwarzenegger  1
Bruce Willis    
Dolph Lundgren         2
Dwayne Johnson         3
Jason Statham   
Keanu Reeves    
Samuel L. Jackson   
Sylvester Stallone  
Vin Diesel             4

Я могу превратить это в выражение, которое можно дублировать между строками, используя INDIRECT и ROW:

=IF(REGEXMATCH(A2, "(?i)d"), COUNTIF(INDIRECT("A2:A" & ROW(A2)), "*D*"), "")
Name                   D-List
---------------------  ------
Arnold Schwarzenegger  1
Bruce Willis    
Dolph Lundgren         2
Dwayne Johnson         3
Jason Statham   
Keanu Reeves    
Samuel L. Jackson   
Sylvester Stallone  
Vin Diesel             4

Однако, если я попытаюсь вставить его в ARRAYFORMULA он не работает.

=ARRAYFORMULA(IF(REGEXMATCH(A2:A, "D"), COUNTIF(INDIRECT("A2:A" & ROW(A2:A)), "*D*"), ""))
Name                   D-List
---------------------  ------
Arnold Schwarzenegger   
Bruce Willis    
Dolph Lundgren         1
Dwayne Johnson         1
Jason Statham   
Keanu Reeves    
Samuel L. Jackson   
Sylvester Stallone  
Vin Diesel             1

Чего мне не хватает?

1 Ответ

3 голосов
/ 25 марта 2020

попробовать:

=ARRAYFORMULA(IF(
 REGEXMATCH(A2:A, "(?i)d"), COUNTIFS(
 REGEXMATCH(A2:A, "(?i)d"), 
 REGEXMATCH(A2:A, "(?i)d"), ROW(A2:A), "<="&ROW(A2:A)), ))

0

...