|
VBA彩票选号 循环有点复杂求大侠帮忙 7组数中各选出指定个数,7组中有几组再分几组。M选N+M选N+M1或M2选N+M1或M2或M3选N.....有哪位大侠能搞定不
本帖最后由 香川群子 于 2013-10-7 20:44 编辑
前面部分改成Do循环,效果更好,逻辑性更强一些。 - Dim sj1, sj2, jg(), k&, l&, m&, n&
- Sub Combin_kagawa()
- tms = Timer
- sj = [a1].CurrentRegion.Offset(1)
- ReDim sj2(1 To 1000, 1 To UBound(sj))
- l = 0: i = 0
- Do
- i = i + 1: n = sj(i, 1)
- If n Then
- l = l + 1: k = 0
- Do
- If sj(i, 3) <> "" Then
- ReDim sj1(1 To UBound(sj, 2))
- For j = 1 To UBound(sj, 2)
- If sj(i, j + 2) = "" Then Exit For Else sj1(j) = sj(i, j + 2)
- Next
- m = j - 1
- Call dgZH("", 0, 1)
- End If
- If sj(i + 1, 1) <> "" Then Exit Do Else i = i + 1
- Loop Until i = UBound(sj)
- If k > kk Then kk = k
- End If
- Loop Until i = UBound(sj)
-
- m = kk: n = l: k = 0
- [c1].Offset(UBound(sj) + 3).CurrentRegion = ""
- [c1].Offset(UBound(sj) + 3).Resize(m, n) = sj2
- ReDim jg(60000, 0)
- Call dgMN("", 1)
-
- [a2].Offset(, UBound(sj, 2) + 1).CurrentRegion = ""
- [a2].Offset(, UBound(sj, 2) + 1).Resize(k) = jg
- MsgBox Format(Timer - tms, "0.000s ") & k
- End Sub
- Sub dgZH(r$, i%, t%)
- Dim j%
- For j = i + 1 To m - n + t
- If t < n Then Call dgZH(r & "," & sj1(j), j, t + 1) Else k = k + 1: sj2(k, l) = Mid(r & "," & sj1(j), 2)
- Next
- End Sub
- Sub dgMN(r$, j%)
- Dim i%
- For i = 1 To m
- If sj2(i, j) <> "" Then If j < n Then Call dgMN(r & "," & sj2(i, j), j + 1) Else jg(k, 0) = Mid(r, 2) & "," & sj2(i, j): k = k + 1
- Next
- End Sub
复制代码
|
|