MATCH和LOOKUP返回意外值

时间:2014-03-26 14:19:23

标签: excel excel-formula worksheet-function

以答案更新

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

更新的公式如下:

=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行之后,MATCHLOOKUP函数都将第11行作为C列值为1的最后一行。我已经尝试单独测试它们,并且两个函数都从第11行返回它们的相应值。例如,在E16中放置以下公式:=MATCH(1,$D$1:$D16,1)返回11,当我期望值为16时。 p>

我做错了什么?

2 个答案:

答案 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.

结果:

enter image description here

如果有帮助,请告诉我们。

编辑:根据巴里的更正改变了公式。

答案 1 :(得分:2)

MATCHLOOKUP都不会找到"最后一次出现"根据您的需要使用未分类的数据。请尝试使用这些版本进行最后一行/匹配:

=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)