2016-07-12 3 views
1

Я ищу способ создания sumproduct между двумя массивами, полученными из того же столбца значений. Например:Excel - Sumproduct два массива из той же колонки

A  B  C 
1  FC 100 
1  ST 5 
2  FC 120 
2  ST 3 
3  FC 26 
3  ST 7 

В этом сценарии, мне нужна формула, которая вычисляет (100 * 5) + (120 * 3) + (26 * 7), или, другими словами выполняет SUMPRODUCT значений в колонке C когда столбец B является «FC» и значениями в столбце C, когда столбец B «ST».

Я искал довольно долгое время и не смог найти подходящий ответ. Любая помощь будет оценена по достоинству. Спасибо

+2

'SUMPRODUCT ((B1: B5 = "FC") * (С1: С5 * С2: С6))' –

+0

@ScottCraner - ТБХ, я последовал рассказ и полностью игнорируется шаблон в столбце B. – Jeeped

+0

не @Jeeped плохой по телефону, ожидая, когда я вырезаю волосы. Отсюда комментарий, а не ответ. –

ответ

3

Как отметил Скотт Крейнер (пожалуйста, примите его ответ, если он пишет один):

SUMPRODUCT((B1:B5="FC")*(C1:C5*C2:C6)) 

Этот подход использует ссылки на массивы, умножает их вместе, а затем принимает SUMPRODUCT из Результаты. Разработка из второго набора вложенных терминов:

  • C1:C5 возвращает массив [100,5,120,3,26]
  • C2:C6 (смещение на одну строку) возвращает [5,120,3,26,7]

Умножив эти массивы дает промежуточный массив:

  • [500,600,360,78,182]

Какое число в столбце C умножается на одно после него. Однако только каждый другой результат (обозначенный значением "FC" в столбце B) должен быть включен в окончательную сумму. Это достигается с помощью другого вложенного термина, который проверяет значение каждой ячейки указанного диапазона в следующем порядке:

  • B1:B5="FC" возвращает массив [TRUE,FALSE,TRUE,FALSE,TRUE]

Excel рассматривает TRUE/FALSE значения, как 1/0 при умножении (хотя не для сложения/вычитания), поэтому функция SUMPRODUCT видит:

  • [1,0,1,0,1]*[500,600,360,78,182] =>[500,0,360,0,182]

, а затем добавляет значения полученных продуктов:

  • 500 + 0 + 360 + 0 + 182 = 1042
+0

приятный информация. Сегодня я ленив. Хорошо на вас. –

+0

Спасибо вам за помощь, умное решение! Возможно, я упростил свой пример; в действительности существует много других значений между каждым экземпляром FC и ST, и, следовательно, многие из результатов выражения '(C1: C5 * C2: C6)' будут возвращать результаты '#VALUE! 'и нарушают формулу. Добавление компонента 'iferror()' и подтверждение с помощью Ctrl + Shift + Enter фиксируют все. Еще раз спасибо. – tfunk10258

+0

Упрощение простейшему случаю, чтобы объяснить ваш вопрос, - это не только отличная практика @ tfunk10258, но очень рекомендуется здесь при публикации вопросов. И это также отличный способ разбить и решить проблемы самостоятельно, прежде чем создавать резервные копии до фактического (сложного) использования. Рад, что вы могли видеть, как применить этот подход, и добро пожаловать в Stack Overflow! – brichins

1

Для этого конкретного примера.

{=SUM((IF(B1:B6="FC",C1:C6,0)*IF(B2:B7="ST",C2:C7,0)))} 

Это будет работать, только если FC и ST чередуются, как в примере. Если это не так, вы можете быстро изменить его в соответствии с этим форматом, сначала сортируя столбец А и колонку В.

Обратите внимание, что массив во втором операторе if смещается на одну ячейку. Это позволяет массивам умножаться по желанию. Кроме того, поскольку это формула массива, убедитесь, что вы используете CTRL + SHIFT + Enter, когда вы поместите его в свою ячейку.

Смежные вопросы