我有一些交易数据,例如:
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”(正确)
我希望我只放入并选择一个单元格,然后返回正确的结果。任何人都可以帮助我
答案 0 :(得分:2)
您可以尝试:
=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
:
截屏 助手列:
答案 1 :(得分:0)
EDIT#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的问题,它仅返回单个单元格范围内的第一个值。
或者,假设您具有以下命名范围:
您可以使用以下公式返回所需结果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
并输入数组公式,如公式栏中所示。然后,您可以对所有TRUE
结果进行 SUM 。如果您在多个单元格中输入完整公式,则 INDEX 公式实际上将返回完整数组而不是第一个值,因此比较将返回正确的结果。