Excel VBA
Excel工作表按照表名排序
2017-02-16 16:20:27

有时候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”之间:

剩下的按照这个逻辑排序下去,直到完成排序。

代码原理讲解完毕,你再结合代码尝试一下