Повторение диапазона в Google Sheets - PullRequest
2 голосов
/ 29 марта 2020

Этот вопрос касается повторения диапазона в таблицах Google. Вот формула, которую я сейчас использую:

=ARRAYFORMULA(ARRAYFORMULA(SUM(COUNTIFS(SPLIT(REPT("Attendence!B:B;", 2), ";"), {"Name1", "Name2", "Name3"}, Attendence!O:P, "=P"))))

Вот пример того, что мне нужно:

=ARRAYFORMULA(ARRAYFORMULA(SUM(COUNTIFS({Attendence!B:B, Attendence!B:B, Attendence!B:B, Attendence!B:B}, {"Name1", "Name2", "Name3"}, Attendence!O:R, "=P"))))

По существу Attendence!B:B должен повторяться внутри { } столько же раз, сколько столбцы в Attendence!O:R. Дело в том, что 2-я формула будет работать, за исключением того, что формуле нужен доступ к столбцам C:JY, что означает, сколько раз мне придется повторять Attendence!B:B абсурдное количество раз.

Поэтому я попытался используя это: SPLIT(REPT("Attendence!B:B;", 2), ";") и заменил 2 на количество столбцов, но он постоянно сообщает, что длина обоих параметров не равна.

Упрощенный лист: https://docs.google.com/spreadsheets/d/1PFEz3wz5HOP1cD6HBE-N00yoM1reLwlOpo905cMRW8k/edit?usp=sharing

Этот вопрос очень похож на этот: Как заставить диапазон повторяться n раз в Google SpreadSheet

Однако столько же поскольку я пытался реализовать решение, упомянутое в этом, оно не работало для меня.

1 Ответ

2 голосов
/ 29 марта 2020

Если у вас есть "P" для каждого имени и даты в столбцах C:JY, то вот формула для итога:

=ARRAYFORMULA(SUM(--(C:JY = "P")))

А вот формула для получения столбца для каждого name:

=ARRAYFORMULA(MMULT(--(C:JY = "P"), SEQUENCE(COLUMNS(C:JY), 1, 1, 0)))

Это умножение матрицы на единичный вектор (столбец размером n x 1) - который дает столбец с суммами строк. Если вам нужна строка сумм столбцов, вам нужно умножить одну и ту же матрицу на другой единичный вектор (строка размером 1 x n), например, так (изменение порядка аргументов в MMULT важно):

=ARRAYFORMULA(MMULT(SEQUENCE(1, ROWS(C:JY), 1, 0), --(C:JY = "P")))

enter image description here

Возможно, вы захотите исправить их в случае, если у вас есть данные, начиная со второго ряда. Например, C:JY -> C2:JY и, возможно, отфильтровывать пустые строки.

Альтернативное решение вы можете найти в этом вопросе :

=ARRAYFORMULA(COUNTIFS(IF(COLUMN(C:JY), ROW(C:JY)), ROW(C:JY), C:JY, "P"))

enter image description here

...