Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4159|回复: 11

[已解决]超级难题-----怎样的代码才能实现分解并统计出现次数?

[复制链接]
发表于 2014-3-1 23:16 | 显示全部楼层 |阅读模式
本帖最后由 要学习vba 于 2014-3-3 12:58 编辑

如何写VBA代码 实现分解并统计出现次数?

附件下载: 14-02-26.rar (27.83 KB, 下载次数: 13)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2014-3-2 09:33 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2014-3-2 09:34 | 显示全部楼层
回复

使用道具 举报

发表于 2014-3-2 14:20 | 显示全部楼层
就是写出B列1到5位的排列,再对相同排列做次数统计?
回复

使用道具 举报

 楼主| 发表于 2014-3-2 15:01 | 显示全部楼层
pengyx 发表于 2014-3-2 14:20
就是写出B列1到5位的排列,再对相同排列做次数统计?

是的....老师

最终结果  写入 根目录下的  分解.txt
回复

使用道具 举报

发表于 2014-3-2 18:35 | 显示全部楼层
本帖最后由 香川群子 于 2014-3-2 18:36 编辑

你的问题是: 1-11的各种1-5的组合,共有1023个。

需要统计:
1. 把 B列的所有5个数组合重新分解为1-5的31个组合
2. 统计各种组合的出现次数


…………
问题并不算很难。

B列组合,应该有462种可能。Combin(11,5)=462
回复

使用道具 举报

发表于 2014-3-2 19:57 | 显示全部楼层    本楼为最佳答案   
本帖最后由 香川群子 于 2014-3-2 20:12 编辑

唯一的要求:B列中 5个数的组合 必须从小到大排序。

我的代码中,生成全组合部分的代码是最高效的。大家学习一下。
  1. Sub kagawa()
  2.     Dim i&, j&, k&, l&, m&, n&, r&, s$, t$, tms#
  3.     tms = Timer
  4.    
  5.     m = 11
  6.     ReDim a(2 ^ m - 1, 2): k = 0
  7.     For i = 1 To m
  8.         k = k + 1: a(k, 0) = 1: a(k, 1) = Right("0" & i, 2)
  9.         For j = 1 To k - 1
  10.             k = k + 1: a(k, 0) = a(j, 0) + 1: a(k, 1) = a(j, 1) & " " & Right("0" & i, 2)
  11.         Next
  12.     Next
  13.    
  14.     Set d = CreateObject("Scripting.Dictionary")
  15.     For k = 1 To 2 ^ m - 1
  16.         d(a(k, 1)) = k
  17.     Next
  18.    
  19.     n = 5
  20.     arr = [b1].CurrentRegion
  21.     For l = 2 To UBound(arr)
  22.         trr = Split(" " & arr(l, 1))
  23.         ReDim b$(2 ^ n - 1): k = 0
  24.         For i = 1 To n
  25.             t = trr(i)
  26.             k = k + 1: b(k) = t: r = d(t): a(r, 2) = a(r, 2) + 1
  27.             For j = 1 To k - 1
  28.                 k = k + 1: s = b(j) & " " & t: b(k) = s: r = d(s): a(r, 2) = a(r, 2) + 1
  29.             Next
  30.         Next
  31.     Next
  32.    
  33.     a(0, 0) = "个数": a(0, 1) = "分解组合": a(0, 2) = "次数"
  34.     [e1].Resize(2 ^ m).NumberFormat = "@"
  35.     [d1].Resize(2 ^ m, 3) = a
  36.     [d1].Resize(2 ^ m, 3).Sort [f2], 2, [d2], , 1, [e2], 1, 1
  37.     [f1].End(4).Offset(1, -2).Resize(2 ^ m, 3) = ""
  38.     MsgBox "耗时: " & Format(Timer - tms, "0.000s") & vbCr & "分解组合结果: " & [f1].End(4).Row - 1
  39. End Sub
复制代码

1-11中5数组合的组合分解统计.rar

29.14 KB, 下载次数: 22

评分

参与人数 2 +6 金币 +20 收起 理由
fffox + 6 很给力!
顺⑦.zì繎。 + 20 学习一下。

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-3-2 22:42 | 显示全部楼层
香川群子 发表于 2014-3-2 19:57
唯一的要求:B列中 5个数的组合 必须从小到大排序。

我的代码中,生成全组合部分的代码是最高效的。大家 ...

先 谢谢老师...

一会 再测试...
回复

使用道具 举报

 楼主| 发表于 2014-3-2 23:20 | 显示全部楼层
很好很强大.

能直接写入 分解.txt 就更好了
回复

使用道具 举报

 楼主| 发表于 2014-3-2 23:26 | 显示全部楼层
香川群子 发表于 2014-3-2 19:57
唯一的要求:B列中 5个数的组合 必须从小到大排序。

我的代码中,生成全组合部分的代码是最高效的。大家 ...

老师好..

我这样测试的..

当我改变 数字的顺序,运行代码统计是..无法得到正确结果哦.

QQ图片20140302232521.jpg

1-11中5数组合的组合分解统计-2.rar

15.59 KB, 下载次数: 2

评分

参与人数 1 -1 收起 理由
香川群子 -1 唯一的要求:B列中 5个数的组合 必须从小到.

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-18 10:53 , Processed in 0.432786 second(s), 18 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表