2010-09-07 14 views
1

J'ai un énorme ensemble de données qui est mis à jour tous les mois. Je voudrais vérifier si les nouvelles données diffèrent des mois précédents en%.Fonction moyenne

Il ressemble à ceci:

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  

Donc 5 noms, jusqu'à 4 mois et différentes données pr. mois, pr. prénom.

Je voudrais faire une formule qui peut me dire, si l'un des noms diffère de i% par rapport aux mois précédents. Par exemple, je voudrais dire que "name" 555 en dec diffère de 25% par rapport à la moyenne pour ce client.

grâce,
Anders


Eh bien, je suppose que je ne suis pas trop bon pour me expliquer. Je vais donc essayer d'être un peu plus clair. Je le fais comme une fonction Excel. Donc, la formule que je cherche devrait calculer pr. nommez les chiffres moyens (avgN). Cela change bien sûr chaque mois. Et la formule devrait trouver la différence mensuelle par rapport à la moyenne.

J'ai environ 2.000 lignes avec 900 noms différents.

Répondre

0

On suppose:

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

Puis la formule

=abs((currN - avgN)/avgN) 

retournera la différence en pourcentage entre le montant et la moyenne de ce mois-ci. Si vous souhaitez tester si cela dépasse la tolérance (delta), utilisez l'expression ci-dessus comme premier argument de la fonction de feuille de calcul if, par ex. Il n'est pas clair d'après votre question si vous voulez faire ceci dans le code VBA, ou dans une fonction de feuille de calcul. Il n'est pas clair à partir de votre question. Si l'ancien, alors vous aurez besoin de quelque chose comme ça

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. S'il vous plaît ne dites à personne que je connais VBA :) –

+0

Salut à nouveau, merci pour votre réponse. – Anders

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

Ceci est une formule de tableau et doit être entré avec Ctrl + Maj + Entrée, non seulement Entrez. Si votre première ligne de données commence en A2, cette formule va dans D2 et remplir dans la mesure où vous avez des données.

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

Cette sommes partie toutes les données qui a le même nom et mois que la ligne que vous êtes.

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

Cette partie prend la moyenne (somme/nombre) de toutes les données qui a le même nom que la ligne que vous êtes indépendamment du mois.

Pour dec, 553, 12, vous obtiendrez -4.17%. La moyenne pour 553 est de 12,5 et la diminution est de 4,17% inférieure à la moyenne.