我想在sumproduct中使用一个不接受数组的函数,例如,我有这样一个数据集:
+---------+----------------------------------------------+--------+-----+
| Topic | Eq | Weight | Val |
+---------+----------------------------------------------+--------+-----+
| Topic 1 | LOGNORM.DIST(val,2.4,0.4, FALSE)*10.2027*D50 | 13 | 5 |
| Topic 2 | val/10 | 10 | 4 |
| Topic 3 | val^2 | 5 | 2 |
+---------+----------------------------------------------+--------+-----+
我写了一个Visual Basic模块来计算这些方程:
Public Function eval(s As String) As Variant
eval = Evaluate(s)
End Function
基本上,我只希望能够在等式中插入"val"列,然后乘以权重,得到一个总和数组。
我试过这个:
=SUMPRODUCT(IF(ISNUMBER(H$7:H$31),Dist(H$7:H$31,$D$7:$D$31,$E$7:$E$31))
其中Dist是lambda函数:
LAMBDA(val,eq,weight,eval(CONCAT("=",SUBSTITUTE(eq,"val",val))))
但是每当我的表超过一行时,它就会向我发出#N/A或#VALUE错误,大概是因为LOGNORM.DIST函数不喜欢值超过一个。
有没有办法强制excel函数接受数组?
1条答案
按热度按时间vfh0ocws1#
感谢大家的评论,我用MAP函数解决了这个问题。发布了一个可见性的答案。我导航到公式〉名称管理器,创建了一个名为Dist的新公式:
现在,我发布的SUMPRODUCT公式基本上是这样的(伪代码):
这将正确地输入值到我的每个方程中,而不会因为它是一个数组而大喊大叫,因为我认为
Map
是逐行的。