|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
字典记录、递归全组合计算。
- Dim ar, dic, n&, i2&
- Sub test() 'by kagawa 2016/4/1
- Dim i&, m&, t$, tms#
- tms = Timer
-
- Set dic = CreateObject("Scripting.Dictionary") '设置字典记录各种组合
-
- m = [a1].End(4).Row '检查数据行数
- [a1].Resize(m, 2).Sort [a2], 1, [b2], , 1, , , 1 '按单号、产品排序
- ar = [a2].Resize(m, 2) '排序后的数据读入数组ar
- For i = 1 To m '遍历数据各行
- t = ar(i, 1)
- For i2 = i + 1 To m '二次循环
- If ar(i2, 1) <> t Then Exit For '检查到单号不同时停止
- Next
- n = i2 - i '本单号产品个数n
- Call dgQZH("", i - 1, 0) '调用全组合递归算法
- i = i2 - 1 '本单处理完成后跳到下一单
- Next
-
- '字典统计完成后,整理数据
- ReDim br(1 To dic.Count, 1 To 2) '定义存放结果的数组br
- i2 = 0 '记录位置初始化
- kr = dic.keys '读取字典keys
- tr = dic.items '读取字典items
- For i = 0 To UBound(kr) '遍历
- If InStr(kr(i), ",") Then If tr(i) > 1 Then i2 = i2 + 1: br(i2, 1) = kr(i): br(i2, 2) = tr(i)
- '检查2个以上产品的组合、且重复数>1 然后输出
- Next
-
- [e1].CurrentRegion.Offset(1) = "" '清空输出区域
- [e2].Resize(i2, 2) = br '结果写入工作表
- MsgBox Format(Timer - tms, "0.000s ") & i2
- End Sub
- Sub dgQZH(s$, i1&, t&) '递归全组合算法、解释略
- Dim i&, s2$
- s2 = Mid(s, 2): dic(s2) = dic(s2) + 1
- For i = i1 + 1 To i2 - 1
- Call dgQZH(s & "," & ar(i, 2), i, t + 1)
- Next
- End Sub
复制代码 |
评分
-
1
查看全部评分
-
|