vba平均计算器userform

时间:2017-09-25 05:50:05

标签: excel vba excel-vba userform

嘿我试着写一个小VBA程序来计算平均测验分数问题是当我输入第三个数字后,它在前两个右前后回来不正确。我错过了什么?

这是设计视图 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

2 个答案:

答案 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

希望得到这个帮助。