我有一张包含订单和时间戳的工作表。
我想根据右侧列中的时间戳对这些行进行排序,但我希望保持其分组位置。就像我想要排序的第4行但保留在第4行的第4行,然后我想对第8行和第9行进行排序,但让它们留在那里。
我已设法选择两个范围,并省略了#34;中间",但除非关键单元格在一个范围内,否则.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
答案 0 :(得分:1)
嗯,实现目标的最简单方法是按自定义顺序重新计算行数。例如,您将数字#1分配给第一组行,#2分配给第二组,依此类推。然后,您只需将所有范围按两列排序,首先是您的自定义“订单”和第二个时间戳。 :)
答案 1 :(得分:0)
假设每个块在列N中用空白值分隔,并且您想要为每个块排序整个行,这里是我建议的代码:
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