0

Excel VBA を使用して 2 つの数値を生成しようとしています。1 から 11 の間。数値が等しい場合、2 番目の数値はランダムから再生成されます。最初の値が 8 または 9 の場合、2 番目の値は 8 または 9 であってはなりません。そうである場合は、再びランダムから生成する必要があります。

これが私のコードです:

Sub Foo()
    Dim thisNum As Integer
    Dim thatNum As Integer
        thatNum = Int((11 * Rnd) + 1)
        thisNum = Int((11 * Rnd) + 1)
        Do While thisNum = thatNum
            thatNum = Int((11 - 1 + 1) * Rnd + 1)
            break

        Loop
        Do While (thisNum = 8 Or 9) And (thatNum = 8 Or 9)
            thatNum = Int((11 - 1 + 1) * Rnd + 1)
            break

        Loop

        Range("F1").Value = thisNum
        Range("G1").Value = thatNum     
End Sub

クラッシュし、エラーは発生しません。私は何をすべきか?

4

1 に答える 1

3

条件付きのループに入っているため、ループを中断する必要はありません。

あなたの状態はこの行で間違っています:

Do While (thisNum = 8 Or 9) And (thatNum = 8 Or 9)

thisNumそのような他の 2 つの数値と比較することはできません。あなたの場合、無限ループがあります。あなたが言っています :

Do While (thisNum = 8 Or True) And (thatNum = 8 Or True)

っていうことは :

Do While True

このループを使用できます:

Sub Foo()
    Dim thisNum As Integer
    Dim thatNum As Integer
    thisNum = Int((11 * Rnd) + 1)

    Do             
        thatNum = Int((11 - 1 + 1) * Rnd + 1)
    Loop While (thisNum = thatNum) Or ((thisNum = 8 Or thisNum = 9) And (thatNum = 8 Or thatNum = 9))

    Range("F1").Value = thisNum
    Range("G1").Value = thatNum     
End Sub
于 2013-05-16T06:19:35.520 に答える