MATCH和LOOKUP返回意外的值
更新答案 :
我误解了MATCH
和LOOKUP
的操作; 他们显然不会自动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行之后, MATCH
和LOOKUP
函数都将第11行作为列C的值为1的最后一行。我尝试了单独testing它们,并且这两个函数都从第11行。例如,在E16: =MATCH(1,$D$1:$D16,1)
input以下公式时,我预计该值为16。
我究竟做错了什么?
MATCH
和LOOKUP
都不会根据您需要的未分类数据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
没有被编程来返回最新匹配值的索引。 也就是说,为我们解决这个问题的一个公式就是解决这个问题。
在C2
input以下公式并向下拖动:
=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的更正更改公式。