范围内最后一个负值列的Excel公式(无数组公式)
我有一个Excel公式来查找连续的负值的最后一个单元格的列号。 问题是这是一个数组公式,我需要用来创build电子表格的工具(Apache POI SXSSF)不支持数组公式。
行中的值不以任何方式sorting。
我手工制作电子表格时使用的数组公式就是
{=MATCH(2,1/(B18:M18<0))}
有没有办法用一个正常的公式达到相同的结果?
感谢您的任何提示!
=MATCH(2,1/MMULT(1,-(B18:M18<0)))
说明
如果原始公式是正常input的,范围B18:M18
使用隐式交叉求值(例如,如果在C5
input,则评估为返回#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。 没有试图提出一个完全不同的公式,我不知道有任何其他的方式来做到这一点。