循环遍历一列中的范围
我有一张带订单和时间戳的工作表。
我想根据右侧列中的时间戳对这些行进行sorting,但是我想保留它们的分组位置。 就像我想要sorting的第4行,但留在第4行,然后我想sorting第8和第9行,但让他们留在那里。
我已经设法select了两个范围,并省略“中间”,但除非关键单元格在一个范围内,否则.sort方法将不起作用。 所以我想也许如果我循环通过列中的不同范围或类似的东西。
这是我现在的代码,以为我不认为这会有所作为。
Dim LR As Long, cell As Range, rng As Range With Sheets("Ark1") Dim start As Range Set start = Range("N16") LR = .Range("N" & Rows.Count).End(xlUp).Row For Each cell In .Range("N16:N" & LR) If cell.value <> "" Then If rng Is Nothing Then Set rng = cell Else Set rng = Union(rng, cell) End If End If Next cell rng.Sort key1:=start, order1:=xlAscending, Header:=xlGuess End With
那么,实现你的目标的最简单的方法就是按照自定义顺序重新计算行数。 例如,将#1分配给第一组,#2分配给第二组等等。 然后,您只需按两列对所有范围进行sorting,首先是您的自定义“订单”和第二个时间戳。 🙂
假设每个块在N列中用空白值分隔,并且你想对每个块的整个行进行sorting,这里是我build议的代码:
Public Sub testSort() Dim firstRow As Long Dim lastRow As Long Dim blockStart As Long Dim blockEnd As Long Dim rng As Range firstRow = 3 lastRow = Cells(Rows.Count, 14).End(xlUp).Row blockStart = firstRow Do If Cells(blockStart + 1, 14) <> "" Then blockEnd = Cells(blockStart, 14).End(xlDown).Row Else blockEnd = blockStart End If Set rng = Range(Rows(blockStart), Rows(blockEnd)) rng.Sort Key1:=rng.Cells(, 14), Order1:=xlAscending, Header:=xlNo blockStart = Cells(blockEnd, 14).End(xlDown).Row Loop Until blockEnd >= lastRow End Sub