我这样做的原因是我不必使用矩阵乘法,而是可以使用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数组。我应该注意到我并没有尝试强制转换变量,但是如果有办法可以解决这个问题。
有什么想法吗?
答案 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()
函数中使用。