2013-09-28 40 views
0

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

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

数组公式,当我做手工的电子表格

{=MATCH(2,1/(B18:M18<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))找到范围中的最大负值。再次用MMULT(1,-(B1:B18<0))代替B1:B18<0可以不需要数组输入。没有试图提出一个完全不同的公式,我不知道有任何其他方式来做到这一点。

+0

OP的数组公式适用。你的公式永远不会失败:)但这不适用于我..我错过了什么? –

+0

感谢您指出这一点,已经改变了争论 - 希望能够解决它。 –

+0

+ 1我已经删除我的帖子,因为你的工作:) –

相关问题