Excel VBA 根据几个条件删除行
Excel VBA to delete rows based on several criteria
我有以下代码
Dim CO_priority As String
Dim Col_ticketage As String
CO_priority = Range("Q4").Value
Col_ticketage = Range("Q5").Value
Sheets("Inc").Select
LR = Range("CO_priority" & Rows.Count).End(xlUp).Row
For i = LR To 2 Step -1
If (Range("CO_priority" & i).Value = "1" And Range("Col_ticketage" & i).Value < "1") Then Rows(i).delete
Next I
如果变量 "CO_priority" 给出的列中的值是 1 并且另一个变量 "Col_ticketage" 给出的列中的值小于 1,我希望此代码删除行。
假设如果 A 列中的单元格中的数字为 1,而 B 列中的数字小于 1,则应删除该行,但在任何其他情况下,该行都应保留。
上面的代码出于某种原因正在删除每一行。
你能告诉我这段代码有什么问题吗?
一种更快的方法是使用 DelRng
合并所有通过 2 条件的行,然后一次删除整个范围。
代码
Option Explicit
Sub DelRows()
Dim CO_priority As String
Dim Col_ticketage As String
Dim LR As Long, i As Long
Dim DelRng As Range
CO_priority = Range("Q4").Value
Col_ticketage = Range("Q5").Value
With Sheets("Inc")
LR = .Range(CO_priority & .Rows.Count).End(xlUp).Row
For i = LR To 2 Step -1
If (.Range(CO_priority & i).Value = 1 And .Range(Col_ticketage & i).Value < 1) Then
If Not DelRng Is Nothing Then
Set DelRng = Application.Union(DelRng, .Rows(i))
Else
Set DelRng = .Rows(i)
End If
End If
Next i
End With
' make sure DelRng is not nothing >> delete entire rows at one-shot
If Not DelRng Is Nothing Then DelRng.Delete
End Sub
我有以下代码
Dim CO_priority As String
Dim Col_ticketage As String
CO_priority = Range("Q4").Value
Col_ticketage = Range("Q5").Value
Sheets("Inc").Select
LR = Range("CO_priority" & Rows.Count).End(xlUp).Row
For i = LR To 2 Step -1
If (Range("CO_priority" & i).Value = "1" And Range("Col_ticketage" & i).Value < "1") Then Rows(i).delete
Next I
如果变量 "CO_priority" 给出的列中的值是 1 并且另一个变量 "Col_ticketage" 给出的列中的值小于 1,我希望此代码删除行。
假设如果 A 列中的单元格中的数字为 1,而 B 列中的数字小于 1,则应删除该行,但在任何其他情况下,该行都应保留。
上面的代码出于某种原因正在删除每一行。
你能告诉我这段代码有什么问题吗?
一种更快的方法是使用 DelRng
合并所有通过 2 条件的行,然后一次删除整个范围。
代码
Option Explicit
Sub DelRows()
Dim CO_priority As String
Dim Col_ticketage As String
Dim LR As Long, i As Long
Dim DelRng As Range
CO_priority = Range("Q4").Value
Col_ticketage = Range("Q5").Value
With Sheets("Inc")
LR = .Range(CO_priority & .Rows.Count).End(xlUp).Row
For i = LR To 2 Step -1
If (.Range(CO_priority & i).Value = 1 And .Range(Col_ticketage & i).Value < 1) Then
If Not DelRng Is Nothing Then
Set DelRng = Application.Union(DelRng, .Rows(i))
Else
Set DelRng = .Rows(i)
End If
End If
Next i
End With
' make sure DelRng is not nothing >> delete entire rows at one-shot
If Not DelRng Is Nothing Then DelRng.Delete
End Sub