2012-11-05 66 views
2

我現在依靠這個宏來產生隨機序列,而我只是想檢查我得到的序列確實是隨機的(當然,計算機可以隨機做的最好)。Excel VBA。這個宏是否會產生隨機排列?

Sub Random() 
For x = 1 To Selection.Rows.Count 
    r = Int(Rnd(1) * (Selection.Rows.Count) + 1) 
    For z = 1 To Selection.Columns.Count 
     y = Selection.Cells(x, z).Formula 
     Selection.Cells(x, z).Formula = Selection.Cells(r, z).Formula 
     Selection.Cells(r, z).Formula = y 
    Next z 
Next x 
End Sub 

對不起,我很需要安心的行人問題。

非常感謝

+0

A面查詢 - 什麼是你的選擇?我看不出你是怎麼做的?如果速度是一個問題,一個變體數組會比你的範圍寫更快 – brettdj

回答

3

添加此行的For線之後

Randomize Timer 

這將確保你不會再得到相同的隨機數,因爲它使用的計時器作爲隨機性種子產生的數字。

你的代碼應該是

Sub Random() 
For x = 1 To Selection.Rows.Count 
    Randomize Timer 
    r = Int(Rnd(1) * (Selection.Rows.Count) + 1) 
    For z = 1 To Selection.Columns.Count 

     y = Selection.Cells(x, z).Formula 
     Selection.Cells(x, z).Formula = Selection.Cells(r, z).Formula 
     Selection.Cells(r, z).Formula = y 
    Next z 
Next x 
End Sub 
+0

同意使用Randomize來改變種子。雖然從xl-2010 Help'Randomize使用Timer函數的返回值作爲新的種子值 – brettdj