ARRAYFORMULA и COUNTA рассчитывать только до текущей строки - PullRequest
0 голосов
/ 09 апреля 2020

Here's an example of my sheet

В строке D я бы хотел посчитать значения строки E (COUNTA), но только до текущей строки столбца. Я пытался использовать ARRAYFORMULA, COUNTA и ROW, но из того, что я прочитал, COUNTA не будет работать с ARRAYFORMULA. С этой формулой я получаю общую COUNTA столбца, возвращаемого для каждой строки.

Мне нужно автоматически применить формулу к строкам (и новым строкам), поэтому я намеревался использовать ARRAYFORMULA. Тем не менее, я также изучал функции QUERY, но безрезультатно. Я думаю, что мое решение может быть в сценариях, но я пока не очень уверен в них.

Ответы [ 3 ]

0 голосов
/ 09 апреля 2020

Я понял это. Оказывается, я был прав насчет решения, являющегося скриптом приложения. Вот мой код:

function myFunction() {

  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  ss.getRange("D2").setFormula("=IF(ISBLANK($A2),,COUNTA(INDIRECT($F2)))");

  var lr = ss.getLastRow();
  var downRange = ss.getRange(2, 4, lr-1);

  ss.getRange("D2").copyTo(downRange);

}
0 голосов
/ 09 апреля 2020

D1:

 =ARRAYFORMULA({"What I Want";
  IF(ISBLANK(E2:LOOKUP(2,1/(E:E<>""),E:E)),,
    COUNTIFS(SEQUENCE(LOOKUP(2,1/(E:E<>""),SEQUENCE(2^20))-1),
        "<="&SEQUENCE(LOOKUP(2,1/(E:E<>""),SEQUENCE(2^20))-1),
    E2:LOOKUP(2,1/(E:E<>""),E:E),
        "<>"
    )
  )
})

Примечания:

Изнутри

  • LOOKUP(2,1/(E:E<>""),E:E) - LOOKUP обеспечивает последний пустой диапазон 1
  • E2:LOOKUP(..) обеспечивает диапазон: E2:E11 в этом случае. Этот синтаксис может использоваться для создания динамических c диапазонов
  • LOOKUP(...,SEQUENCE(2^20)) обеспечивает номер последней пустой строки до 2 ^ 20 (~ 36k) строк
  • SEQUENCE(LOOKUP(...)) предоставляет последовательность чисел из 1 до последнего ряда.
  • SEQUENCE(), "<="&SEQUENCE() внутри COUNTIFS предоставляет лог c для промежуточного итога. Первая последовательность создает массив восходящих чисел (например, 1,2,3 ...). Вторая последовательность предоставляет массив критериев по возрастанию (например, <= 1, <= 2, <= 3, ...). Каждое число в массиве номеров сравнивается со всеми в массиве критериев. Например, при сравнении <code>2 удовлетворяются два критерия (<= 1 и <= 2). Таким образом, для строки 2 количество равно 2 (количество всех предыдущих строк) </li>
  • COUNT строк, ЕСЛИ вышеприведенное условие выполнено и E: E не пусто ("<>")
  • Очистить пропуски с IF(ISBLANK)
0 голосов
/ 09 апреля 2020

попробуй так:

=COUNTA(IFERROR(INDIRECT("E1:E"&ROW())))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...