2015-12-03 4 views
1

У меня есть 2 массивные таблицы событий. Первая таблица - это таблица данных (tblData), которая имеет даты, продолжительности и коды (для идентификации события). Вторая таблица - сводная таблица (tblSummary) от общего времени, которое каждое событие заняло.SUMIF исключая скрытые строки. ПРОМЕЖУТОЧНЫЙ ИТОГ? SUMPRODUCT?

Как я могу фильтровать tblData и обновлять tblSummary?

Ниже представлена ​​небольшая часть tblData. Обратите внимание, что для кодов Уровня 2 имеется 3 столбца (L2a, L2b, L2c); это означает, что если я ищу общую продолжительность кода уровня 2 «EL», я должен проверить все 3 столбца и добавить их Duration раз. Учитывая только изображение ниже, общая «EL» время будет 9.9

tblData

Ниже кусок tblSummary.

tblSummary

Для Total колонки, я использовал SUMIF (tblData[L2a], [@[Lvl 2 Code]], tblData[Duration]), чтобы получить общее время кода, но это включает в себя скрытые строки. tblSummary не обновляется, когда я меняю фильтр на tblData.

Я считаю, что использование SUBTOTAL - это тупик. Это решило бы проблему с скрытыми столбцами, но поскольку невозможно установить критерии, я не могу применить ее к tblSummary.

Я новичок в SUMPRODUCT, но я стараюсь использовать

=SUMPRODUCT(SUBTOTAL(109,tblData[Duration]),--(tblData[L2a]="EL"))

но получил #VALUE!. И я нажал Ctl + Shift + Enter.

ответ

2

Сцепление вместе состояние значения колонка SUMIF function «s, игнорируя при этом скрытые строки означает, что мы должны заставить дополнительный слой расчета на SUBTOTAL function и собрать агрегат с циклическим расчетом SUMPRODUCT function. Дополнительный «уровень» обработки будет выполнен с помощью OFFSET function¹.

sumif_hidden1

Стандартная формула в первом ряду tblSummarystructured tableВсего столбца (K15) есть

=SUMPRODUCT((SUBTOTAL(103, OFFSET(tblData, ROW(tblData)-ROW(INDEX(tblData, 1, 0)), 0, 1, 1))=1)*(tblData[L2a]=[@[Lvl 2 Code]]), tblData[Duration]) 

Заполните вниз, если таблица не выполняет это для вас ,

Когда мы фильтруем в tblData таблицы Дата колонки, чтобы скрыть 24-Ноябрь-2015, 27-ноября-2015 и 28-ноября-2015, новые итоги показывают в tblSummary таблице.

sumif_hidden2


¹ Летучие функции пересчитывать каждый раз, когда что-либо в целых изменениях рабочей книги, а не только тогда, когда что-то, что влияет на их изменения конечных результатов. Примеры летучие функции: INDIRECT, OFFSET, TODAY, NOW, RAND и RANDBETWEEN. Некоторые подфункции функций рабочего стола CELL и INFO также сделают их неустойчивыми.

+0

Только то, что я искал! Но я нашел небольшую проблему. Когда я добавляю Total Row к ** tblSummary **, формула 'SUBTOTAL (109, [Total])' возвращает ноль? Я хотел бы использовать 'SUBTOTAL' вместо' SUM' для фильтрации скрытых строк. – Y2Que

+1

Это странное поведение, и я рассмотрю его чуть позже. В промежуточный период, пожалуйста, замените функцию [AGGREGATE] (https://support.office.com/en-us/article/AGGREGATE-function-43B9278E-6AA7-4F17-92B6-E19993FA26DF), как в '= AGGREGATE (9, 7, [Всего]) 'для предложенной функции [SUBTOTAL] (https://support.office.com/en-us/article/SUBTOTAL-function-e27c301c-be9a-458b-9d12-b9a2ce3c62af). Фактически, теперь, когда я думаю об этом, SUBTOTAL предназначен для игнорирования других результатов SUBTOTAL. AGGREGATE имеет возможность игнорировать результаты SUBTOTAL, но это также можно принять. – Jeeped

+0

Чтобы убедиться, что я правильно понимаю, функция OFFSET в основном используется, потому что она неустойчива. Поэтому, если я хочу ** tblSummary ** включить все экземпляры кода для столбцов ** L2a **, ** L2b ** и ** L2c **, я бы просто добавил 3 версии формулы с единственной разницей будучи '..tblData [L2a] ..'. Например: '= SUMPRODUCT (.. ..tblData [L2a] ..) + SUMPRODUCT (.. ..tblData [L2b] ..) + SUMPRODUCT (.. ..tblData [L2c] ..)', правильно? – Y2Que