在vba中执行直到循环

在vba中执行直到循环,vba,Vba,我写了一个vba,当我掷6000次骰子时,它会计算1掷骰子的次数,2掷骰子的次数,依此类推直到6掷骰子的次数 Private Sub CommandButton2_Click() i = 6000 Do Until i < 0 n = Int(1 + Rnd * (6 - 1 + 1)) TextBox1.Text = Range("A1") TextBox2.Text = Range("A2") TextBox3.T

我写了一个vba,当我掷6000次骰子时,它会计算1掷骰子的次数,2掷骰子的次数,依此类推直到6掷骰子的次数

Private Sub CommandButton2_Click()
i = 6000
Do Until i < 0
    n = Int(1 + Rnd * (6 - 1 + 1))
    TextBox1.Text = Range("A1")
    TextBox2.Text = Range("A2")
    TextBox3.Text = Range("A3")
    TextBox4.Text = Range("A4")
    TextBox5.Text = Range("A5")
    TextBox6.Text = Range("A6")

    If n = 1 Then
        Range("A1") = Range("A1") + n
    ElseIf n = 2 Then
        Range("A2") = Range("A2") + n / 2
    ElseIf n = 3 Then
        Range("A3") = Range("A3") + n / 3
    ElseIf n = 4 Then
        Range("A4") = Range("A4") + n / 4
    ElseIf n = 5 Then
        Range("A5") = Range("A5") + n / 5
    ElseIf n = 6 Then
        Range("A6") = Range("A6") + n / 6
    End If
    i = i - 1
Loop
End Sub
Private子命令按钮2\u单击()
i=6000
直到i<0为止
n=Int(1+Rnd*(6-1+1))
TextBox1.Text=范围(“A1”)
TextBox2.Text=范围(“A2”)
TextBox3.Text=范围(“A3”)
TextBox4.Text=范围(“A4”)
TextBox5.Text=范围(“A5”)
TextBox6.Text=范围(“A6”)
如果n=1,则
范围(“A1”)=范围(“A1”)+n
如果n=2,则
范围(“A2”)=范围(“A2”)+n/2
如果n=3,则
范围(“A3”)=范围(“A3”)+n/3
如果n=4,则
范围(“A4”)=范围(“A4”)+n/4
如果n=5,则
范围(“A5”)=范围(“A5”)+n/5
如果n=6,则
范围(“A6”)=范围(“A6”)+n/6
如果结束
i=i-1
环
端接头

它工作正常,但问题是加载速度太慢,有没有办法固定此代码?

请尝试此代码。它会立即给出结果

Option Explicit

Private Sub CommandButton2_Click()

    Dim i As Long
    Dim n As Long
    Dim results As Variant

    results = Array(0, 0, 0, 0, 0, 0)

    ' read results from cells A1 - A6
    For i = 1 To 6
        results(i - 1) = Cells(1, i).Value
    Next i

    ' roll the dice 6000 times
    For i = 1 To 6000
        n = Int(Rnd * 6)
        results(n) = results(n) + 1
    Next i

    ' write results to cells A1 - A6
    For i = 1 To 6
        Cells(1, i).Value = results(i - 1)
    Next i

End Sub
Private Sub CommandButton2_Click()

    Dim Arr(1 To 6) As Integer
    Dim n           As Integer                  ' random number: 1 to 6
    Dim i           As Long                     ' loop counter: turns
    
    Randomize
    For i = 1 To 6000
        n = Int(1 + Rnd * (6 - 1 + 1))
        Arr(n) = Arr(n) + 1
    Next i
    Range("A1").Resize(UBound(Arr)).Value = Application.Transpose(Arr)
    
    For i = 1 To UBound(Arr)
        Me.Controls("TextBox" & i).Value = Arr(i)
    Next i
End Sub

文本框和工作表单元格之间的交互不清楚。无论您想以何种方式建立,都很容易。

当然!从循环之前的单元格中提取值,并将其存储在变量中。继续更改变量的值,并且只在循环完成其工作后设置单元格的值。这是有效的,但是当我再次单击按钮时。计数的数字会重置。这是因为您的问题没有指定要保留的数字(如果有)。也没有提及任何流程或评估。您可能希望将新结果添加到工作表中,或添加到文本框中,或显示在下一列中。你只是不说。最好的方法是编辑你的问题,包括你想要的。