Excel工作表按照表名排序

  • 发布时间:2016年11月15日 14:43
  • 作者:杨仕航

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

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

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

上一篇:Django的raw方法执行SQL查询

下一篇:prettify.js代码高亮显示行号问题

评论列表

智慧如你,不想发表一下意见吗?

新的评论

清空