用VBA編程可以實現。其方法有多種,壹是字典功能,凡是重復的無法插入字典。其缺陷是程序運行的時間不確定,發生重復就繼續生成隨機數,直到沒有重復為止。另壹種是第壹次生成1~100的隨機數,將得到的隨機數取走;再生成1~99的隨機數,。。。這樣循環到1,就完成了題目要求。
我們采用第二種方法做成如下代碼:
Sub 隨機數()
Dim mYarr(1 To 100, 1 To 2)
Dim Tarr(1 To 100, 1 To 2) '存放隨機生成的數
Dim I, J, K, L As Integer
'讀取原始數據
I = 2
Do While Cells(I, 1) > 0
mYarr(I - 1, 1) = Cells(I, 1)
mYarr(I - 1, 2) = Cells(I, 2)
I = I + 1
Loop
I = I - 2
L = 1
For K = I To 1 Step -1
Randomize
J = Int((Rnd * K) + 1)
Tarr(L, 1) = L
Tarr(L, 2) = mYarr(J, 2)
'將數值自J+1個開始向上移動壹格
For M = J To I - 1
mYarr(M, 1) = mYarr(M + 1, 1)
mYarr(M, 2) = mYarr(M + 1, 2)
Next M
L = L + 1
Next K
'輸出隨機整數
For J = 1 To I
Cells(J + 1, 5) = Tarr(J, 1) Cells(J + 1, 6) = Tarr(J, 2)Next J
End Sub
該宏
第壹步:將第1、2列數據讀入MYARR數組
第二步:隨機生成隨機數,將該隨機數對應的數值移入TARR數組(目標數組)
第三步:將目標數組TARR數值輸出到第5、6列。運行結果如圖:
可以看到G列檢查是否有重復列,結果是沒有。