1. 程式人生 > 電腦技巧 >Excel VBA Range.Sort 範圍排序教學與範例

Excel VBA Range.Sort 範圍排序教學與範例

介紹如何在 Excel VBA 中針對指定範圍,依據指定的欄位與條件進行資料的排序。


假設我們的原始資料如下:

原始資料

基本排序

若單純只是要依據姓名(或其他單一欄位)來排序,只要指定資料範圍,並以 Key1 指定排序依據的欄位,即可進行資料的排序:

' 排序 A1:D10 範圍的資料

' Key1:=Range("A1") 依據 A 欄排序

' Order1:=xlAscending 升冪排序

' Header:=xlYes 有標題列

Range("A1:D10").sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes若要更改排序方式,則可由 Order1 參數調整,可用的值有 xlAscending(升冪排序)與 xlDescending(降冪排序)。若表格不包含標題列,可將 Header 參數改為 xlNo。

如果想要對整欄的所有資料進行排序,可以使用 Columns 指定要納入排序的欄位:

' 排序 A 欄至 D 欄的所有資料

' Key1:=Range("A1") 依據 A 欄排序

' Order1:=xlAscending 升冪排序

' Header:=xlYes 有標題列

Columns("A:D").sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes排序過後的表格會像這樣。

依據姓名欄排序

依據日期排序

若要根據日期排序,只要將 Key1 指定為日期那一欄即可:

' 排序 A 欄至 D 欄的資料

' Key1:=Range("C1") 依據 C 欄排序

' Order1:=xlDescending 降冪排序

' Header:=xlYes 有標題列

Columns("A:D").sort Key1:=Range("C1"), Order1:=xlDescending, Header:=xlYes根據日期降冪排序過後的表格會像這樣。

根據日期降冪排序

依據多欄位排序

若要根據多個欄位來排序,只要透過 Key1、Key2、Key3 這些參數來依序指定排序的依據欄位即可,同時搭配 Order1、Order2、Order3 指定排序的方式。

舉例來說,如果想先依據組別升冪排序,同組別之內再依據金額降冪排序,可以這樣寫:

' 排序 A 欄至 D 欄的資料

' Key1:=Range("B1") 依據 B 欄排序

' Order1:=xlAscending 升冪排序

' Key2:=Range("D1") 依據 D 欄排序

' Order2:=xlDescending 降冪排序

' Header:=xlYes 有標題列

Columns("A:D").sort Key1:=Range("B1"), Order1:=xlAscending, _

Key2:=Range("D1"), Order2:=xlDescending, Header:=xlYes排序過後的表格會像這樣。

依據多欄位排序