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

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

行中的值不以任何方式sorting。

我手工制作电子表格时使用的数组公式就是

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

有没有办法用一个正常的公式达到相同的结果?

感谢您的任何提示!

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

说明

如果原始公式是正常input的,范围B18:M18使用隐式交叉求值(例如,如果在C5input,则评估为返回#N/A =MATCH(2,1/(C18<0)) )。 用CTRL + SHIFT + ENTERinput公式意味着该范围被评估为一个数组而不是单个单元格范围。

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

这种方法相当普遍。 作为另一个例子,考虑使用公式=MAX(IF(B1:B18<0,B1:B18))find范围中的最大负值。 再次用MMULT(1,-(B1:B18<0))代替B1:B18<0 MMULT(1,-(B1:B18<0))不需要数组input。 没有试图提出一个完全不同的公式,我不知道有任何其他的方式来做到这一点。