[英]sorting every cell with data in excel using VBA
我錄制了一個宏來對這張表進行排序。 如何替換硬編碼范圍,以便此腳本適用於任意數量的行?
Worksheets(1).sort.SortFields. _
Clear
Worksheets(1).sort.SortFields. _
Add2 Key:=Range("A2:A130008"), SortOn:=xlSortOnValues, Order:=xlAscending _
, DataOption:=xlSortNormal
Worksheets(1).sort.SortFields. _
Add2 Key:=Range("B2:B130008"), SortOn:=xlSortOnValues, Order:=xlAscending _
, DataOption:=xlSortNormal
Worksheets(1).sort.SortFields. _
Add2 Key:=Range("C2:C130008"), SortOn:=xlSortOnValues, Order:=xlAscending _
, DataOption:=xlSortNormal
Worksheets(1).sort.SortFields. _
Add2 Key:=Range("D2:D130008"), SortOn:=xlSortOnValues, Order:=xlAscending _
, DataOption:=xlSortNormal
Worksheets(1).sort.SortFields. _
Add2 Key:=Range("E2:E130008"), SortOn:=xlSortOnValues, Order:=xlAscending _
, DataOption:=xlSortNormal
Worksheets(1).sort.SortFields. _
Add2 Key:=Range("P2:P130008"), SortOn:=xlSortOnValues, Order:= _
xlDescending, DataOption:=xlSortNormal
Worksheets(1).sort.SortFields. _
Add2 Key:=Range("Q2:Q130008"), SortOn:=xlSortOnValues, Order:= _
xlDescending, DataOption:=xlSortNormal
With Worksheets(1).sort
.SetRange Range("A1:R130008")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
這應該可以完成工作。 請試一試。
Sub StackOverflow()
Dim Rng As Range ' range to sort
With Worksheets(1)
Set Rng = .Range(.Cells(2, "A"), .Cells(.Rows.Count, "A").End(xlUp)) _
.Resize(, .Columns("R").Column)
' .Columns("R").Column = 18 and may be replaced with this number
With .Sort.SortFields
.Clear
' specify the columns to sort on in sequence of priority
.Add2 Key:=Rng.Cells(1), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.Add2 Key:=Rng.Cells(2), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.Add2 Key:=Rng.Cells(3), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.Add2 Key:=Rng.Cells(4), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.Add2 Key:=Rng.Cells(5), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.Add2 Key:=Rng.Cells(16), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.Add2 Key:=Rng.Cells(17), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
End With
With .Sort
.SetRange Rng
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End Sub
請注意,在.Sort.SetRange
中,必須指定整個范圍,而要設置每個鍵,只需要一個單元格來標識一列。 由於范圍內的單元格編號為 1,並且先向上然后向下編號,因此該范圍內的前 18 個單元格編號與下表范圍中的列號一致。 所以Key:=Rng.Cells(1)
恰好是Worksheets(1).Cells(2, "A")
基於Rng
的指定方式。 我選擇了較短的語法,但效果是整個范圍將首先在 A 列上排序,然后再應用其他鍵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.