范围中最后一个负值的列的Excel公式(无数组公式)

时间:2013-09-28 06:10:02

标签: excel apache-poi

我有一个Excel公式,用于查找连续负值的最后一个单元格的列号。 问题是它是一个数组公式,我需要用来创建电子表格的工具(Apache POI SXSSF)不支持数组公式。

行中的值不以任何方式排序。

手工制作电子表格时有效的数组公式是

{=MATCH(2,1/(B18:M18<0))}

有没有办法用普通公式获得相同的结果?

感谢您的任何提示!

1 个答案:

答案 0 :(得分:3)

=MATCH(2,1/MMULT(1,-(B18:M18<0)))

<强>解释

如果正常输入原始公式,则使用隐式交集评估范围B18:M18(例如,如果在C5中输入,则评估为=MATCH(2,1/(C18<0)),返回#N/A)。使用CTRL + SHIFT + ENTER输入公式表示该范围被计算为数组而不是单个单元格范围。

MMULT是可以从一系列值返回数组的少数几个函数之一。要在此处使用它,我们首先需要使用-(B1:B18<0)(或使用N代替-)将布尔值数组转换为数字。接下来,我们预先乘以1(即1x1矩阵)以返回相同的数组,就像它已经进行了数组计算一样。这适用于水平数组,对于垂直数组,我们需要后乘1,这意味着切换参数。

这种方法非常普遍。另一个例子是考虑使用公式=MAX(IF(B1:B18<0,B1:B18))找到范围中的最大负值。再次将B1:B18<0替换为MMULT(1,-(B1:B18<0)),无需数组输入。在没有尝试提出完全不同的公式的情况下,我不知道有任何其他方法可以做到这一点。