来一个m选32的多层循环组合算法代码:- Sub AutoCombin_Arr_32()
- Dim k&, m&, n&, tms#
- tms = Timer
- n = 32: m = [a1].End(4).Row: If m < n Then Exit Sub
- k = WorksheetFunction.Combin(m, n)
- If k < Cells.Rows.Count Then ReDim jg(1 To k, 0 To n)
- k = 0: sj = [a1].Resize(m)
- Dim i1&, i2&, i3&, i4&, i5&, i6&, i7&, i8&, i9&, i10&, i11&, i12&, i13&, i14&, i15&, i16&, i17&, i18&, i19&, i20&, i21&, i22&, i23&, i24&, i25&, i26&, i27&, i28&, i29&, i30&, i31&, i32&
- For i1 = 1 To m - 31
- For i2 = i1 + 1 To m - 30
- For i3 = i2 + 1 To m - 29
- For i4 = i3 + 1 To m - 28
- For i5 = i4 + 1 To m - 27
- For i6 = i5 + 1 To m - 26
- For i7 = i6 + 1 To m - 25
- For i8 = i7 + 1 To m - 24
- For i9 = i8 + 1 To m - 23
- For i10 = i9 + 1 To m - 22
- For i11 = i10 + 1 To m - 21
- For i12 = i11 + 1 To m - 20
- For i13 = i12 + 1 To m - 19
- For i14 = i13 + 1 To m - 18
- For i15 = i14 + 1 To m - 17
- For i16 = i15 + 1 To m - 16
- For i17 = i16 + 1 To m - 15
- For i18 = i17 + 1 To m - 14
- For i19 = i18 + 1 To m - 13
- For i20 = i19 + 1 To m - 12
- For i21 = i20 + 1 To m - 11
- For i22 = i21 + 1 To m - 10
- For i23 = i22 + 1 To m - 9
- For i24 = i23 + 1 To m - 8
- For i25 = i24 + 1 To m - 7
- For i26 = i25 + 1 To m - 6
- For i27 = i26 + 1 To m - 5
- For i28 = i27 + 1 To m - 4
- For i29 = i28 + 1 To m - 3
- For i30 = i29 + 1 To m - 2
- For i31 = i30 + 1 To m - 1
- For i32 = i31 + 1 To m - 0
- k = k + 1
- ' jg(k, 0) = i1 & "," & i2 & "," & i3 & "," & i4 & "," & i5 & "," & i6 & "," & i7 & "," & i8 & "," & i9 & "," & i10 & "," & i11 & "," & i12 & "," & i13 & "," & i14 & "," & i15 & "," & i16 & "," & i17 & "," & i18 & "," & i19 & "," & i20 & "," & i21 & "," & i22 & "," & i23 & "," & i24 & "," & i25 & "," & i26 & "," & i27 & "," & i28 & "," & i29 & "," & i30 & "," & i31 & "," & i32
- ' jg(k, 1) = sj(i1, 1) : jg(k, 2) = sj(i2, 1) : jg(k, 3) = sj(i3, 1) : jg(k, 4) = sj(i4, 1) : jg(k, 5) = sj(i5, 1) : jg(k, 6) = sj(i6, 1) : jg(k, 7) = sj(i7, 1) : jg(k, 8) = sj(i8, 1) : jg(k, 9) = sj(i9, 1) : jg(k, 10) = sj(i10, 1) : jg(k, 11) = sj(i11, 1) : jg(k, 12) = sj(i12, 1) : jg(k, 13) = sj(i13, 1) : jg(k, 14) = sj(i14, 1) : jg(k, 15) = sj(i15, 1) : jg(k, 16) = sj(i16, 1) : jg(k, 17) = sj(i17, 1) : jg(k, 18) = sj(i18, 1) : jg(k, 19) = sj(i19, 1) : jg(k, 20) = sj(i20, 1) : jg(k, 21) = sj(i21, 1) : jg(k, 22) = sj(i22, 1) : jg(k, 23) = sj(i23, 1) : jg(k, 24) = sj(i24, 1) : jg(k, 25) = sj(i25, 1) : jg(k, 26) = sj(i26, 1) : jg(k, 27) = sj(i27, 1) : jg(k, 28) = sj(i28, 1) : jg(k, 29) = sj(i29, 1) : jg(k, 30) = sj(i30, 1) : jg(k, 31) = sj(i31, 1) : jg(k, 32) = sj(i32, 1)
- ' jg(k, 0) = sj(i1, 1) & sj(i2, 1) & sj(i3, 1) & sj(i4, 1) & sj(i5, 1) & sj(i6, 1) & sj(i7, 1) & sj(i8, 1) & sj(i9, 1) & sj(i10, 1) & sj(i11, 1) & sj(i12, 1) & sj(i13, 1) & sj(i14, 1) & sj(i15, 1) & sj(i16, 1) & sj(i17, 1) & sj(i18, 1) & sj(i19, 1) & sj(i20, 1) & sj(i21, 1) & sj(i22, 1) & sj(i23, 1) & sj(i24, 1) & sj(i25, 1) & sj(i26, 1) & sj(i27, 1) & sj(i28, 1) & sj(i29, 1) & sj(i30, 1) & sj(i31, 1) & sj(i32, 1)
- ' jg(k, 1) = i1 : jg(k, 2) = i2 : jg(k, 3) = i3 : jg(k, 4) = i4 : jg(k, 5) = i5 : jg(k, 6) = i6 : jg(k, 7) = i7 : jg(k, 8) = i8 : jg(k, 9) = i9 : jg(k, 10) = i10 : jg(k, 11) = i11 : jg(k, 12) = i12 : jg(k, 13) = i13 : jg(k, 14) = i14 : jg(k, 15) = i15 : jg(k, 16) = i16 : jg(k, 17) = i17 : jg(k, 18) = i18 : jg(k, 19) = i19 : jg(k, 20) = i20 : jg(k, 21) = i21 : jg(k, 22) = i22 : jg(k, 23) = i23 : jg(k, 24) = i24 : jg(k, 25) = i25 : jg(k, 26) = i26 : jg(k, 27) = i27 : jg(k, 28) = i28 : jg(k, 29) = i29 : jg(k, 30) = i30 : jg(k, 31) = i31 : jg(k, 32) = i32
- Next i32, i31, i30, i29, i28, i27, i26, i25, i24, i23, i22, i21, i20, i19, i18, i17, i16, i15, i14, i13, i12, i11, i10, i9, i8, i7, i6, i5, i4, i3, i2, i1
- If k > Cells.Rows.Count Then MsgBox Format(Timer - tms, "0.000s ") & k: Exit Sub
- [d1].CurrentRegion = "": [d1].Resize(k, n + 1) = jg
- [d1].Resize(, n + 1).EntireColumn.AutoFit
- MsgBox Format(Timer - tms, "0.000s ") & k
- End Sub
复制代码 如果这些代码自己写……可能会疯掉吧。而且容易出错。
|