網路上看到高手寫下此程式碼:
https://www.jobforum.tw/discussTopic.asp?cat=skill&id=32703
在 c1 欄位輸入函式 =50*RAND()
在 D1 輸入 =COUNT(A:A)
進入VBA 創立一個 巨集
把以下資料貼上 執行巨集 就 OK了(邏輯 每次產生一個亂數數字 比對是否重複 重複則產生新數字)
For i = 1 To 50
10
Cells(i, 1).Value = Int(Cells(1, 3).Value)
If i >= 2 Then
cnt = Cells(1, 4).Value
For j = 1 To cnt - 1
val1 = Cells(cnt, 1).Value
val2 = Cells(j, 1).Value
If val1 = val2 Then GoTo 10
Next j
End If
Next i
可是實際操作時在(A:A)的欄位上還是會出現重複的數字,如何修改才真正不會出現重複的數字呢?
Sub bag()
Dim mybag As New Collection ' 宣告一個放球的袋子,類型是Collection集合
For i = 1 To 49
mybag.Add (i) ' 依序放入1到49的號碼球
Next
c = 1 ' 我要顯示的列碼,從第1列開始
While mybag.Count > 0 ' 直到mybag裡的球被抽完為止
R = Int(mybag.Count * Rnd()) + 1 ' R 就是包包裡的球數*0~1之間的隨機數,集合跟陣列一樣,元素從1開始
Cells(c, 1).Value = mybag.Item(R) ' 按c值在相對的列上填入球號
mybag.Remove (R) ' 抽到的球就不要放回袋子(集合)裡了,直接拿掉
c = c + 1 ' 加一列,下一球就從下一列開始填格子
Wend
' 如果你想玩樂透彩,就把while 改成 for x = 1 to 6只抽6次即可
End Sub
我實測過沒有重複啊...