我是Excel-VBA的初学者,我需要创建一个函数来计算几何加权平均值,给出一个值列表(Mi
)和一个权重列表('无线')。
Excel公式为:EXP((SUM(Wi*LN(Mi))/(sum(Wi))
我对公式的“Sum”部分有困难。这是我到目前为止所做的:
Function GEOWAMC(Wi as Double, Mi as Double) As Double
Range("A1").Formual="Sum("& Range(Cells(2,1), Cells(2,3)).Address(False,False)&")"
GEOWAMC=((WorksheetFunction.Sum(Wi*ln(Mi))/(worksheetFunction.sum(Wi)))
End Function
答案 0 :(得分:0)
我保证你是第一个需要计算这个的人 - 或者你能想到的任何其他数学函数 - 在Excel中。搜索“加权几何平均值excel”会将我引导至answer(可能与您获得该函数的位置相同)。
很高兴看到你试图自己解决这个问题,但不是“Sum”部分阻止你的功能工作。
我担心您的代码有 数字 错误。该号码为 “Nine” 。
最重要的是,您在公开说明中转换了公式标准
以W
开头的参数是权重 ,其他参数是值
如果您想使用超过1个单元格的参数,请使用 Range
(不是Double
)。
您无法在函数中直接为单元格指定值(或以任何其他方式更改单元格)。函数将值返回到调用它的单元格。
Address(False, False)
无法取得任何成效。
(您需要更好地理解相对与绝对引用的目的。)
而不是使用:Range(Cells(2,1), Cells(2,3)).Address(False,False)
...你可以使用 A2:C2
,因为它们意味着完全同样的事情(并且永远都会)。
因此,所有这些:
Range("A1").Formual="Sum("& Range(Cells(2,1), Cells(2,3)).Address(False,False)&")
......可缩短为: [A1]=[A2]+[B2]+[C2]
......因为他们的意思是完全同样的事情(并且总是如此)。
您在VBA中使用工作表函数,这在某些案例中很好
...但功能是 Application.WorksheetFunction.Sum
。
自然对数函数LN
仅在使用一个一个值时才接受
......不是“清单”(或细胞范围)
您应该在每个模块的顶部使用 Option Explicit
,尤其是在学习或疑难解答时;它本可以帮助你捕捉至少这些错误。
此外,您还有几套不必要的括号,但 并不是什么大问题。
所以,你可以修复所有这些,或更好,你可以将它用作工作表函数并保存自己(或其他人)很多工作无缘无故。
<强>语法:强>
=EXP(SUMPRODUCT(
WeightRange
,LN(
ValueRange
))/SUM(
WeightRange
))
- 请注意两次输入相同的
*WeightRange*
。*WeightRange*
和*ValueRange*
必须大小相同。
示例:强>
如果:
中的加权几何平均值
- 单元格A1 to A5
包含您的值,和
- 单元格B1 to B5
包含值的权重,和
- 您希望单元格C1
...然后在C1
中输入:
=EXP(SUMPRODUCT(B1:B5,LN(A1:A5))/SUM(B1:B5))
我怀疑这已经足够作为一种解决方案了,现在我们已经完成了它,但是如果你有一个实际的 原因你需要这个计算放在VBA功能中然后通过各种方式让我知道,我会弄清楚。 : - )