介紹如何在 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
排序過後的表格會像這樣。

excel 原始檔案照c欄照這工作表2的F欄排序 原始檔案的A~E欄跟這C欄一起排