我遇到了使用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()
错误吗?代码中是否有不同的错误?或者是否有不同的方法来获得我为其编程的结果?
答案 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