|
随机撞大运
- Sub tj()
- cs = 200
- ReDim brr(1 To cs)
- arr = Range("a2:f" & [a65536].End(3).Row) '源数据
- arr1 = arr '源数据
- n = UBound(arr)
- Set d = CreateObject("scripting.dictionary")
- 10:
- p = Int(Rnd * n + 1) '随机一行
- x = x & "," & arr1(p, 1) '记录行入x
- For j = 2 To UBound(arr1, 2)
- d(arr1(p, j)) = ""
- Next
- s = d.Count '至此行数字个数
- If s >= 11 Then '至此行数字个数>=11的
- d.RemoveAll '恢复d
- n = UBound(arr) '恢复n
- arr1 = arr '恢复源数据
- If s = 11 Then '=11的,存入brr
- k = k + 1
- brr(k) = Mid(x, 2)
- If k = cs Then x = "": GoTo 100
- End If
- x = ""
- End If
-
- For j = 1 To UBound(arr1, 2) '第n行代替第p行
- arr1(p, j) = arr1(n, j)
- Next
- n = n - 1
- GoTo 10
-
- 100: '显示结果
- For i = 1 To k '找出次数最多的brr(p),like '60,11,24,46
- xrr = Split(brr(i), ",")
- If nmax < UBound(xrr) Then
- nmax = UBound(xrr)
- p = i
- End If
- Next
-
- d.RemoveAll
- ReDim crr(1 To nmax + 1, 1 To 6)
- xrr = Split(brr(p), ",") '60,11,24,46
- For i = 0 To UBound(xrr)
- p = xrr(i)
- For j = 1 To UBound(arr, 2)
- crr(i + 1, j) = arr(p, j)
- If j > 1 Then d(arr(p, j)) = ""
- Next
- Next
- [m21].Resize(100, 100) = ""
- [m22].Resize(i, 6) = crr
- [m21].Resize(, d.Count) = d.keys
- [m21].Resize(, d.Count).Sort Key1:=Range("M21:W21"), Orientation:=xlLeftToRight
- End Sub
-
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
评分
-
查看全部评分
|