2010-09-07 74 views
1

我有一大堆数据每月都会更新。我想检查一下新数据是否与以前的月份有所不同。平均功能

它看起来像这样:

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。月,公关。名称。

我想制作一个公式,可以告诉我,如果其中一个名称与前几个月相比i%不同。例如,我想说的是,dec1中的“名称”555相对于该客户的平均值相差25%。

感谢,
安德斯


嗯,我想我是不太好解释自己。所以我会尽量做得更清楚。

我正在做这个excel函数。

所以我寻找的公式应该计算公关。命名平均数字(avgN)。这当然每个月都在变化。公式应该会找到与平均值相比的每月差异。

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

回答

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) 

将返回这个月的量与平均值之间的百分比差异。如果要测试这是否超出容差(增量),请使用上述表达式作为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 
+0

P.S.请不要告诉任何人,我知道VBA :) – 2010-09-07 12:13:36

+0

嗨,再次感谢您的答案。 – Anders 2010-09-07 12:20:09

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)) 

这是一个数组公式,必须以控制+ Shift + 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,比平均值下降4.17%。