嘿我试着写一个小VBA程序来计算平均测验分数问题是当我输入第三个数字后,它在前两个右前后回来不正确。我错过了什么?
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 :(得分:0)
你的数学已关闭。如果你想使用之前的平均值和新值,那么你应该使用的公式是:
( [old average] + ( [new value] / [count - 1] ) ) / ( [count] / [count - 1] )
但是,正如您可能看到的,这不是一个非常容易阅读的设计。我会使用array进行设计。这样你可以更直观地保持数学,如果你愿意,你可以回顾旧的分数。最简单的设计可能是让数组保持分数大小。每次添加新分数时,这都需要redim()
。从性能的角度来看,这是非常糟糕的做法。但是在你的小型计算器中,这几乎不会成为问题。
答案 1 :(得分:0)
我认为在进行计算之前你应该得到数字,平均值和总值:
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
希望得到这个帮助。