加权平均函数

我正在尝试创build一个采用数组的加权平均值的函数。 我正在创build一个演示文稿,其中显示了每个产品的加权平均费用底部的客户的市场价格($)和收入。 我可以手动find每个市场占总收入的百分比,然后将每个市场的百分比乘以它的比率,然后将所有这些值加起来find加权平均比率,但是我想创build一个函数来为我做。 我想要做到以下几点:

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

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

我需要find所有市场的加权平均利率。

 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

有人能帮我完成这个吗?

你不需要VBA – 一个简单的公式工程。 如果您的数据在单元格A1:C4中,请input以下公式:

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

在这个公式的版本中,我将C1:C4/SUM(C1:C4)视为一个数组公式,它将数组数组(200,000,50,000等)转换为相应的权重数组(0.33,0.083,等等。)。 在许多情况下,这需要将expression式作为数组公式应用,但是sumproduct是一个相当强大的函数,可以将整数数组应用于其参数。 看到这个很好的讨论。

在这个特殊的情况下

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

也可以工作,并且对应于Merely Useful在注释中的回答,但是我会留下我的答案,因为知道sumproduct可以在其参数中计算数组公式是有用的,即使整个sumproduct没有被input为一个数组公式本身。

那么,你不需要这个VBA函数,一个数组公式就可以:

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

(input公式时按Ctrl + Enter)