2017-01-05 13 views
0

現在、英語の単語とその意味をトルコ語で格納しているExcelファイルを作成しています。私がしているのは、Excelが単語をランダムに選択して表示して、「OK」をクリックすると、その単語の意味が表示されます。これは正常に動作します。問題はExcelに587語ありますが、同じ単語を尋ね続けるような気がします。

あなたはそれが私の誤解であると思いますか、Excelは非常に良い乱数を生成できません。私はそれをより良くするために何をすることができますか?Excelでの乱数生成

ここに私のコードです。

Sub askRandom() 
Dim maxRow As Integer 
Dim randNum As Integer 
Dim answer As Integer 
Dim known As Integer 
Dim unknown As Integer 

Dim sht As Worksheet 
Dim resultSheet As Worksheet 
Set sht = ThisWorkbook.Sheets("Words") 
Set resultSheet = ThisWorkbook.Sheets("Results") 
maxRow = sht.Range("A10000").End(3).Row 

Do While answer <> vbCancel 
randNum = Int(maxRow * Rnd() + 1) 
MsgBox sht.Cells(randNum, 1).Value, , "Word is" 
answer = MsgBox(sht.Cells(randNum, 2).Value & ", " & sht.Cells(randNum, 3).Value & _ 
    ", " & sht.Cells(randNum, 4).Value & sht.Cells(randNum, 5).Value, vbYesNoCancel, _ 
    "Meanings are") 
If answer = vbYes Then 
    known = known + 1 
    If sht.Cells(randNum, 6).Value <> 0 Then 
     sht.Cells(randNum, 6).Value = sht.Cells(randNum, 6).Value - 1 
    End If 

ElseIf answer = vbNo Then 
    unknown = unknown + 1 
    sht.Cells(randNum, 6).Value = sht.Cells(randNum, 6).Value + 1 
End If 
Loop 

MsgBox "Your results are " & known & " out of " & unknown + known 

With resultSheet 

.Cells(.Range("A10000").End(3).Row + 1, 1).Value = known 

.Cells(.Range("B10000").End(3).Row + 1, 2).Value = unknown 

.Cells(.Range("C10000").End(3).Row + 1, 3).Value = Format((known/(known + unknown)) * 100, "%##.0") 

.Cells(.Range("D10000").End(3).Row + 1, 4).Value = Now 

End With 

End Sub 

私は乱数生成をうまくできないと思っていましたが、単語の順序をシャッフルできます。それをしてもいいですか?私は革新的なソリューションを提供しています。

答えて

2

Rnd()を呼び出す前にRandomizeステートメントを試してみることができます。それはジェネレータのための新しい種を与え、異なる数を得るのを助けるかもしれません。

+0

whileループでwhileループを使用する必要がありますか? –

+0

@alisrn私はそれをループに入れます。ありがとう。 –

+0

@Egan Wolf –

1

Egan Wolfが述べたように、あなたはランダム化を使用する必要があります。

VBAのジェネレータは高い統計品質ではありませんが、ほとんどの場合、トリックを行います。低矛盾シーケンスをコード化し、より良い品質のランダム変数を得るためにそれらをrandomize >> rndでシードすることができます。