2017-09-25 1 views
0

Hey im essayant d'écrire un petit programme VBA qui calcule le score moyen du quiz le problème est quand je rentre dans le troisième nombre, il revient incorrect après avoir fait les deux premiers à droite.Qu'est-ce que je manque?vba moyenne calculatrice userform

est la vue de la conception This is the design view

Option Explicit 

Dim total As Double 
Dim number As Double 
Dim average As Double 


Private Sub CommandButton1_Click() 

If IsNumeric(TextBox1.Value) = True Then 
    total = CDbl(average + TextBox1.Value) 
    number = CDbl(number + 1) 
    average = CDbl(total/number) 
    TextBox2.Value = number 
    TextBox3.Value = average 
    TextBox1.Value = ""  
Else 
    MsgBox ("please enter a number") 
    TextBox1.Value = "" 
End If 

End Sub 
+0

Quelle est la valeur de 'number'? assurez-vous que ce n'est pas «0» –

+0

Le nombre est le nombre de fois qu'un score est entré il ticks chaque fois que je saisis un score.Sa ce qui im ​​divisant le total par –

+0

J'ai compris cette partie, quelle est la valeur la première fois ? est-ce '0'? car alors vous divisez zéro et obtenez une erreur. –

Répondre

0

Votre calcul est éteint. Si vous voulez le faire, en utilisant la moyenne précédente, et la nouvelle valeur, alors la formule que vous devez utiliser est la suivante:

([old average] + ([new value]/[count - 1]))/([count]/[count - 1]) 

Cependant, comme vous pouvez le voir, ce n'est pas très facile à lire conception. J'irais pour un design, en utilisant un array. De cette façon, vous pouvez garder les mathématiques beaucoup plus intuitives, plus vous pouvez revenir sur le vieux score, si vous le souhaitez. Le design le plus simple est probablement de garder le tableau de la taille de votre score. Cela nécessite redim() chaque fois que vous ajoutez un nouveau score. Du point de vue de la performance, c'est une mauvaise pratique. Mais dans votre minuscule calculatrice, ça ne va pas être un problème.

+0

Désolé d'être stupide mais pourriez-vous expliquer que les maths comme im 5? –

+0

Vous avez dit que cela fonctionne pour les deux premières valeurs. Si elles sont 5 et 3 alors la moyenne est 4. Ce qui est correct. Si vous ajoutez ensuite 7, la moyenne devrait être '(5 + 3 + 7)/3 = 5'. Mais en utilisant votre méthode, vous obtiendriez, '(4 + 7)/3 = 3.7'. Ce qui n'est pas correct. les maths que j'ai montrés il y a un travail autour, mais pas un très joli. Par conséquent, vous devez utiliser des tableaux :-). – Noceo

+0

ok ill apprendre des tableaux un autre jour .wow merci de m'avoir fait remarquer que je viens de réaliser total = CDbl (total + Quizscore) .makes il fonctionne même si ce n'est pas joli.Au lieu de total = CDbl (moyenne + Quizscore) –

0

Je pense que vous devriez obtenir le nombre, en moyenne, et la valeur totale avant de faire les calculs:

Option Explicit 

Dim total As Double 
Dim number As Double 
Dim average As Double 


Private Sub CommandButton1_Click() 

number = 0 
average = 0 
total = 0 

If IsNumeric(TextBox1.Value) = True Then 
    total = CDbl(average + TextBox1.Value) 
    number = CDbl(number + 1) 
    'prevent error 
    If number > 0 then 
     average = CDbl(total/number) 
    Else 
     average = 0 
    End If 
    TextBox2.Value = number 
    TextBox3.Value = average 
    TextBox1.Value = ""  
Else 
    MsgBox ("please enter a number") 
    TextBox1.Value = "" 
End If 

End Sub 

Hope this aide.