我正在尝试创建一个取数组加权平均值的函数。我正在创建一个演示文稿,显示基于每个产品加权平均费率的客户的市场价格($)和收入。我可以手动找到每个市场占总收入的百分比,然后将每个市场的%因子乘以它的比率,然后将所有这些值加起来以找到加权平均费率,但我想创建一个函数来为我做。我想做以下事情:
对于以下客户数据(假):
-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
。
有人能帮助我做到这一点吗?
答案 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)