В соответствии с формулой COUNTIF
, которую вы дали, я думаю, это то, что вам нужно.
B9 =SUMPRODUCT(--(MMULT(--($B$3:$J$5=$A9),TRANSPOSE(COLUMN($B$3:$J$3)))>0))
B10 =SUMPRODUCT(--(MMULT(--($B$3:$J$5=$A10),TRANSPOSE(COLUMN($B$3:$J$3)))>0))
B11 =SUMPRODUCT(--(MMULT(--(($B$3:$J$5<50)*(($B$2:$J$2)="Sz")),TRANSPOSE(COLUMN($B$3:$J$3)))>0))
Все формулы здесь Формула массива , поэтому, пожалуйста, нажмите Ctrl + Shift + Enter , чтобы завершить их.
Хитрость в матрице [n x m]*[m x 1] = [n x 1]
.Однако в Excel матрица * матрица напрямую не является умножением матрицы [# 1].Массив * массив возвращает массив с a11*b11, a12*b12, a13*b13
и так далее.Мы должны использовать формулу под названием MMULT
для умножения матриц.
Поэтому мы сначала строим матрицу [3 x 9]
и затем сравниваем ее с критериями "Dry food"
.Мы получаем [3 x 9]
матрицу, полную True
или False
, поэтому мы добавляем двойной знак минус перед матрицей, заставляя их становиться 1
и 0
.
. TRANSPOSE
предназначен длягенерируя матрицу [9 x 1]
, значение на самом деле не так важно, если они больше 0. На самом деле мы можем использовать ROW(1:9)
, и эффект будет таким же.Однако не все знают, как настроить эталон в ROW()
.Преимущество TRANSPOSE(COLUMN())
состоит в том, что внутренняя ссылка точно такая же, как и область исходных данных.
После выполнения MMULT
результат становится матрицей [3 x 1]
.И если он соответствует критериям, значение больше 0, остальные будут равны 0. Таким образом, следующая часть проверяет все элементы в стороне матрицы на >0
или нет.И затем мы снова добавляем двойной знак минус для преобразования логического значения в 0
и 1
.Последняя часть здесь просто суммирует их на SUMPRODUCT
.
[# 1] Подробнее о умножении матриц здесь: https://en.wikipedia.org/wiki/Matrix_multiplication