你能否在excel中将标量转换为任意长度的数组

时间:2013-11-20 19:55:30

标签: excel

我这样做的原因是我不必使用矩阵乘法,而是可以使用sumproduct。我可以用矩阵乘法来做到这一点,但我宁愿没有解释它是什么以及如何对我的同事这样做的开销。我需要将一个标量应用于两个我正在应用sumproduct的数组。问题是,由于标量是长度1,它打破了副产品配方。 这是公式的样子:

=sumproduct(1/sumif(conditionals), array 2, array 3)

我想要做的是根据其他2个数组的大小来缩放第一个数组,即我的标量。我试过这个,我觉得这样做不行,但它应该让我知道我想要实现的目标:

=sumproduct(rept(1/sumif(conditionals),count(array 2)), array 2, array 3)

这里的问题是rept函数返回一个字符串,我无法使用round()或我能想到的任何其他公式进入该标量的1xN数组。我应该注意到我并没有尝试强制转换变量,但是如果有办法可以解决这个问题。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

你试过吗?

=sumproduct((1/sumif(conditionals))*'array 2'*'array 3')

此外,它不会在数学上与

相同
=(1/sumif(conditionals))*sumproduct('array 2','array 3')

答案 1 :(得分:1)

以下公式应解决您的问题:

=SUMPRODUCT(
            ROW(INDIRECT("1:" & COUNT(array 2))) ^ 0 / SUMIF(conditionals),
            array 2,
            array 3
           )

其工作原理如下:

首先获取数组2的元素数:

COUNT(array 2)

然后将其转换为“虚拟”范围引用(仅限行):

INDIRECT("1:" & COUNT(array 2))

然后确定此虚拟范围引用的行号,结果为{1,2,...,COUNT}

ROW(INDIRECT("1:" & COUNT(array 2)))

最后,将行号转换为幂0:

ROW(INDIRECT("1:" & COUNT(array 2))) ^ 0

这为您提供了具有{1,1,...,1}元素的所需数组COUNT,可以在SUMPRODUCT()函数中使用。