对未sorting的列表使用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") 

这是具有特定问题的单元格中的公式。 我使用match来查看数据的水平范围,并确定哪一列包含最近的更改,“完成”列有date,“持有”列有date的情况除外。 单元格Y1包含=TODAY() ,所以它检查今天的date每个单元格。 单元格被格式化为date,并按照从左到右的dateinput。 但是,条目可以从较早的列重新开始,并使date不按顺序。

问题是, MATCH()每次只发生less数事件,将返回一个不是最近的列。 据我所知,这个公式的其他实例是如何工作的,就是它从右到左读取数组,并在第一个“最高”的date停止。

错误发生在一行中,而预期的结果在表格的其他地方多次出现。

我使用MATCH()错误,假设它每次都会以某个方向读取? 代码中是否有其他错误? 还是有不同的方式来获得我编程的结果?

MATCH中没有第三个参数,因为您使用的是MATCH,第一个参数是TRUE,第三个参数是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)

不pipeR2461:X2461是否按升序sorting – 它find的最大值是<= Y1,并给出了初始位置。

修订

如果您想要最近的date<=今天是重复的,那么您可以使用这种结构代替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")

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

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