使用带有未排序列表的MATCH()函数

时间:2013-10-10 20:55:44

标签: excel excel-formula worksheet-function array-formulas excel-match

我遇到了使用MATCH()函数的电子表格公式的问题。

=IFERROR(IF(LENB(Y2461)<> 0, "Complete", IF(LENB(Q2461)<> 0, IF(Q2461-$Y$1<MATCH($Y$1,R2461:X2461),"ON HOLD"), INDEX($R$4:$X$5,1,MATCH($Y$1,R2461:X2461)))),"ON HOLD")

这是具有特定问题的单元格中的公式。我正在使用匹配来查看水平范围的数据,并确定哪个列包含最新的更改,“完成”列有日期的情况除外,“ON HOLD”列有日期。单元格Y1包含=TODAY(),因此它会根据今天的日期检查每个单元格。单元格格式化为日期,并从左到右输入日期。但是,条目可以从较早的列重新开始,并使日期不按顺序排列。

问题是,MATCH()一次只发生几次,会返回不是最新的列。据我所知,以及它如何适用于该公式的其他实例,它是从右到左读取数组并在第一个“最高”日期停止。

错误发生在一行上,而预期结果在工作表的其他位置多次发生。

我假设它每次都会在某个方向读取时使用MATCH()错误吗?代码中是否有不同的错误?或者是否有不同的方法来获得我为其编程的结果?

2 个答案:

答案 0 :(得分:4)

MATCH没有第三个参数,因为你使用它与MATCH相同,1或TRUE作为第三个参数,这意味着你只能保证它可以正常工作如果使用的范围 - R2461:X2461 - 总是在升序....但你说的不是这样,所以我认为你不能保证公式会起作用

请尝试使用此版本 [根据评论修改]

=IFERROR(IF(LENB(Y2461)<> 0, "Complete", IF(LENB(Q2461)<> 0, IF(Q2461-$Y$1< MATCH(MAX(IF(R2461:X2461<=$Y$1,R2461:X2461)),R2461:X2461,0),"ON HOLD"), INDEX($R$4:$X$5,1,MATCH(MAX(IF(R2461:X2461<=$Y$1,R2461:X2461)),R2461:X2461,0)))),"ON HOLD")

使用 CTRL + SHIFT + ENTER确认

改动的逻辑是这个修订的MATCH部分

=MATCH(MAX(IF(R2461:X2461<=$Y$1,R2461:X2461)),R2461:X2461,0)

将与此部分相同

=MATCH($Y$1,R2461:X2461)

R2461:X2461是否按升序排列 - 它找到最大的值&lt; =到Y1并给出第一个实例的位置。

<强>修

如果您想要最大的日期&lt; =今天重复的最右边的日期,那么您可以使用此构造代替MATCH

=MAX(IF(R2461:X2461<=$Y$1,COLUMN(R2461:X2461)-COLUMN(R2461)+1))

这将产生如下完整的公式:

=IFERROR(IF(LENB(Y2461)<> 0, "Complete", IF(LENB(Q2461)<> 0, IF(Q2461-$Y$1< MAX(IF(R2461:X2461<=$Y$1,COLUMN(R2461:X2461)-COLUMN(R2461)+1)),"ON HOLD"), INDEX($R$4:$X$5,1,MAX(IF(R2461:X2461<=$Y$1,COLUMN(R2461:X2461)-COLUMN(R2461)+1))))),"ON HOLD")

答案 1 :(得分:2)

当lookup_array未排序时,省略语法MATCH(lookup_value, lookup_array, [match_type])中的[match_type]可能会导致意外结果。

http://office.microsoft.com/en-gb/excel-help/match-function-HP010062414.aspx