返回列表 上一主題 發帖

如何透過VBA隨機"萬中取一"(但不能重複),抽完一萬次

如何透過VBA隨機"萬中取一"(但不能重複),抽完一萬次

如題,小弟用EXCEL的函數寫得出來
但後來發現EXCEL函數太多了(畢竟一萬個儲存格)
速度會變成慢到不行

所以假設D1:D10000都是不同的值
要如何每次都是隨機在這一萬格裡取一個值
連續執行一萬次
但都不能重複
直到最後一個值被取完結束呢?

PS:取完的同時清除記憶體,因為下次還要繼續執行同樣的程式,避免記憶體不足
不好意思,麻煩各位先進了...
PKKO

感謝大大,小弟將程式改編,已經可以正常使用,非常感激^_^
PKKO

TOP

回復 3# PKKO


    因為我在公司不能上傳附件,小弟附上程式碼以及公式
    因為vba還不熟悉的關係,配合函數使用= =請別見怪

1.先在b11的位置輸入=IFERROR(VLOOKUP(B10,F:F,1,FALSE),"NO")
2.將data放置在d欄
3.執行巨集
  1. Sub test()
  2.    
  3. Application.ScreenUpdating = False
  4.     Dim x As Long
  5.     Dim y As Long
  6.     Columns("F:F").ClearContents
  7.     x = WorksheetFunction.CountA(Range("d:d"))
  8.     i = 1
  9. Do While i <= x
  10.         Randomize  ' 對亂數產生器做初始化的動作。
  11.         y = Int((x - 1 + 1) * Rnd + 1) '亂數號碼
  12.         Cells(10, 2).Value = Cells(y, 4).Value
  13.     If Cells(11, 2).Value = "NO" Then           '如果重複則重新跑回圈(i部會+1)
  14.         Cells(i, 6).Value = Cells(10, 2).Value  '如果沒有重複則將DATA放在F欄
  15.         i = i + 1
  16.     End If
  17. Loop   
  18. End Sub
複製代碼
PKKO

TOP

回復 9# stillfish00


    大大太厲害了,我看了滿久的還是看不是很懂,為何他不會重複,以及RESIZE的方法是如何應用的

可以再請教您一下:

若是A~C欄都各有一百格資料

我想要進行排列組合,也就是A1 & B1 & C1 然後A2 & B1 & C1 以此類推,每個組合都要有也就是100*100*100=100萬的組合
如何跑最快,我寫的程式跑得有點久...
PKKO

TOP

感謝各位大大,時間上真的快多了
看來我得先多學習一下陣列的使用方式
感激不盡!!!
PKKO

TOP

回復 15# toromru


ar = [D1:D10000].Value
如果純粹是這行,有很多方式
'自動選擇到最下面一列
AR=RANGE("d1:d" & [D65536].END(XLUP).ROW).VALUE
'輸入方式
X1=INPUTBOX("請輸入d欄數字")
AR=RANGE("d1:d" & X1 ).VALUE
'某個位置或是某個變數假設是[A2]
AR=RANGE("d1:d" & [A2] ).VALUE

'這幾個方法都因該要設定偵錯的方式,避免沒有數字、d欄沒有值、[A2]為空等問題~
PKKO

TOP

        靜思自在 : 欣賞別人就是莊嚴自己。
返回列表 上一主題