2010-09-07 111 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%。