0

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

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

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

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

有没有办法用一个普通的公式来达到同样的结果?

感谢您的任何提示!

4

1 回答 1

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

解释

如果正常输入原始公式,B18:M18则使用隐式交集评估范围(例如,如果输入其中,C5则评估为=MATCH(2,1/(C18<0))which return #N/A)。使用 CTRL+SHIFT+ENTER 输入公式意味着该区域被评估为一个数组,而不是单个单元格区域。

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

这种方法很普遍。作为另一个例子,考虑使用公式找到范围内的最大负值=MAX(IF(B1:B18<0,B1:B18))。再次替换B1:B18<0MMULT(1,-(B1:B18<0))消除了对数组条目的需要。在不尝试提出完全不同的公式的情况下,我不知道有任何其他方法可以做到这一点。

于 2013-09-28T07:00:51.273 回答