列如;(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33)共 33 个数。现在要求按照每 6 个数一组将这 33 个数的所有的组合的结果都计算出来。
代码是如何写的,有没有很快速的运算代码?
感谢各位老师!!!

解决方案 »

  1.   

    Private Function cmn(ByVal m As Integer, ByVal n As Integer) As String
        Dim a() As String, temp As String, i As Long
        ReDim a(1 To m)
        For i = 1 To m
            a(i) = i
        Next
        If m = 3 Then
            If n = 1 Then cmn = 1 & vbCrLf & 2 & vbCrLf & 3
            If n = 2 Then cmn = "1,2" & vbCrLf & "1,3" & vbCrLf & "2,3"
            If n = 3 Then cmn = "1,2,3"
        ElseIf m > 3 Then
            If n = 1 Then cmn = Join(a, vbCrLf)
            If n = m Then cmn = Join(a, ",")
            If n > 1 And n < m Then
                temp = cmn(m - 1, n - 1)
                temp = Replace(temp, vbCrLf, "," & m & vbCrLf) & "," & m
                cmn = cmn(m - 1, n) & vbCrLf & temp
                Doevents
            End If
        End If
    End FunctionPrivate Sub Command1_Click()
        Debug.Print cmn(33, 6)
    End Sub
      

  2.   

    谢谢 happy_sea(开心海) 老师!!!不过这样不行啊;在最后的一行出现了三个数如下;
    2 6 8 11 13 15
    3 6 8 11 13 15
    4 6 8 11 13 15
    5 6 8************************************************
    另外我是想在 ListBox 里显示出来;
    这样在 ListBox 里无法回车换行,只能搞到一行里去了。
    而且我想在  ListBox 里是这么显示的,如下;
    01 02 03 04 05 06
    01 02 03 04 05 07
    01 02 03 04 05 08
    01 02 03 04 05 09
    01 02 03 04 05 10
    01 02 03 04 05 11
    01 02 03 04 05 12
    .................
    28 29 30 31 32 33
    这样的;
    还请 happy_sea(开心海) 老师不吝赐教啊;
    非常感谢!!!
      

  3.   

    不写到文件里?放到listbox里应该会死机吧,呵呵
      

  4.   

    33选6的组合一共有1107568种,而一个ListBox里只能放32767条。
    代码稍加修改后可以按楼主要求的格式来显示,但是不能放在普通的ListBox里,可以写到文件中,或另找一款控件。
    Private Function cmn(ByVal m As Integer, ByVal n As Integer) As String
        Dim a() As String, temp As String, i As Long
        ReDim a(1 To m)
        For i = 1 To m
            a(i) = Format(i, "00")
        Next
        If m = 3 Then
            If n = 1 Then cmn = "01" & vbCrLf & "02" & vbCrLf & "03"
            If n = 2 Then cmn = "01,02" & vbCrLf & "01,03" & vbCrLf & "02,03"
            If n = 3 Then cmn = "01,02,03"
        ElseIf m > 3 Then
            If n = 1 Then cmn = Join(a, vbCrLf)
            If n = m Then cmn = Join(a, ",")
            If n > 1 And n < m Then
                temp = cmn(m - 1, n - 1)
                temp = Replace(temp, vbCrLf, "," & Format(m, "00") & vbCrLf) & "," & Format(m, "00")
                cmn = cmn(m - 1, n) & vbCrLf & temp
                DoEvents
            End If
        End If
    End FunctionPrivate Sub Command1_Click()
        Dim s As String, p() As String
        s = cmn(33, 6)
        p() = Split(s, vbCrLf)
        Dim l As Long
        For l = 0 To UBound(p)
            p(l) = Replace(p(l), ",", " ")
            Debug.Print p(l)
            DoEvents
        Next l
            
    End Sub
      

  5.   

    感谢 happy_sea(开心海) 老师最后一个问题;既然 ListBox 控件不能显示这么多;
    那么 Microsoft Forms 2.0 Object Library 里的 ListBox 是否能够显示?在次感谢!!!
      

  6.   

    应该可以吧。我也不大清楚Microsoft Forms 2.0 Object Library 里的 ListBox可以最大容纳多少,只好用笨方法写了一个测试程序跑了一下,在跑到160000的时候我终止了,1107568应该没问题。
      

  7.   

    感谢 happy_sea(开心海) 老师;
    我用 Forms 2.0 里的 ListBox 跑了一下,不行;超出了最大范围。
    看来得考虑其他的办法了。在次感谢!!!!!