說起排序這個詞,想必大家都不陌生,這是數(shù)據(jù)處理過程中最常見的操作之一,但我們今天聊的不是數(shù)據(jù)排序,而是如何對工作表排序。舉個例子,如下圖所示,一張工作簿有N張工作表,現(xiàn)在需要按升序對其重新排序。操作步驟如下▼
首先使用以下代碼將工作表的名稱羅列在當前表的A列;相關代碼我們在如何遍歷工作表中分享過了,不知道你是否還記得:
Sub GetShName() Dim sht As Worksheet, k As Long Application.ScreenUpdating = False With Range("a:a") .Clear '清除所有 .NumberFormat = "@" '設置文本格式 End With k = 1 Cells(1, 1) = "目錄" For Each sht In Sheets '遍歷工作表 k = k + 1 '累加個數(shù) Cells(k, 1) = sht.Name Next Application.ScreenUpdating = True End Sub
示例文件中代碼返回結果如下:
然后對A列數(shù)據(jù)進行排序,這個時候你可以用各種手段修理它們,升序、降序、自定義排序、基操、函數(shù)等等,你愛怎么著就怎么著,開心就好。
最后使用以下代碼按照A列排序后的數(shù)據(jù)對工作表重新排放位置。
代碼看不全可以左右拖動..▼
Sub SortSh() Dim sht As Worksheet, shtAct As Worksheet Dim aData, i As Long, intCount As Long Dim strName As String, strErr As String On Error Resume Next '忽略程序錯誤繼續(xù)運行 If ActiveWorkbook.ProtectStructure = True Then MsgBox "工作簿有保護,工作表無法排序。" Exit Sub End If Application.ScreenUpdating = False aData = Range("a1:a" & Cells(Rows.Count, 1).End(xlUp).Row) intCount = Sheets.Count '所有工作表的數(shù)量 Set shtAct = ActiveSheet '當前工作表 For i = 1 To UBound(aData) '遍歷名單 strName = aData(i, 1) '工作表名稱 Err.Clear '錯誤狀態(tài)初始化 Set sht = Sheets(strName) If Err.Number Then '試錯法判斷工作簿是否存在相關工作表 strErr = strErr & "," & strName Else '移動到最后一個工作表之后 sht.Move after:=Sheets(intCount) End If Next If strErr <> "" Then MsgBox "以下工作表名稱工作簿中不存在" & vbCr _ & Mid(strErr, 2) Else MsgBox "排序完成。" End If shtAct.Select '回到操作表 Application.ScreenUpdating = True End Sub
代碼詳細解析見注釋,概要解釋如下▼
第11行代碼將A列的數(shù)據(jù)存入數(shù)組aData。
第14至第24行代碼遍歷數(shù)組。依次將相關工作表名移動到最后一張工作表之后——聽說每個人都有一個夢想,做一名人民教師,為的不是教書育人,而是點名扔粉筆頭。代碼運行的場景大概就是這樣:你化身人民教師,先將工作表排成一排,讓他們按身高或親疏依次站到排尾,也就實現(xiàn)有序排列……
第18行代碼使用試錯法判斷當前工作簿是否存在相關工作表名稱,該方法我們在如何遍歷工作表中也詳細解釋過了……時至今日,不用多說,你也應該知道那一章的知識點對工作表對象有多么重要,不管是我們之前分享過的工作表的新建、刪除,現(xiàn)在分享的排序,還是以后分享的更名、匯總、加密破密等,多少都有那一章知識點的影子……
揮揮手,明天再見。
|