Вычисление СУММПРОИЗВ с несколькими критериями столбца и критериями одной строки

   |   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 на основе критериев нескольких столбцов и критериев одной строки:

  1. Критерии ряда вы можете найти в Cell I2
  2. Критерии для столбцов вы можете найти в Range 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 и включала все критерии как для столбца, так и для строки?

Поскольку вы в сети, пожалуйста, подтвердите, как вы считаете столбец соотношения, также возвращается существующая ваша формула 126, а не 39.5, как я предполагаю, вы хотите, чтобы она была динамичной, в предпоследнем посте вы категорически упомянули initial column и год 2024 для критериев строки, но в этом нет. Не могли бы вы подтвердить?

Mayukh Bhattacharya 25.05.2024 20:47

Когда я вычисляю 500x7% + 90x5%, я получаю в результате 39,5. В этом посте я удалил критерии из нескольких строк, чтобы уменьшить сложность вопроса, и оставил только один критерий для строки. Следовательно, критерием строки является только 2024 год.

Michi 25.05.2024 20:56

Да, это то, что я хотел подтвердить, но ваша существующая формула не возвращает 39.5, а возвращает 126 просто для пояснения. Но если вы хотите использовать столбец ratio, вам нужно указать, что в противном случае я не уверен, как это будет учитываться. Также для года 2024 --> Brand A + P1 значение равно 70 и соотношение 7%, а для --> Brand B + P1 это 56 и 5% вам нужно будет проверить свое сообщение и опечатки. Если вы говорите 500 и 90, то это должен быть Год 2023.

Mayukh Bhattacharya 25.05.2024 21:04

Ах, извини. Теперь я понимаю. Я отредактировал вопрос и изменил критерии строки на 2023 год.

Michi 25.05.2024 21:35

Сможете ли вы понять, что я пытаюсь сказать? Если вы не укажете заголовки строк для 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).

Mayukh Bhattacharya 25.05.2024 22:33
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
5
160
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Пытаться:

=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))) )))

Другие вопросы по теме