массив на основе массива в Excel по формуле - PullRequest
2 голосов
/ 18 марта 2020

Поэтому я пытаюсь найти альтернативу sumifs в excel, где каждое условие необходимо проверять в двухмерном диапазоне, а не в одномерном.

Например, в приведенной ниже таблице я хочу получить сумму значений в столбце V для строк, где A12 («IJ») присутствует в диапазоне A2: C8 (P), B12 («NM») присутствует в диапазоне D2: F8 (S) и C12 ("XX") присутствуют в диапазоне G2: I8 (A)

enter image description here

Я пытаюсь найти решение, включающее формулу на основе массива (без VBA). Как, например, в приведенных ниже формулах, SUMPRODUCT((B2:B8'=A12)*J2:J8) даст вычисление на основе массива следующим образом:

SUMPRODUCT({TRUE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE}*{22;79;45;67;43;72;52}) 
= SUMPRODUCT({22;0;45;0;0;72;0})
=139

Легко, когда нужно проверить только одно условие, но, как и sumifs, я намерен чтобы проверить несколько условий, но как только я добавлю другие условия, массив станет многомерным и даст неправильный ответ.

Пример:

SUMPRODUCT((A2:C8=A12)*(D2:F8=B12)*J2:J8) разбивается на

=SUMPRODUCT(
{FALSE,TRUE,FALSE;FALSE,FALSE,FALSE;FALSE,TRUE,FALSE;FALSE,FALSE,FALSE;FALSE,FALSE,FALSE;FALSE,TRUE,FALSE;FALSE,FALSE,FALSE}*
{TRUE,FALSE,FALSE;FALSE,FALSE,FALSE;TRUE,FALSE,FALSE;FALSE,FALSE,FALSE;FALSE,FALSE,FALSE;TRUE,FALSE,FALSE;FALSE,FALSE,FALSE}
*J2:J8)  

в фоновом режиме, что происходит (пример для 3-й строки)

SUMPRODUCT( ({FALSE, TRUE ,FALSE} * {TRUE,FALSE,FALSE}) * 45 )

= SUMPRODUCT({FALSE,FALSE,FALSE} *45 )

=0


SUMPRODUCT(({FALSE,TRUE ,FALSE} + {TRUE,FALSE,FALSE}) * 45 )

= SUMPRODUCT({TRUE,TRUE,FALSE} *45 )

= 90

#expected answer =45

Может ли кто-нибудь помочь мне понять, где я иду не так или чего мне не хватает?

Если есть какой-либо другой способ, то предложения всегда приветствуются.

Обратите внимание, что это фиктивные данные. Фактические данные очень велики для каждого заголовка (P, S, A). Значения находятся в 10 столбцах соответственно, а количество строк также очень велико.

1 Ответ

2 голосов
/ 18 марта 2020

Попробуйте это ...

=SUMPRODUCT( ((A2:A8=A12)+(B2:B8=A12)+(C2:C8=A12)) * ((D2:D8=B12)+(E2:E8=B12)+(F2:F8=B12)) * ((G2:G8=C12)+(H2:H8=C12)+(I2:I8=C12)) * J2:J8 )

Для работы SUMPRODUCT форма логического массива должна соответствовать форме массива, который вы будете sh условно суммировать.

J2:J8 - это семь рядов высотой на один столбец в ширину.

Приведенная выше формула создает массив из 1 и 0 из трех диапазонов критериев и формирует его в семь рядов высотой и шириной в один столбец.

В этот момент SUMPRODUCT может делать это нормально, поскольку массив критериев соответствует размеру массива суммы J2:J8.

...