level 1
jjqadd
楼主
按以下代码能输出比如6个数的全组合降序格式,但是脚标不对,请高手帮忙改改,多谢!需求如下图:

Private Sub f(m As Integer, p As Long) '自定义过程求阶乘
Dim i As Integer
p = 1
For i = 1 To m '求m的阶乘
p = p * i
Next i
End Sub
Private Sub Command1_Click() '求组合
Dim m As Integer
Dim n As Integer
Dim c As Long
Dim f1 As Long
Dim j, k, g, h, l, y, h1 As Integer
Dim a(1 To 1000) As String, b(1 To 1000) As String
Set xlApp = CreateObject("ket.Application")
'If Dir(App.Path & "\" & "excel.bz") = "" Then '判断EXCEL是否打开
Set xlApp = CreateObject("Excel.Application") '创建EXCEL应用类
xlApp.Visible = True '显示WPS界面
Set xlBook = xlApp.Workbooks.Open(App.Path & "\" & "排列组合.xls") '打开EXCEL工作簿
Set xlsheet = xlBook.Worksheets(1) '打开EXCEL工作表
m = 6 '取C(m,n)值
g = 0
l = m
y = 0
For n = 1 To 6 '有多少个数参与组合,n的最大值为6
Call f(m, f1) '调用子过程求m的阶乘
c = f1 '结果赋给c
Call f(n, f1) '求n的阶乘
c = c / f1 '结果赋给c
Call f(m - n, f1) '求m-n的阶乘
c = c / f1 '组合数结果赋给c(6,1)=6,c(6,2)=15,c(6,3)=20,c(6,4)=15,c(6,5)=6,c(6,6)=1
If n > 1 Then
c = g + c
End If
For j = g + 1 To c 'g为前一个组合的数量,c为当前n的最大组合数即:行数,j为行数
For k = 1 To n 'k为列数,n是几就是几列
For h = l To n Step -1
For y = n To 1 Step -1
If y = c Then
a(h) = "a" & m
End If
Next y
a(h) = "a" & h
Exit For
Next h
If h <= 0 Then
h = m
l = m
End If
xlsheet.Cells(j, k) = a(h) '输出值
l = l - 1
Next k
Next j
g = j - 1
Next n
End Sub
2023年05月21日 03点05分
1

Private Sub f(m As Integer, p As Long) '自定义过程求阶乘Dim i As Integer
p = 1
For i = 1 To m '求m的阶乘
p = p * i
Next i
End Sub
Private Sub Command1_Click() '求组合
Dim m As Integer
Dim n As Integer
Dim c As Long
Dim f1 As Long
Dim j, k, g, h, l, y, h1 As Integer
Dim a(1 To 1000) As String, b(1 To 1000) As String
Set xlApp = CreateObject("ket.Application")
'If Dir(App.Path & "\" & "excel.bz") = "" Then '判断EXCEL是否打开
Set xlApp = CreateObject("Excel.Application") '创建EXCEL应用类
xlApp.Visible = True '显示WPS界面
Set xlBook = xlApp.Workbooks.Open(App.Path & "\" & "排列组合.xls") '打开EXCEL工作簿
Set xlsheet = xlBook.Worksheets(1) '打开EXCEL工作表
m = 6 '取C(m,n)值
g = 0
l = m
y = 0
For n = 1 To 6 '有多少个数参与组合,n的最大值为6
Call f(m, f1) '调用子过程求m的阶乘
c = f1 '结果赋给c
Call f(n, f1) '求n的阶乘
c = c / f1 '结果赋给c
Call f(m - n, f1) '求m-n的阶乘
c = c / f1 '组合数结果赋给c(6,1)=6,c(6,2)=15,c(6,3)=20,c(6,4)=15,c(6,5)=6,c(6,6)=1
If n > 1 Then
c = g + c
End If
For j = g + 1 To c 'g为前一个组合的数量,c为当前n的最大组合数即:行数,j为行数
For k = 1 To n 'k为列数,n是几就是几列
For h = l To n Step -1
For y = n To 1 Step -1
If y = c Then
a(h) = "a" & m
End If
Next y
a(h) = "a" & h
Exit For
Next h
If h <= 0 Then
h = m
l = m
End If
xlsheet.Cells(j, k) = a(h) '输出值
l = l - 1
Next k
Next j
g = j - 1
Next n
End Sub