|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 香川群子 于 2015-11-27 13:09 编辑
观察楼主数据,应该是符合这个假设的。
如果有别的规则,只要有规律可循,应当也是可以做到的。
…………
写VBA代码反而复杂。
或者,VBA代码也可按照辅助列的规律来做,即生成排序码,然后按照排序码排序。
代码如下:
- Sub test1()
-
- m = [a65536].End(3).Row - 1 '最大行数
- ar = [a2].Resize(m, 3) '读取第2行开始的数据
-
- Set d = CreateObject("Scripting.Dictionary") '建立字典
- For i = 2 To m
- t = ar(i, 1): If Len(t) = 3 Then d(Left(t, 3)) = Format(ar(i, 2), "0000-") & t
- '遍历各行、提取类别码=3位的大类总次数存入字典
- Next
- For i = 2 To m
- ar(i, 3) = d(Left(ar(i, 1), 3)) & Format(ar(i, 2), "-0000")
- '再次遍历各行、由字典提取前3位对应的大类总次数作为前缀加上自身次数成为排序码值
- Next
-
- [a2].Resize(m, 3) = ar '输出结果
- [a2].Resize(m, 3).Sort [c2], 2, , , , , , 1 '按第3列辅助排序码值排序
- [c2].Resize(m) = "" '删去第3列
- End Sub
复制代码
按照yjh_27的提醒,加入了大类码作为相同次数的区分。
|
|