MATCH和LOOKUP返回意外的值

更新答案

我误解了MATCHLOOKUP的操作; 他们显然不会自动select最后一个值。

更新的公式如下:

 =IF( ISNUMBER( MATCH(2,INDEX(1/($D2=$D$1:$D1),0)) ), ($A2+$B2) - (LOOKUP(2,1/($D2=$D$1:$D1),$A$1:$A1)+LOOKUP(2,1/($D2=$D$1:$D1),$B$1:$B1)) ,0 ) 

主要区别是MATCH现在是MATCH(2,INDEX(1/($D2=$D$1:$D1),0))LOOKUP现在是LOOKUP(2,1/($D2=$D$1:$D1),$A$1:$A1)

感谢barry houdini和Nanashi的帮助!


我正在研究什么应该是一个简单的电子表格,但我的一个公式是给我意想不到的结果。 我的数据截图如下:

![电子表格截图] [1]

在列C中,我试图得到以前的数据点与相同types和当前数据点之间的时间差。 我的公式(格式化为便于阅读,并在单元格C11处)如下:

 =IF( NOT( ISNA( MATCH($D11,$D$1:$D10,1) ) ), ($A11+$B11)-( LOOKUP($D11,$D$1:$D10,$A$1:$A10)+LOOKUP($D11,$D$1:$D10,$B$1:$B10) ),FALSE) 

单元格编号会根据相应的单元格更改,例如C10引用$ D10和$ D $ 1:$ D9等。

  • 有条件的( NOT( ISNA( MATCH($D11,$D$1:$D10,1) ) )检查以确保C列中有一个等于当前值的前一个值;否则返回FALSE在第1和第12行。
  • 计算($A11+$B11)-(LOOKUP($D11,$D$1:$D10,$A$1:$A10)+LOOKUP($D11,$D$1:$D10,$B$1:$B10)当前行的date和时间,并减去相同types的前一个实例对应的行中的date和时间(根据文档, LOOKUP函数应该返回数组中最后一次出现的值)。

我的问题是这样的:在第12行之后, MATCHLOOKUP函数都将第11行作为列C的值为1的最后一行。我尝试了单独testing它们,并且这两个函数都从第11行。例如,在E16: =MATCH(1,$D$1:$D16,1)input以下公式时,我预计该值为16。

我究竟做错了什么?

MATCHLOOKUP都不会根据您需要的未分类数据find“最后发生”。 尝试这些版本的最后一行/匹配:

=MATCH(2,INDEX(1/($D11=$D$1:$D10),0))

=LOOKUP(2,1/($D11=$D$1:$D10),$B$1:$B10)

….为您的具体要求,你可以得到date和时间在一个LOOKUP ,例如

=$A11+$B11-LOOKUP(2,1/($D11=$D$1:$D10),$A$1:$A10+$B$1:$B10)

它明确地使用A列中的date – 如果你有每天的数据,所以你总是可以假设改变的日子是第二天,那么你可以省略date引用和使用MOD这样的:

=MOD($B11-LOOKUP(2,1/($D11=$D$1:$D10),$B$1:$B10),1)

这里的问题是MATCH没有被编程来返回最新匹配值的索引。 也就是说,为我们解决这个问题的一个公式就是解决这个问题。

C2input以下公式并向下拖动:

 =MOD((B2)-INDEX(B:B,SUMPRODUCT(MAX(($D$1:$D1=D2)*ROW($D$1:$D1)))),1) 

分解,这是每个部分所做的:

 =SUMPRODUCT(MAX(($D$1:$D1=D2)*ROW($D$1:$D1))) 'Returns the row of the latest match. =INDEX(B:B, SUMPRODUCT...) 'Returns the matching cell in Column B. =MOD(B2 - INDEX(...),1) 'Gets the absolute difference, no need to add A and B. 

结果:

在这里输入图像说明

让我们知道这是否有帮助。

编辑:根据Barry的更正更改公式。