Задача логической оценки в формуле SUMPRODUCT - PullRequest
0 голосов
/ 18 января 2019

Я использую формулу, основанную на SUMPRODUCT, SUBTOTAL и OFFSET. Включить подсчет видимых строк только с критериями. Я пробую это на простых данных образца, которые следующим образом. Данные начинаются с B4 в диапазоне B4:B12 Заголовок B3:

B Column
HD
2
2
4
6
2
1
8
9
2

Формула:

=SUMPRODUCT((B4:B12=B4)*(SUBTOTAL(103,OFFSET(B4,ROW(B4:B12)-MIN(ROW(B4:B12)),0))))

Это дает правильный результат 4 отсчетов для значения 2. Я пошел на оценку формулы, чтобы полностью понять ее логику. Я мог бы понять большую часть его логики, но некоторые шаги мне не совсем понятны. Я воспроизводлю шаги оценки ниже с моими комментариями.

Шаг -1

=SUMPRODUCT(({2;2;4;6;2;1;8;9;2}=2)*(SUBTOTAL(103,OFFSET(B4,ROW(B4:B12)-MIN(ROW(B4:B12)),0))))

OK

Шаг -2

=SUMPRODUCT(({TRUE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE})*(SUBTOTAL(103,OFFSET(B4,ROW(B4:B12)-MIN(ROW(B4:B12)),0))))

OK

ШАГ-3

=SUMPRODUCT(({TRUE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE})*(SUBTOTAL(103,OFFSET(B4,ROW(B4:B12)-MIN(ROW(B4:B12)),0))))

OK

STEP-4

=SUMPRODUCT(({TRUE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE})*(SUBTOTAL(103,OFFSET($B$4,{4;5;6;7;8;9;10;11;12}-MIN({4;5;6;7;8;9;10;11;12}),0))))

OK

STEP-5

=SUMPRODUCT(({TRUE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE})*(SUBTOTAL(103,OFFSET($B$4,{4;5;6;7;8;9;10;11;12}-4),0))))

OK

STEP-6

=SUMPRODUCT({TRUE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE}*(SUBTOTAL(103,OFFSET($B$4,{0;1;2;3;4;5;6;7;8},0))))

Почему {0;1;2;3;4;5;6;7;8} ??

STEP-7

=SUMPRODUCT({TRUE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE}*(SUBTOTAL(103,{#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;})))

Почему {#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;} ?? ШАГ-8

=SUMPRODUCT({TRUE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE}*({1;1;1;1;1;1;1;1;1}))

Как 1 вместо #VALUE! ШАГ-9

=SUMPRODUCT({1;1;0;0;1;0;0;0;1})

OK

Шаг -10

 4

OK

У меня нет полной ясности по следующим пунктам

ШАГ-6: Почему {0;1;2;3;4;5;6;7;8}

ШАГ-7: Почему {#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;}

ШАГ-8: Как 1 вместо #VALUE!

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

1 Ответ

0 голосов
/ 18 января 2019

ШАГ-6: Почему {0;1;2;3;4;5;6;7;8}

Поскольку {4;5;6;7;8;9;10;11;12}-4 оценивается как {4-4;5-4;6-4;7-4;8-4;9-4;10-4;11-4;12-4}, что составляет {0;1;2;3;4;5;6;7;8}

ШАГ-7: Почему {#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}

Оценщику формул не удается получить значения из 9 ссылок на ячейки, полученных через OFFSET($B$4,{0;1;2;3;4;5;6;7;8},0) = {$B$4;$B$5;$B$6;$B$7;$B$8;$B$9;$B$10;$B$11;$B$12} в контексте массива. Но это не имеет значения, потому что:

ШАГ-8: Как 1 вместо #VALUE!

SUBTOTAL(103,... - это промежуточный итог COUNTA, который для каждой отдельной ссылки на ячейку из 9 ссылок на ячейки, полученных на шаге 7, подсчитывает 1, если он не скрыт, иначе 0. Таким образом, не имеет значения, значения ячейки был оценен или нет.

Кстати: того же можно достичь с помощью

=SUMPRODUCT((B4:B12=B4)*(SUBTOTAL(103,INDIRECT("B"&ROW(B4:B12)))))

Примечание: Такие формулы являются результатом проб и ошибок. Я сомневаюсь, что любой программист Excel смог предсказать все варианты использования функций, которые они реализовали. В дикой природе используются Excel функции, о которых так много думают за пределами коробки, что они изначально не могли так думать.


Бонус:

=SUMPRODUCT(OFFSET(B4,ROW(B4:B12)-MIN(ROW(B4:B12)),0))

приводит к 0, используя ваши значения в B4:B12.

Здесь анализатору формул также не удается получить значения из 9 ссылок на ячейки, полученных с помощью OFFSET($B$4,{0;1;2;3;4;5;6;7;8},0) = {$B$4;$B$5;$B$6;$B$7;$B$8;$B$9;$B$10;$B$11;$B$12} в контексте массива. И результат {#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}. Но теперь это важно, потому что нам нужны значения.

В этом случае мы можем использовать функцию N для принудительного получения значений

=SUMPRODUCT(N(OFFSET(B4,ROW(B4:B12)-MIN(ROW(B4:B12)),0)))

В результате получается 36, сумма ваших значений в B4:B12.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...