平均功能

时间:2010-09-07 11:00:26

标签: excel average excel-2000

我有一大堆数据,每个月都会更新。我想检查新数据是否与前几个月的数据有所不同。

看起来像这样:

month name  data  
jan   551   2  
jan   552   20  
dec   553   12  
jan   553   13  
dec   554   9  
okt   555   2  
nov   555   2  
dec   555   2,5    

所以5个名字,长达4个月,不同的数据pr。月,公元名称。

我想制作一个可以告诉我的公式,如果其中一个名字与前几个月相比有所不同。例如,我想说,与该客户的平均值相比,dec中的“name”555相差25%。

感谢,
安德斯


嗯,我想我不太好解释自己。所以我会试着更清楚一点。

我这样做是一个excel功能。

所以我正在寻找的公式应该计算pr。列出平均数字(平均值)。这当然每个月都在变化。公式应该找出与平均值相比的月度差异。

我有大约2000行,有900个不同的名字。

2 个答案:

答案 0 :(得分:0)

假设:

avgN = average amount for customer n
currN = current (monthly) amount for customer n
delta = tolerance expressed as a decimal (.25 in your example)

然后是公式

=abs((currN - avgN) / avgN) 

将返回本月金额与平均值之间的百分比差异。如果要测试这是否超出容差(delta),请使用上面的表达式作为if工作表函数的第一个参数,例如

=if(abs((currN - avgN) / avgN) > delta, "tolerance exceeded", "within tolerance") 

从您的问题中不清楚您是想在VBA代码中还是在工作表函数中执行此操作。如果是前者,那么你需要这样的东西

Sub checkTolerance()

    Dim percentageChange As Double
    Dim currN As Double
    Dim avgN As Double
    Dim delta As Double

    ' Set the values of the variables above from somewhere (worksheet cell, user input, etc.)

    percentageChange = Abs((currN - avgN) / avgN)


    If percentageChange > delta Then 
        ' Do something when tolerance is exceeded
        MsgBox "tolerance exceeded"     

    Else
        ' Do something when amount is within tolerance
        MsgBox "within tolerance"
    End If 

End Sub

答案 1 :(得分:0)

=(SUM(($A$2:$A$9=A2)*($B$2:$B$9=B2)*($C$2:$C$9))-(SUM(($B$2:$B$9=B2)*($C$2:$C$9))/SUM(--($B$2:$B$9=B2))))/SUM(($A$2:$A$9=A2)*($B$2:$B$9=B2)*($C$2:$C$9))

这是一个数组公式,必须使用Control + Shift + Enter输入,而不仅仅是Enter。如果您的第一行数据在A2中开始,则此公式将进入D2并填充到您拥有数据的范围。

SUM(($A$2:$A$9=A2)*($B$2:$B$9=B2)*($C$2:$C$9))

此部分汇总了与您所在行具有相同名称和月份的所有数据。

(SUM(($B$2:$B$9=B2)*($C$2:$C$9))/SUM(--($B$2:$B$9=B2)))

此部分取得与您所在行无关的所有数据的平均值(总和/计数)。

对于dec,553,12,你将得到-4.17%。 553的平均值为12.5,dec比平均值低4.17%。