今天有同學問到關於大批量Excel的Sheet如何簡化排序,但是網上的攻略比較混亂。因此,在這做一下示例。
需求:80頁sheet的Excel文檔,每頁的格式相同,基本內容如下,要求根據A列,升序排列。
代碼如下:
Option Explicit
Sub MySort()
Dim i As Integer
Dim maxRow As Integer
Dim sht As Worksheet
'遍歷所有工作表
For i = 1 To ActiveWorkbook.Worksheets.Count
Set sht = ActiveWorkbook.Worksheets(i)
'激活當前工作表,Sort只能排序當前工作表
sht.Activate
'獲取當前表最大行數
maxRow = sht.UsedRange.Rows.Count
'選取範圍進行排序:這裏是選取a3:ao41(前兩行因爲是標題,所以不選);key是排序的列,這裏寫a3,表示以a列爲依據排序,最多可以寫3個key;order表示升序降序;Header表示是否有標題,由於我們沒選a1、a2,所以這裏寫no
sht.Range("a3:ao" & maxRow).Sort key1:=sht.Range("a3"), order1:=xlAscending, Header:=xlNo
Next i
End Sub
注意,Vba的排序函數爲Sort,基本用法如下:
Range("待排序數據區域").Sort(Key1, Order1, Key2, Type, Order2, Key3, Order3,
Header, OrderCustom, MatchCase, Orientation, SortMethod,
DataOption1, DataOption2, DataOption3)
其中各類型參數的意義如下:
① key1、key2、key3
這些key是排序的關鍵列(或行)的單元格地址,如 Range("A1")
實際只要選對列標題即可,對行數要求不敏感。
【行數要求不敏感】
即數據區域中任意行數都可以: Range("A1")、或Range("A2")、或Range("A1000")都可以。
【注意】
1. 一次Sort只能調用至多3個參數,沒有key4可以使用。
2. 至少使用1個參數即可,即key2、key3可以省去不用。
【引用方法】
1. 帶參數名引用,如: key1:=Range("G3")
帶參數名引用時
2. 參數位置引用,即按照上述Sort命令的參數順序直接應用,
如: Range("A1:I19").Sort key1:=Range("G3") 即第1位置參數即爲key1
② Order1、Order2、Order3
這些Order是排序的順序模式指定參數。即: A-Z升序、或Z-A降序
參數的模式名稱爲:
A-Z升序= xlAscending 或直接=1
Z-A降序= xlDescending 或直接=2
帶參數名引用時:
Order1:=xlAscending 或 Order1:= 1
參數位置引用時,緊跟key後面。(但注意key2和Order2之間要隔一個Type參數)
③ Header
即是否有標題行參數,一共有3個值:
Header:= xlGuess=0 或xlYes=1 或 xlNo=2
即=xlGuess、或=0時,工作表自己判斷
=xlYes、或=1時,強制第1行爲列標題,即第1行【不參與排序】
=xlNo、或=2時,強制沒有列標題。即第1行【也參與排序】
帶參數名引用時:
如: Header:= xlGuess
參數位置引用時,在第7個逗號之後。
(如果key只有1個時,要連續空6個逗號,
如:Range("A1:I19").Sort Range("A1"), 1, , , , , , 2 (order1之後連續寫6個逗號)
④ MatchCase 是否匹配大小寫
MatchCase:=False 、或=0 不區分大小寫
MatchCase:=True 、或=1 區分大小寫(Case Sensitive)
⑤ Orientation 排序方向
一般爲同一列中從上到下各行進行排序:Orientation:= xlTopToBottom 、或=1
如果是: 同一行中從左到右各列進行排序,則爲:Orientation:= xlLeftToRight、或=2
⑥ SortMethod 排序方法
按拼音排序: SortMethod:= xlPinYin 、或=1 (Use phonetic info)
按筆畫排序: SortMethod:= xlStroke、或=2
⑦ DataOption1 按數值或按文本排序
DataOption1:= xlSortNormal