|
楼主 |
发表于 2021-12-3 08:52
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
案例解析,我就以这个朋友的贴做案例
excel用VBA按自定义排序
如图将左边的四个表格标题是乱的,对表格排序,使四个表格的标题顺序对应
解题分析:
1)如果四个表数据整体排序列那么肯定不会的到结果,所以需要将四个表分开处理
这时就应该想到分组
2)分组有很多方法,自定义分组,查找分组,类别分组,条件分组,数量分组,上下不同分组
忘记的可以翻回去看看,自定义应该是最后才考虑的,因为需要回调增加代码量,
根据分析,只要找到标题行就可以可以确定分组位置了,所以我选择查找分组,
代码:da(Range([A1], [D65536].End(3))).按查找内容分组(Array("姓名", "性别", "部门", "次数"), 1)
先写入数据,然后按查找内容分组,只要找到标题那些关键字,就进行分组,
3)分组后,组里每个单元就是单独的表格了,这样对单元进行排序,不会影响其他单元
4)根据标题排序,可以想到我前面说的辅助方法<根据标题返回序号>这个方法就可以返回标题对应的序号
再使用<转换列>方法就可以转换列的顺序,忘的可以回顾70楼看看根据标题返回序号
注意的是,对组的每个单元操作肯定是要遍历他,所以使用遍历组方法,先遍历,在遍历组的回调函数进行单元操作
代码: Call da(Range([A1], [D65536].End(3))).按查找内容分组(Array("姓名", "性别", "部门", "次数"), 1).遍历组(AddressOf 标题排序, 1)
回调函数:
Private Function 标题排序(da As DataAutomation, 计数 As Long, 层数 As Long, key As String) As Boolean
'取出第一行标题数组
arr = da.取整行(1).取出数组
'用转换列对表格排序
Call da.转换列(da.根据标题返回序号(arr, Array("姓名", "性别", "部门", "次数")))
End Function
5)操作后每个单元的顺序都一致了,这是就可以把单元数据拼接会来,用合并组方法,合并后写回单元格
Call da(Range([A1], [D65536].End(3))).按查找内容分组(Array("姓名", "性别", "部门", "次数"), 1).遍历组(AddressOf 标题排序, 1)
Call da.合并组(1).写入单元格([G1])
6)分析完成代码截图如下
有些方法为了让你们看的清晰的写了两行,实际可以精简成7行
如果Sub,Function,Dim这些语句忽略不计,可以看出真正实现功能的只需要写两行代码就完成了
演示文件:
excel用VBA按自定义排序.rar
(245.45 KB, 下载次数: 27)
|
|