#google-sheets #google-sheets-formula #array-formulas
#google-sheets #google-sheets-формула #массив-формулы
Вопрос:
В AD
столбце у меня есть такая последовательность значений:
2
3
4
Эти значения относятся к строкам в столбце на другой странице.
В каждой строке AE
столбца я использую эту формулу:
=IF(AD1="","",IFERROR(SUM(FILTER(INDIRECT("'Registro Geral'!O2:O"amp;AD1)/100,REGEXMATCH(INDIRECT("'Registro Geral'!H2:H"amp;AD1),SUBSTITUTE(SUBSTITUTE(JOIN("|",$V$1:$V$4),"||",""),"|||",""))=TRUE))))
=IF(AD2="","",IFERROR(SUM(FILTER(INDIRECT("'Registro Geral'!O2:O"amp;AD2)/100,REGEXMATCH(INDIRECT("'Registro Geral'!H2:H"amp;AD2),SUBSTITUTE(SUBSTITUTE(JOIN("|",$V$1:$V$4),"||",""),"|||",""))=TRUE))))
=IF(AD3="","",IFERROR(SUM(FILTER(INDIRECT("'Registro Geral'!O2:O"amp;AD3)/100,REGEXMATCH(INDIRECT("'Registro Geral'!H2:H"amp;AD3),SUBSTITUTE(SUBSTITUTE(JOIN("|",$V$1:$V$4),"||",""),"|||",""))=TRUE))))
Короче говоря, эта формула получает текущую сумму значений на другом листе в зависимости от того, появляется ли соответствующая ячейка в другом столбце того же листа в наборе значений.
Когда я пытаюсь добавить ARRAYFORMULA
, чтобы мне не нужно было иметь формулу в каждой строке, оставляя только in AE1
, значения, которые возвращаются во всех строках, имеют точно такое же значение.
Сбой тестовой формулы:
=ARRAYFORMULA(IF(AD1:AD="","",IFERROR(SUM(FILTER(INDIRECT("'Registro Geral'!O2:O"amp;AD1:AD)/100,REGEXMATCH(INDIRECT("'Registro Geral'!H2:H"amp;AD1:AD),SUBSTITUTE(SUBSTITUTE(JOIN("|",$V$1:$V$4),"||",""),"|||",""))=TRUE)))))
Ссылка на пример Spreadhseet:
https://docs.google.com/spreadsheets/d/1qIv6KnLv-EwJQXRrk7ucuqY-XuJhkIHOCtih9FpAg6U/edit?usp=sharing
Комментарии:
1. Это выглядит как довольно классический пример XY …. xyproblem.info
2. В вашем листе нет столбца объявлений
Ответ №1:
Вы пытаетесь выполнить текущее суммирование на O
основе того, отображается ли соответствующее значение в H
столбце в отфильтрованных значениях.
Мы можем сделать это с помощью умножения матрицы, используя нижнетреугольную матрицу и перечисленные значения, выбирая, какие из них обнулять, исходя из определенных условий IF
.
=ArrayFormula(MMULT(
N(SEQUENCE(D2)>=SEQUENCE(1,D2)),
ARRAY_CONSTRAIN(
IF(
('Registro Geral'!O2:O<>"")*
IFNA(MATCH('Registro Geral'!H2:H,V:V,0)),
'Registro Geral'!O2:O
)/100,
D2,
1
)
))
Почему это работает
Нижняя треугольная матрица выглядит следующим образом
1 0 0 0 0 ... up to N columns
1 1 0 0 0
1 1 1 0 0
1 1 1 1 0
1 1 1 1 1
... up to N rows
Столбец, который вы хотите суммировать, выглядит следующим образом
Value 1
Value 2
...
Value N
Итак, когда вы умножаете два, вы получаете новую матрицу размером N x 1:
Value 1
Value 1 Value 2
...
Value 1 ... Value N
Если мы не хотим суммировать значение, мы можем обнулить его с помощью условного выражения, чтобы оно никогда не добавлялось.
Комментарии:
1. очень хороший ответ, пытался решить и это, но наткнулся на все косвенные и смещения, которые не могут быть повторены arrayformula
2. Просто исправление, которое я бы сделал, это вместо
--
того, чтобы установитьN()
функцию, поскольку--
, возможно, это не самый известный операнд в Google sheets3. @nabais Спасибо.
INDIRECT
S также бросил меня в цикл. Это и фильтр на aREGEXMATCH
.4. @BrondbyIF Нет проблем. Я должен упомянуть, что вам также больше не нужен ваш исходный
SEQUENCE
столбец, поскольку он был интегрирован в новую формулу.5. @BrondbyIF Все, что я мог бы сделать, это упростить вашу формулу. Боюсь, я все еще не совсем понимаю, чего он пытается достичь.