ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何自动生成所有排列组合?

如何自动生成所有排列组合?

作者:绿色风 分类: 时间:2022-08-17 浏览:131
楼主
willin2000
Q:如何自动生成所有排列组合?
A:下列代码列出在1-7中取5个数的所有组合:
  1. Sub ListComb5of7()
  2. Dim II%, I%, J%, K%, L%, M%
  3. Dim Srt1$, Srt2$, Srt3$, Srt4$, Srt5$
  4. Dim TStr1$, TStr2$, TStr3$, TStr4$
  5. Const FullStr = "1234567"
  6. II = 0
  7. For I = 1 To 7
  8.     Srt1 = Mid(FullStr, I, 1)
  9.     TStr1 = Replace(FullStr, Srt1, "")
  10.     For J = 1 To 6
  11.         Srt2 = Mid(TStr1, J, 1)
  12.         TStr2 = Replace(TStr1, Srt2, "")
  13.         For K = 1 To 5
  14.             Srt3 = Mid(TStr2, K, 1)
  15.             TStr3 = Replace(TStr2, Srt3, "")
  16.             For L = 1 To 4
  17.                 Srt4 = Mid(TStr3, L, 1)
  18.                 TStr4 = Replace(TStr3, Srt4, "")
  19.                 For M = 1 To 3
  20.                     Srt5 = Mid(TStr3, M, 1)
  21.                     II = II + 1
  22.                     Cells(II, 1) = Srt1 & Srt2 & Srt3 & Srt4 & Srt5
  23.                 Next
  24.             Next
  25.         Next
  26.     Next
  27. Next
  28. End Sub
2楼
春雷
正在学习VBA,就是代码不易懂呀!
3楼
gvntw
谢谢 Willin2000 兄的分享!
代码优化如下,速度将提高10倍,数量大时更显优势。
  1. Sub ListComb5of7()
  2. Dim II%, I%, J%, K%, L%, M%
  3. Dim Srt1$, Srt2$, Srt3$, Srt4$, Srt5$
  4. Dim TStr1$, TStr2$, TStr3$, TStr4$
  5. Dim t, arr()
  6. Const FullStr = "1234567"
  7. t = Timer
  8. II = 0
  9. For I = 1 To 7
  10.     Srt1 = Mid(FullStr, I, 1)
  11.     TStr1 = Replace(FullStr, Srt1, "")
  12.     For J = 1 To 6
  13.         Srt2 = Mid(TStr1, J, 1)
  14.         TStr2 = Replace(TStr1, Srt2, "")
  15.         For K = 1 To 5
  16.             Srt3 = Mid(TStr2, K, 1)
  17.             TStr3 = Replace(TStr2, Srt3, "")
  18.             For L = 1 To 4
  19.                 Srt4 = Mid(TStr3, L, 1)
  20.                 TStr4 = Replace(TStr3, Srt4, "")
  21.                 For M = 1 To 3
  22.                     Srt5 = Mid(TStr3, M, 1)
  23.                     II = II + 1
  24.                     ReDim Preserve arr(1 To II)
  25.                     arr(II) = Srt1 & Srt2 & Srt3 & Srt4 & Srt5
  26.                 Next
  27.             Next
  28.         Next
  29.     Next
  30. Next
  31. Range("A1:A" & II) = Application.Transpose(arr)
  32. MsgBox Timer - t
  33. End Sub
4楼
刘志文
学习一下!!
5楼
happybird117
在1-7中取5个数,这5个数可以重复吗?
6楼
我佛慈悲不
好人
7楼
Silent
学习下,支持
8楼
ifljh
这个没有解释看不懂。

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap