用Excel函数计算加权几何平均值

时间:2018-03-17 17:40:11

标签: excel vba excel-vba function formula

我是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

1 个答案:

答案 0 :(得分:0)

我保证你是第一个需要计算这个的人 - 或者你能想到的任何其他数学函数 - 在Excel中。搜索“加权几何平均值excel”会将我引导至answer(可能与您获得该函数的位置相同)。

很高兴看到你试图自己解决这个问题,但不是“Sum”部分阻止你的功能工作。

调试您的VBA功能:

我担心您的代码有 数字 错误。该号码为 “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功能中然后通过各种方式让我知道,我会弄清楚。 : - )