关于本站
1、基于Django+Bootstrap开发
2、主要发表本人的技术原创博客
3、本站于 2015-12-01 开始建站
有时候Excel表格很多,需要对表格进行排序。(当然,要是我设计的表。不存在一个文件很多个表的情况)
可以用拖动或者其他方式控制表格的顺序,但比较麻烦。麻烦的时候,就可以用vba写代码完成操作。
1、按Alt + F11,进入vba后台界面
2、右键,工程资源管理器,插入模块(没有工程资源管理器?按快捷键Ctrl + R)
3、在新建的模块中写入如下代码:
Option Explicit '作者:杨仕航' '日期:2016-10-13' Public Sub 工作表升序() WorkSheetSorted False End Sub Public Sub 工作表降序() WorkSheetSorted True End Sub '工作表升序(reverse=False)或降序(reverse=True)排列' Public Function WorkSheetSorted(Optional reverse As Boolean = False) Dim i As Long, SortedIndex As Long '从第二个表格开始判断,进行名称比较' For i = 2 To ActiveWorkbook.Sheets.Count SortedIndex = GetSortedIndex(i, reverse) If SortedIndex < i Then ActiveWorkbook.Sheets(i).Move ActiveWorkbook.Sheets(SortedIndex) End If Next End Function '获取排序的位置' Private Function GetSortedIndex(CurrentSheetIndex As Long, reverse As Boolean) Dim CheckSheetName As String Dim CurrentSheetName As String Dim i As Long, start_num As Long, end_num As Long, step_num As Long '当前表名' CurrentSheetName = ActiveWorkbook.Sheets(CurrentSheetIndex).Name '比较表名' For i = 1 To CurrentSheetIndex - 1 CheckSheetName = ActiveWorkbook.Sheets(i).Name If (CheckSheetName > CurrentSheetName) <> reverse Then GetSortedIndex = i Exit For End If Next GetSortedIndex = i End Function
4、最后,点击Excel菜单“视图”-->“宏”,执行对应的宏
只是想用用这个功能而已的话,下面内容就不用看了。若需要进一步学习的话,继续往下看。下面稍微讲解一下代码的原理。
这里主要弄明白两个东西就差不多了:
1)冒泡排序
2)工作表移动位置
先取表名,用类似冒泡排序的方法判断工作表应该移动到哪个位置,再用工作表的move方法移动工作表。
这里我使用到的排序原理是类似冒泡,文字描述起来有点抽象,结合图片描述。
假如有6个工作表,顺序如下图:
按照顺序,从左到右判断表名。由于第1个表没有其他表参与判断,我们从第2个表开始判断。
这样就可以划分两个区域,完成排序部分和等待排序部分:
取第2个表,也就是等待排序部分第1个表。升序排序的话,“1”应该要排在“3”前面:
接着,继续判断下一个工作表。“2”升序排序要排在“1”和“3”之间:
剩下的按照这个逻辑排序下去,直到完成排序。
代码原理讲解完毕,你再结合代码尝试一下。