将MATCH()函数与未排序的列表一起使用

Rat*_*fia 0 excel worksheet-function excel-formula 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")
Run Code Online (Sandbox Code Playgroud)

这是具有特定问题的单元格中的公式。我正在使用match查找水平范围的数据,并确定哪一列包含最新更改,但“ Complete”列具有日期和“ ON HOLD”列具有日期的情况除外。单元格Y1包含=TODAY(),因此它将根据当日日期检查每个单元格。单元格被格式化为日期,并作为日期从左到右输入。但是,条目可以从较早的列重新开始,而日期却乱七八糟。

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

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

我是否MATCH()假设每次都会在某个方向上读取都使用错了吗?代码中是否有其他错误?还是有另一种方式来获得我为其编程的结果?

bar*_*ini 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是否按升序排列-它会找到Y = <= 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")