- 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)
- 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)
- 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
复制代码 |