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
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
感谢 happy_sea(开心海) 老师最后一个问题;既然 ListBox 控件不能显示这么多; 那么 Microsoft Forms 2.0 Object Library 里的 ListBox 是否能够显示?在次感谢!!!
应该可以吧。我也不大清楚Microsoft Forms 2.0 Object Library 里的 ListBox可以最大容纳多少,只好用笨方法写了一个测试程序跑了一下,在跑到160000的时候我终止了,1107568应该没问题。
感谢 happy_sea(开心海) 老师; 我用 Forms 2.0 里的 ListBox 跑了一下,不行;超出了最大范围。 看来得考虑其他的办法了。在次感谢!!!!!
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 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(开心海) 老师不吝赐教啊;
非常感谢!!!
代码稍加修改后可以按楼主要求的格式来显示,但是不能放在普通的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
那么 Microsoft Forms 2.0 Object Library 里的 ListBox 是否能够显示?在次感谢!!!
我用 Forms 2.0 里的 ListBox 跑了一下,不行;超出了最大范围。
看来得考虑其他的办法了。在次感谢!!!!!