Item | Total
A | 16
B | 13
C | 9
Предполагая, что указанный выше диапазон находится в A1: B5, моей первой формулой является следующая формула массива:
{=SUM(IF(ISERROR(FIND(B6,$A$1:$A$5)),0,$B$1:$B$5))}
Формула массива создается путем ввода формулы и удерживания Ctrl+Shift
клавиши, пока вы нажмете Enter.В моем решении я создал область, в которой я вычисляю по итоговым значениям и у меня есть столбец (в данном случае называется Item), в котором указывается буква, которую я вижу в исходном столбце A.
Если вы пытались ввестипри использовании VBA вы бы использовали свойство FormulaArray
:
Selection.FormulaArray ="SUM(IF(ISERROR(FIND(B6,$A$1:$A$5)),0,$B$1:$B$5))"
Обновление
Ограничить вычисление только видимыми ячейками немного сложнее.Предположим, у нас есть ваши исходные данные в ячейках A1: B5.Давайте также предположим, что наши тестовые значения начинаются в ячейке C7 (диагональ к исходным данным).Наша формула итогов будет выглядеть следующим образом:
=SUMPRODUCT(SUBTOTAL(3,OFFSET($B$1:$B$5,ROW($B$1:$B$5)-ROW($B$1),0,1)), --NOT(ISERROR(FIND(C7,$A$1:$A$5))), $B$1:$B$5)
Следующая часть возвращает диапазон по ячейкам
OFFSET($B$1:$B$5,ROW($B$1:$B$5)-ROW($B$1),0,1)
Эта часть возвращает 1 для каждой видимой ячейки и 0 для невидимой ячейки
SUBTOTAL(3,OFFSET($B$1:$B$5,ROW($B$1:$B$5)-ROW($B$1),0,1))
Эта часть является нашим критерием.NOT(ISERROR(...
вернет TRUE или FALSE.Двойной отрицательный знак --
преобразует это значение в отрицательное целое число, а затем удаляет это отрицание.
--NOT(ISERROR(FIND(C7,$A$1:$A$5)))
Наконец, функция SUMPRODUCT
умножает совпадающие массивы друг на друга и вычисляет сумму.Первые два массива возвращают серию 0 или 1.Если строка является видимой и соответствует нашим критериям, то мы получаем 1 * 1, умноженное на указанное значение в ячейке.Если данная ячейка не видна или не соответствует критериям, одна из двух возвращает ноль и обнуляет весь элемент.