Формула массива с функцией SUM возвращает неверный результат - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть некоторые данные о транзакциях, например:

Column B|Column C

TRUCK_ID|TON

TR-12   |60

TR-10   |65

TR-09   |56

TR-12   |75

TR-10   |70

* на самом деле у меня есть тысячи данных

Тогда я бы хотел посчитать, сколько грузовиков, которые загружают избыточные мощности,где предел нагрузки следующий:

Column F|Column G   
TR-09|50

TR-10|60

TR-12|65

Я использую комбинацию SUM, IF, INDEX, MATCH и ROW

=SUM(IF(C4:C8>INDEX(G4:G6,MATCH(INDEX(B4:B8,ROW(B4:B8)-3),F4:F6,0)),1))

Но когда я выбираю только одну (одну) ячейку инажмите CSE

, он возвращает '2' (неверно)

Если я выберу несколько ячеек (скажем, 2 ячейки) и нажму CSE

, он возвращает '4' (правильно)

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

Ответы [ 2 ]

2 голосов
/ 24 сентября 2019

Вы можете попробовать:

=SUMPRODUCT((B2:B6=TRANSPOSE(F2:F4))*(C2:C6>TRANSPOSE(G2:G4)))

Примечание. Это формула массива, которую необходимо подтвердить с помощью Ctrl Shift Enter

Вы также можете добавить один вспомогательный столбец в H2, поместив:

=COUNTIFS($B$2:$B$6,F2,$C$2:$C$6,">"&G2)

И перетащив вниз, чтобы сложить H2: H в конце.


Снимок экрана SUMPRODUCT:

enter image description here

Снимок экрана Помощникстолбец:

enter image description here

0 голосов
/ 25 сентября 2019

РЕДАКТИРОВАТЬ # 2

Попробуйте изменить исходную формулу, как показано ниже:

=SUM(IF(C4:C8>INDEX(G4:G6,MATCH(INDEX(B4:B8,N(IF(1,ROW(B4:B8)))-3),F4:F6,0)),1))

Использовать N и Если функция IF действительно может решить проблему INDEX, возвращая только первое значение из диапазона в одной ячейке.

В качестве альтернативы, предположим, что у вас есть следующие именованные диапазоны :

  • Truck_ID - данные в столбце B;
  • TON - данные в столбце C;
  • List_ID - данные в столбце F;
  • List_TON - данные в столбце G.

Solution

Вы можете использовать следующую формулу, чтобы получить желаемый результат 4 предположить таблица поиска отсортирована в порядке возрастания :

=SUMPRODUCT(--(LOOKUP(Truck_ID,List_ID,List_TON)<TON))

или

{=SUM(IF((LOOKUP(Truck_ID,List_ID,List_TON)<TON),1))} 'Entered by CSE as array formula

Ваша INDEX функция INDEX(G4:G6,MATCH(INDEX(B4:B8,ROW(B4:B8)-3),F4:F6,0)) возвращает массив из одного столбца, который будет возвращать только первое значение из массива, равное 65 в одной ячейке .Таким образом, ваша полная формула по существу сравнивает каждое значение в TON с 65.В результате есть только 2 значения, которые больше 65.Как показано в столбце D моего примера, более правильным использованием INDEX в этом случае будет выделение диапазона D4:D8 и ввод формулы массива, как показано на панели формул.Затем вы можете сделать SUM для всех TRUE результатов.Если вы введете полную формулу в несколько ячеек, ваша формула INDEX фактически вернет полный массив вместо первого значения, поэтому сравнение вернет правильный результат.

...