Cra*_*aig 5 excel worksheet-function
我有一个用于4种不同分组的总数据集.其中一个值是平均时间,另一个是计数.对于总计,我必须将它们相乘,然后除以计数的总和.目前我使用:
=SUM(D32*D2,D94*D64,D156*D126,D218*D188)/SUM(D32,D94,D156,D218)
Run Code Online (Sandbox Code Playgroud)
如果我能使它更具可读性,我宁愿使用SumProduct.我试着这样做:
=SUMPRODUCT((D2,D64,D126,D188),(D32,D94,D156,D218))/SUM(D32,94,D156,D218)
Run Code Online (Sandbox Code Playgroud)
但正如你在我的帖子中所说,这不起作用.有没有办法像我想要的那样做SumProduct?
小智 7
我同意评论"这可能与熟练的excel-fu有关,但即使可以完成,它也不可能比原始解决方案更具可读性"
一个可能的解决方案是将CHOOSE()函数嵌入到您的内部SUMPRODUCT(这个技巧实际上非常方便vlookups,查找条件最大值等).
示例:假设您的数据有八个观察值,并且分为两列(B列和C列),但您不希望包含一些观察结果(排除第4行和第5行中的观察结果).然后SUMPRODUCT代码看起来像这样......
=SUMPRODUCT(CHOOSE({1,2},A1:A3,A6:A8),CHOOSE({1,2},B1:B3,B6:B8))
Run Code Online (Sandbox Code Playgroud)
我实际上想到了这一点,所以我不知道这些限制,因为你可以看到它不是那么漂亮.
希望这可以帮助!:)
有可能使用熟练的excel-fu,但即使可以完成,它也不可能比原始解决方案更具可读性.问题是即使在20多年后,Excel仍然会出现不连续的范围.命名它们将无法工作,数组公式将无法工作,正如您在SUMPRODUCT中看到的那样,它们通常不用于元组数组函数.这里最好的选择是提出自定义功能.
UPDATE
你的问题让我想到如何处理不连续的范围.这不是我过去必须处理的事情.当你问这个问题时,我没有时间给出更好的答案,但现在我已经有几分钟,我已经掀起了一个可以做你想做的自定义功能:
Function gvSUMPRODUCT(ParamArray rng() As Variant)
Dim sumProd As Integer
Dim valuesIndex As Integer
Dim values() As Double
For Each r In rng()
For Each c In r.Cells
On Error GoTo VBAIsSuchAPainInTheAssSometimes
valuesIndex = UBound(values) + 1
On Error GoTo 0
ReDim Preserve values(valuesIndex)
values(valuesIndex) = c.Value
Next c
Next r
If valuesIndex Mod 2 = 1 Then
For i = 0 To (valuesIndex - 1) / 2
sumProd = sumProd + values(i) * values(i + (valuesIndex + 1) / 2)
Next i
gvSUMPRODUCT = sumProd
Exit Function
Else
gvSUMPRODUCT = CVErr(xlErrValue)
Exit Function
End If
VBAIsSuchAPainInTheAssSometimes:
valuesIndex = 0
Resume Next
End Function
Run Code Online (Sandbox Code Playgroud)
一些说明:
| 归档时间: |
|
| 查看次数: |
22738 次 |
| 最近记录: |