对未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