|
楼主 |
发表于 2015-3-14 18:06
|
显示全部楼层
jpj123 发表于 2015-3-14 14:29
请测试附件。
Sub kagawa_Rnd多列乱序() '香川随机乱序数组洗牌法!
Dim R, brr, m%, crr, L%, a
On Error Resume Next
Randomize
arr = Selection: rw = UBound(arr): cl = UBound(arr, 2)
ReDim brr(1 To Selection.Cells.Count, 1 To 2)'为什么要用2?
For i = 1 To rw
For j = 1 To cl
If arr(i, j) = "" Then
m = m + 1
brr(m, 1) = i: brr(m, 2) = j
End If
Next
Next
For i = 1 To rw
For j = 1 To cl
R = Round(Rnd() * 10000, 0)'用1000与10有什么区别?
i1 = R Mod rw + 1: j1 = R Mod cl + 1
For L = 1 To UBound(brr)
If (i = brr(L, 1) And j = brr(L, 2)) Or (i1 = brr(L, 1) And j1 = brr(L, 2)) Then
a = a + 1
End If
Next
If a < 1 Then
t = arr(i1, j1): arr(i1, j1) = arr(i, j): arr(i, j) = t
End If
a = 0
Next
Next
Selection = arr
End Sub
|
|