加权平均函数

时间:2015-10-20 13:44:05

标签: arrays excel vba

我正在尝试创建一个取数组加权平均值的函数。我正在创建一个演示文稿,显示基于每个产品加权平均费率的客户的市场价格($)和收入。我可以手动找到每个市场占总收入的百分比,然后将每个市场的%因子乘以它的比率,然后将所有这些值加起来以找到加权平均费率,但我想创建一个函数来为我做。我想做以下事情:

对于以下客户数据(假):

-Asia       $16      $200,000
-Europe     $9       $50,000
-N. America $21      $100,000
-Africa     $25      $250,000

我需要找到所有市场的加权平均汇率。

Function WeightedAverage(array, weightarray)     
#"array" being {$16,$9,$21,$25} and "weightarray" being {$200,000, $50,000, $100,000, $250,000}

WeightedAverage = SumProduct(array, weightvalues) 

weightvalues = an array of values like so {$200,000/sum(weightarray), $50,000/sum(weightarray), $100,000/sum(weightarray), $250,000/sum(weightarray)}

End Function

这应该返回加权平均费率$20

有人能帮助我做到这一点吗?

2 个答案:

答案 0 :(得分:0)

您不需要VBA - 一个简单的公式可行。如果您的数据位于单元格A1:C4中,请输入以下公式:

=SUMPRODUCT(B1:B4,C1:C4/SUM(C1:C4))

在这个公式的版本中,我将C1:C4/SUM(C1:C4)视为一个数组公式,它将数字数组(200,000,50,000等)转换为相应的权重数组(0.33,0.083等)。 )。在许多情况下,这需要将表达式明确地视为数组公式,但sumproduct是一个相当强大的函数,可以将整数组公式应用于其参数。请参阅this进行讨论。

在这个特殊情况下

=SUMPRODUCT(B1:B4,C1:C4)/SUM(C1:C4)

也适用于评论中的Merely Useful的答案,但我会留下我的答案,因为知道sumproduct可以有效地评估其参数中的数组公式是有用的,即使整体sumproduct不作为数组公式本身输入。

答案 1 :(得分:0)

嗯,你不需要VBA函数,数组公式可以:

=SUM(A1:A4*B1:B4)/SUM(B1:B4)

(输入公式时按Ctrl + Enter)