标签:VBA
如下图1所示的示例工作表,每一个数据块之间相隔一个空行。
图1
现在想要对这些数据块分别进行排序,也就是说,示例中第2至4行的数据排序,第6至11行的数据排序,各不相关。排序的主关键字是列C,次关键字是列A。
可以使用下面的VBA过程:
Sub SortRanges()
Const WKS = "Sheet2"
Dim last_row As Long
Dim i As Integer
Dim first_row As Long
Dim next_row As Long
i = 1
With Sheets(WKS)
last_row = .Cells(.Rows.Count, 1).End(xlUp).Row
Do While True
first_row = .Cells(i, 1).End(xlDown).Row
next_row = .Cells(first_row, 1).End(xlDown).Row
.Range("$A$" & first_row & ":$D$" & next_row).Sort _
Key1:=.Range("C" & first_row), _
Order1:=xlAscending, _
Key2:=.Range("A" & first_row), _
Order2:=xlAscending, _
Header:=xlNo
If next_row = last_row Then
Exit Do
End If
i = next_row + 1
Loop
End With
End Sub
结果如下图2所示。
图2
过程中,假设数据所在的工作表名称为“Sheet2”,你可以根据实际情况修改。过程的关键在于划分数据块,找到数据块所在的首行和尾行,从而对其进行排序。
注:本示例代码整理自vbaexpress.com论坛,供有兴趣的朋友参考。