以答案更新:
我误解了MATCH
和LOOKUP
的操作;他们显然不会自动选择最后一个值。
更新的公式如下:
=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列中,我试图获得具有相同类型和当前数据点的先前数据点之间的时间差。我的公式(格式化以便于阅读,并在单元格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)
获取当前行的日期和时间,并在与前一个相同类型的实例对应的行中减去日期和时间(LOOKUP
函数应该返回最后一次出现根据文档,数组中的值。 我的问题是:在第12行之后,MATCH
和LOOKUP
函数都将第11行作为C列值为1的最后一行。我已经尝试单独测试它们,并且两个函数都从第11行返回它们的相应值。例如,在E16中放置以下公式:=MATCH(1,$D$1:$D16,1)
返回11,当我期望值为16时。 p>
我做错了什么?
答案 0 :(得分:3)
此处的问题是MATCH
未编程为返回最新匹配值的索引。也就是说,为我们提供此功能的公式将解决问题。
在C2
中输入以下公式并向下拖动:
=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.
结果:
如果有帮助,请告诉我们。
编辑:根据巴里的更正改变了公式。
答案 1 :(得分:2)
MATCH
和LOOKUP
都不会找到"最后一次出现"根据您的需要使用未分类的数据。请尝试使用这些版本进行最后一行/匹配:
=MATCH(2,INDEX(1/($D11=$D$1:$D10),0))
=LOOKUP(2,1/($D11=$D$1:$D10),$B$1:$B10)
....根据您的具体要求,您可以在一个LOOKUP
中获得日期和时间,例如
=$A11+$B11-LOOKUP(2,1/($D11=$D$1:$D10),$A$1:$A10+$B$1:$B10)
明确使用A列中的日期 - 如果您每天都有数据,那么您可以随时假设每天更改为下一个天,那么您可以省略日期参考和像这样使用MOD
:
=MOD($B11-LOOKUP(2,1/($D11=$D$1:$D10),$B$1:$B10),1)