我有一个Excel公式,用于查找连续负值的最后一个单元格的列号。 问题是它是一个数组公式,我需要用来创建电子表格的工具(Apache POI SXSSF)不支持数组公式。
行中的值不以任何方式排序。
手工制作电子表格时有效的数组公式是
{=MATCH(2,1/(B18:M18<0))}
有没有办法用普通公式获得相同的结果?
感谢您的任何提示!
答案 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))
,无需数组输入。在没有尝试提出完全不同的公式的情况下,我不知道有任何其他方法可以做到这一点。