在Excel VBA中,按升序对列中类似单元格值之间的行范围进行排序
因为我不熟悉编写宏。我需要帮助编写一个宏,在单元格值TLA之间对一系列行进行排序。以下是一个例子:在Excel VBA中,按升序对列中类似单元格值之间的行范围进行排序,excel,vba,Excel,Vba,因为我不熟悉编写宏。我需要帮助编写一个宏,在单元格值TLA之间对一系列行进行排序。以下是一个例子: Column A TLA 23 6 32 TLA TLA 5 21 16 40 TLA 我试图修改从这个论坛浏览的宏。但是,我无法选择行。任何指点或帮助都会对我有很大帮助。 VB: 你的构造看起来很奇怪: r =Range("A"& ActiveSheet.Rows.Count).End(xlUp).Row Fo
Column A
TLA
23
6
32
TLA
TLA
5
21
16
40
TLA
我试图修改从这个论坛浏览的宏。但是,我无法选择行。任何指点或帮助都会对我有很大帮助。
VB:
你的构造看起来很奇怪:
r =Range("A"& ActiveSheet.Rows.Count).End(xlUp).Row
For r = r To 2 Step -1
我认为如果你让计数器自上而下运行会更加透明,具体的原因是什么?
尽可能长地使用另一个计数器,如lCnt。
希望它能在路上帮助你
使用不同的设置范围,例如
set oRange = thisworkbook.sheets("<Name>").usedrange 'Declare oRange as excel.range
for each oRow in oRange.rows
lCnt = lCnt + 1
select case oRow.cells(lcnt, 1)
case "TLA"
oRow.select
'etc...
end select
next oRange
我看不出你的代码有什么问题,只是你没有对值进行排序。 就选择而言,如果调试代码并逐步运行,您将看到行确实被选中 下面将按升序对TLA之间的所有值进行排序
Function a()
Dim r, r2 As Long
r2 = 0
Application.ScreenUpdating = False
ActiveSheet.DisplayPageBreaks = False
r = Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row
For r = r To 1 Step -1
If (Cells(r, 1) = "TLA") Then
If (r2 <> 0) Then
If (r2 - r >= 2) Then
With Range(r + 1 & ":" & r2)
.Sort Key1:=Range("A" & r + 1), _
Order1:=xlAscending, _
Orientation:=xlTopToBottom
End With
End If
End If
r2 = r - 1
End If
Next r
End Function
OP的方法用于查找列中最后一个非空单元格。也可以使用您的方法,但您正在运行工作表中的每一行,其中有1048576行。诚然,空单元格将被跳过,但在这方面浪费迭代是非常低效的。我强烈怀疑他是否需要工作表中的所有行,这就是我应用usedrange的原因。它限制在实际使用的范围内。此外,当您将.cells与计数器一起使用时,显然也在进行迭代。由于wht涉及性能,加载到数组中并在内存中循环将是最快的;我避免这样做,因为我不想把人搞糊涂。
Function a()
Dim r, r2 As Long
r2 = 0
Application.ScreenUpdating = False
ActiveSheet.DisplayPageBreaks = False
r = Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row
For r = r To 1 Step -1
If (Cells(r, 1) = "TLA") Then
If (r2 <> 0) Then
If (r2 - r >= 2) Then
With Range(r + 1 & ":" & r2)
.Sort Key1:=Range("A" & r + 1), _
Order1:=xlAscending, _
Orientation:=xlTopToBottom
End With
End If
End If
r2 = r - 1
End If
Next r
End Function