У меня есть формула. Это работает - но кажется, что это можно сделать намного проще.
У меня много отделов в нескольких столбцах. В каждой строке есть элемент, который мы отслеживаем, и в каждом столбце есть текст состояния, который изменяется по мере выполнения нами работы.
'очередь' - она находится в очереди, ожидая выполнения, и взвешивает среднее значение
'active' - выполняется и выдает половину значения от среднего значения
'done', 'ok'd', 'rcvd' - закончен и способствует получению среднего значения
«нет» - обозначает отдел, который не выполняет эту работу и не должен учитываться в окончательном среднем.
Формула:
=iferror(((ArrayFormula(sum(countif(B3:O3,{"done","ok'd","rcvd"}))))+(countif(B3:O3,"active")/2))/(counta(B3:O3)-(countif(B3:O3,"none"))),)
Формула работает, но я смотрю, есть ли более простой способ приблизиться к ней. Будет ли лучше работать запрос или модификация массива в этом сценарии?
Что если я захочу добавить другие текстовые строки на основе синтаксиса для моего текущего приложения?
Вот ссылка на образец листа с контекстом.
https://docs.google.com/spreadsheets/d/1zPFAcSxM7tYjZmlATYde7qKsDoeH6AW_xjFooOZFOf4/edit#gid=0
EDIT:
В качестве дополнительного вопроса - как заставить одну и ту же вещь работать в столбцах?
Я провел обратный инжиниринг решения и вижу формулу, работающую в верхней части моего листа, но она дает мне ошибку:
"MMULT имеет несовместимые размеры матриц. Количество столбцов в первой матрице (13) должно равняться количеству строк во второй матрице (1)."
Вот формула, которую я добавил (она также есть в связанном листе).
=ARRAYFORMULA(IF(LEN(B4:N4), MMULT(IFERROR(( N(REGEXMATCH(B4:N9, "ok'd|done|ready|rcvd"))+ N(REGEXMATCH(B4:N9, "active"))/2)/MMULT(N(REGEXMATCH(B4:N9, "[^none]")),TRANSPOSE(ROW(B4:B9)^0)), 0), TRANSPOSE(ROW(B4:B9)^0)),))