| A | B| C | D | E | F | G |H| I | J | K | L
---|-------|--|-------|--------|------|------|------|-|---------|----------|----------|-----
| | | ratio | tested | 2023 | 2024 | 2025 | | RowCrit | ColCrit1 | ColCrit2 |
2 |Brand A|P1| 7% | yes | 500 | 70 | 60 | | 2023 | Brand A | P1 |
3 |Brand A|P2| 8% | yes | 100 | 47 | 300 | | | Brand B | |
4 |Brand A|P2| 10% | yes | 800 | 21 | 200 | | | | |
5 |Brand B|P1| 5% | yes | 90 | 56 | 150 | | | | |
6 |Brand C|P4| 3% | no | 45 | 700 | 790 | | | | |
7 |Brand C|P2| 8% | no | 600 | 150 | 40 | | Result | 39.5 | |
8 |Brand D|P1| 12% | yes | 900 | 90 | 980 | | | | |
9 |Brand D|P1| 20% | yes | 125 | 854 | 726 | | | | |
10 |Brand D|P3| 19% | yes | 70 | 860 | 614 | | | | |
11 |Brand D|P3| 2% | yes | 842 | 250 | 85 | | | | |
12 |Brand E|P4| 6% | no | 300 | 324 | 450 | | | | |
В Cell J7 я хочу вычислить SUMPRODUCT на основе критериев нескольких столбцов и критериев одной строки:
Cell I2Range J2:J3 и Range K2:K3. В примере выше результат:
J7 = 500x7% + 90x5% = 39.5
До сих пор мне удавалось извлечь SUM на основе критериев, используя эту формулу:
=SUM(IF(COUNTIF(I2;C1:G1)*COUNTIF(J2:J3;A2:A12)*COUNTIF(K2:K3;B2:B12);C2:G12))
Однако я понятия не имею, как изменить эту формулу, чтобы она вычисляла SUMPRODUCT и включала все критерии как для столбца, так и для строки?
Когда я вычисляю 500x7% + 90x5%, я получаю в результате 39,5. В этом посте я удалил критерии из нескольких строк, чтобы уменьшить сложность вопроса, и оставил только один критерий для строки. Следовательно, критерием строки является только 2024 год.
Да, это то, что я хотел подтвердить, но ваша существующая формула не возвращает 39.5, а возвращает 126 просто для пояснения. Но если вы хотите использовать столбец ratio, вам нужно указать, что в противном случае я не уверен, как это будет учитываться. Также для года 2024 --> Brand A + P1 значение равно 70 и соотношение 7%, а для --> Brand B + P1 это 56 и 5% вам нужно будет проверить свое сообщение и опечатки. Если вы говорите 500 и 90, то это должен быть Год 2023.
Ах, извини. Теперь я понимаю. Я отредактировал вопрос и изменил критерии строки на 2023 год.
Сможете ли вы понять, что я пытаюсь сказать? Если вы не укажете заголовки строк для ratio, то в какой логике вы будете учитывать тот же столбец? Даже при существующей у вас формуле года 2023он вернётся 590 то есть 500+90 а вовсе не 39.5. Попробуйте использовать функцию Evaluate на вкладке Formulas --> IF(COUNTIF(I2;C1:G1)*COUNTIF(J2:J3;A2:A12)*COUNTIF(K2:K3;B2:B12);C2:G12).


