Обновлено: я понятия не имел, что ссылка на мой основной лист ведет к изображению, а не к моему образцу книги, я понял свою ошибку благодаря @horanimal, и ссылка была исправлена.
Я использую формулу массива на моем Основном листе для заполнения ячеек отфильтрованными данными из моего информационного листа на основе дат в столбце A. Эта формула подсчитывает количество совпадений на информационном листе, определяемом данными основного листа в ячейках B2. и B3, которые соответствуют дате в столбце A, которые имеют либо статус ПРОЙДЕН, либо РЕМОНТ, а затем умножают эту сумму на число в листе данных, наконец, вычитая сумму любых применимых чисел в информационном листе для окончательного результата. .
Основной лист:
Информационный лист:
Я написал эту формулу для ячейки B4 и скопировал ее вниз по столбцу: =ARRAYFORMULA(COUNTA(IFERROR(FILTER(Info!$A$5:$5,Info!$A$2:$2=$A4,Info!$A$3:$3=$B$2,Info!$A$4:$4 = "➕",REGEXMATCH(Info!$A$6:$6,"PASS|REPAIRED"),REGEXMATCH(Info!$A$7:$7,"PASS|REPAIRED"))))*Data!$B$4 -SUM(IFERROR(FILTER(Info!$A$8:$8,Info!$A$2:$2=$A4,Info!$A$3:$3=$B$2,Info!$A$4:$4 = "➕",REGEXMATCH(Info!$A$6:$6,"PASS|REPAIRED"),REGEXMATCH(Info!$A$7:$7,"PASS|REPAIRED")))))
Это дает мне правильные данные, но я пытаюсь добиться того, чтобы только одна формула в ячейке B3 обрабатывала весь столбец и давала мне одни и те же данные. Я пытался переписать формулу таким образом для ячейки C3, но я получаю только первый результат в ячейке C4, а ячейки в C5: C остаются пустыми:
= {"➕➕";ARRAYFORMULA(COUNTA(IFERROR(FILTER(Info!A$5:$5,Info!A$2:$2=$A4,Info!A$3:$3=$B$2,Info!A$4:$4 = "➕➕",REGEXMATCH(Info!A$6:$6,"PASS|REPAIRED"),REGEXMATCH(Info!A$7:$7,"PASS|REPAIRED"))))*Data!$B$4 -SUM(IFERROR(FILTER(Info!A$8:$8,Info!A$2:$2=$A4,Info!A$3:$3=$B$2,Info!A$4:$4 = "➕➕",REGEXMATCH(Info!A$6:$6,"PASS|REPAIRED"),REGEXMATCH(Info!A$7:$7,"PASS|REPAIRED")))))}
Как мне правильно переписать это, используя только одну формулу?
@ J.Kubassek, можете ли вы привести несколько примеров заголовков и значений для таблицы Info
?
Пожалуйста, смотрите мой обновленный пост, я не понял, что ссылка на мой лист с примерами не указывала на правильное место.
проверьте ответ ниже, я думаю, что мы его получили! Также, как только мы решим эту проблему, мне бы очень хотелось узнать, для чего это нужно и почему вы идете горизонтально с датами в таблице Info
, а не вертикально :)
Это потрясающе, спасибо! И это для отслеживания ежедневных значений производства на станции с несколькими фильтрами продуктов. Что касается того, почему таблица Info горизонтальна - это просто потому, что было наиболее эффективно настроить ввод данных таким образом, и данные на моем фактическом листе просто передаются на этот лист в том же формате, в котором они были введены - но это может также импортировать горизонтально, если это упрощает создание формул, я на самом деле не думал об этом.
Ваша первая формула великолепна, вам просто нужно немного изменить ее, чтобы использовать функцию BYROW
, например:
=BYROW(A4:A,LAMBDA(r,IF(r = "","",ARRAYFORMULA(
COUNTA(
IFERROR(
FILTER(
Info!$A$5:$5,
Info!$A$2:$2=r,
Info!$A$3:$3=$B$2,
Info!$A$4:$4 = "➕",
REGEXMATCH(Info!$A$6:$6,"PASS|REPAIRED"),
REGEXMATCH(Info!$A$7:$7,"PASS|REPAIRED")
)
)
)*Data!$B$4-SUM(
IFERROR(
FILTER(
Info!$A$8:$8,
Info!$A$2:$2=r,
Info!$A$3:$3=$B$2,
Info!$A$4:$4 = "➕",
REGEXMATCH(Info!$A$6:$6,"PASS|REPAIRED"),
REGEXMATCH(Info!$A$7:$7,"PASS|REPAIRED")
)
)
)
))))
Все, что я сделал, это добавил BYROW(A4:A,LAMBDA(r,IF(r = "","",
перед вашей ФОРМУЛОЙ МАССИВА, а затем везде, где у вас была $A4
, я изменил ее на r
.
По сути, это делает то, что он циклически перебирает каждую строку в указанном вами диапазоне (A4: A), поэтому вместо перетаскивания вручную он просто вытягивает каждую непустую ячейку в A4: A.
Пожалуйста, добавьте некоторые дополнительные данные по вашему вопросу, такие как образец файла фиктивного листа для репликации. Пожалуйста, просмотрите Как создать минимальный воспроизводимый пример. Спасибо.