0

我在使用 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 来查看水平范围的数据并确定哪一列包含最近的更改,但“完成”列有日期,而“保留”列有日期时除外。单元格 Y1 包含=TODAY(),因此它会根据今天的日期检查每个单元格。单元格被格式化为日期,并作为日期从左到右输入。但是,这些条目可以从较早的列重新开始,并且使日期不按顺序排列。

问题是,一次仅出现几次,MATCH()将返回一个不是最新的列。据我所知,以及它对这个公式的其他实例的工作原理是它从右到左读取数组并在第一个“最高”日期停止。

该错误专门发生在一行上,而预期结果在工作表的其他地方多次起作用。

MATCH()假设它每次都会朝某个方向阅读,我是不是用错了?代码中是否存在其他错误?或者有没有不同的方法来获得我为它编程的结果?

4

2 回答 2

5

没有第三个参数的 MATCH 与使用 1 或 TRUE 作为第三个参数的 MATCH 相同,这意味着您只能保证它在使用的范围 - 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 是否按升序排列 - 它会找到 <= 到 Y1 的最大值,并为您提供第一个实例的位置。

修改

如果您想要最大日期 <= 今天重复的最右边日期,那么您可以使用此构造代替 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")

于 2013-10-10T21:12:46.257 回答
1

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

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

于 2013-10-10T21:09:26.070 回答