Пытаться:
=LET(
a, COUNTIF($J$2:$J$3, $A$2:$A$12),
b, COUNTIF($K$2, $B$2:$B$12),
c, CHOOSECOLS($A$2:$G$12, 3, XMATCH($I$2, $A$1:$G$1)),
SUM(a * b * CHOOSECOLS(c, 1) * CHOOSECOLS(c, 2))
)
Чтобы учесть отсутствие записей в ColCrit1 или отсутствие записей в ColCrit2, вы можете изменить его:
=LET(
a, IF(
COUNTA($J$2:$J$5) = 0,
N(ISNUMBER(ROW($A$2:$A$12))),
COUNTIF($J$2:$J$5, $A$2:$A$12)
),
b, IF(
COUNTA($K$2:$K$5) = 0,
N(ISNUMBER(ROW($B$2:$B$12))),
COUNTIF($K$2:$K$5, $B$2:$B$12)
),
c, CHOOSECOLS($A$2:$G$12, 3, XMATCH($I$2, $A$1:$G$1)),
SUM(a * b * CHOOSECOLS(c, 1) * CHOOSECOLS(c, 2))
)
Итак, попробуйте реализовать следующее, чтобы получить желаемые результаты, я не был уверен, что индекс столбца ratio должен быть здесь жестко запрограммирован:
• Использование вспомогательной функции LAMBDA() под названием BYROW().
=LET(
α, A2:G12,
δ, COUNTIF(J2:J3,TAKE(α,,1)),
ε, COUNTIF(K2:K3,INDEX(α,,2)),
φ, IFS(SUM(δ)=0,ε,SUM(ε)=0,δ,1,δ*ε),
SUM(BYROW(CHOOSECOLS(FILTER(α, φ),3,XMATCH(I2,A1:G1)),LAMBDA(a, PRODUCT(a)))))
• Или без использования вспомогательных функций LAMBDA():
=LET(
α, A2:G12,
δ, COUNTIF(J2:J3,TAKE(α,,1)),
ε, COUNTIF(K2:K3,INDEX(α,,2)),
φ, IFS(SUM(δ)=0,ε,SUM(ε)=0,δ,1,δ*ε),
Σ, CHOOSECOLS(FILTER(α, φ),3,XMATCH(I2,A1:G1)),
SUMPRODUCT(TAKE(Σ,,1)*TAKE(Σ,,-1)))
Вариант использования первый: --> Когда ColCrit1 пусто
Вариант использования второй: --> Когда ColCrit2 пусто
Аналогичная идея взята из последнего ответа на сообщение ОП: Использование списка (диапазона) критериев столбца (а не отдельных ячеек) в формуле ФИЛЬТР
Еще один способ использования Custom LAMBDA() + MMULT():
=LET(
λ,LAMBDA(α,δ,ABS(AND(ISBLANK(δ))-MMULT(--(α=TOROW(δ)),{1;1}))),
SUM(FILTER(E2:G12,E1:G1=I2)*C2:C12*λ(A2:A12,J2:J3)*λ(B2:B12,K2:K3)))
Версия с использованием SUMPRODUCT, COUNTIF и FILTER и с
COUNTIF.Рассчитайте результат с помощью:
=SUMPRODUCT(
_filter_by_year,
_ratios,
_include(_brands, _col_crit_1),
_include(_products, _col_crit_2))
Создайте следующие именованные диапазоны и функции (они будут доступны на всех листах книги):
_data=SO_74776702!$A$1:$G$12_brands=INDEX(DROP(_data,1),,1)_col_crit_1=SO_74776702!$J$2:$J$5_col_crit_2=SO_74776702!$K$2:$K$5_row_crit=SO_74776702!$I$2:$I$5_years=TAKE(DROP(_data,,4),1)_products=INDEX(DROP(_data,1),,2)_ratios=DROP(TAKE(DROP(_data,,2),,1),1)_filter_by_year=LET(_yd, DROP(_data,1, 4), _filtered, IF(_all_blanks(_row_crit), _yd, FILTER(_yd, fx_countifs_or(_years,_row_crit))), _sum_cols(_filtered) )_all_blanks=LAMBDA(range, COUNTBLANK(range) = ROWS(range))_include_all=LAMBDA(range, IFERROR(range * 0, 0) + 1)_include=LAMBDA(_range,_criteria, IF(_all_blanks(_range), _include_all(_range), fx_countifs_or(_range,_criteria)) )_sum_cols=LAMBDA(_cols,BYROW(_cols,LAMBDA(_row,SUM(_row))))fx_countifs_or=LAMBDA(_range,_criteria, MAP(_range, LAMBDA(_row, N(OR(COUNTIF(_row, _criteria))) )))
Поскольку вы в сети, пожалуйста, подтвердите, как вы считаете столбец соотношения, также возвращается существующая ваша формула
126, а не39.5, как я предполагаю, вы хотите, чтобы она была динамичной, в предпоследнем посте вы категорически упомянулиinitial columnи год2024для критериев строки, но в этом нет. Не могли бы вы подтвердить?