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