作者:绿色风
分类:
时间:2022-08-17
浏览:131
楼主 xyh9999 |
Q:如何求出n个数据的全排列实体? A:利用VBA代码如下
Lqc全排列实例.rar
- Public 存放输出 As Collection
- Sub 测试1() '3个字符的全排列
- Lqc_全排列 3, Sheet1.Name
- End Sub
- Sub 测试2() '4个字符的全排列
- Lqc_全排列 4, Sheet1.Name
- End Sub
- Sub 测试3() '5个字符的全排列
- Lqc_全排列 5, Sheet1.Name
- End Sub
- Sub Lqc_全排列(n As Integer, cSheet As String) '列出n个字符的全排列,结果放置于cSheet表中
- Sheets(cSheet).Cells.ClearContents
- Dim a() As String
- Dim result() As String
- Dim kk As Long
- Dim i As Long
- If n > 26 Then
- MsgBox "字符数太多,请不要超过26!"
- Exit Sub
- End If
- Set 存放输出 = New Collection
- ReDim a(1 To n)
- ReDim result(1 To n)
- For i = 1 To n
- a(i) = Chr(i + 64)
- Next i
- Lqc_全排列核心 result, a
- kk = 存放输出.Count
- For i = 1 To kk
- Sheets(cSheet).Cells(IIf(i Mod 60000 = 0, 60000, i Mod 60000), (i - 0.6) \ 60000 + 1) = 存放输出(i) '如果不是在Excel,可以输出到需要的地方
- Next
- End Sub
- Sub Lqc_全排列核心(ByRef 结果() As String, ByRef 需排列字符() As String) '结果:排列结果 需排列字符:尚需进行排列的字符
- Dim i As Long, j As Long
- Dim 剩下字符() As String
- Dim temp As String
- j = UBound(需排列字符) - LBound(需排列字符) + 1
- If j > 1 Then
- ReDim 剩下字符(1 To j - 1)
- For i = 1 To j - 1
- 剩下字符(i) = 需排列字符(i + 1)
- Next
- j = UBound(结果)
- For i = 1 To j
- If 结果(i) = "" Then
- 结果(i) = 需排列字符(1)
- Lqc_全排列核心 结果, 剩下字符
- 结果(i) = ""
- End If
- Next
-
- Else
- For j = 1 To UBound(结果)
- If 结果(j) = "" Then
- 结果(j) = 需排列字符(1)
- temp = ""
- For i = 1 To UBound(结果)
- temp = temp & 结果(i)
- Next
- 存放输出.Add temp
- 结果(j) = ""
- Exit Sub
- End If
- Next
- End If
- End Sub
|
2楼 学习vba |
很好,,,谢谢。 |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一