为何按特定条件删除行的VBA宏无法正常工作?
解决VBA宏无法删除行的问题
你的Dim语句完全没问题,宏无法删除行的核心问题出在变量赋值和条件逻辑的矛盾上:
- 你把
prodTran和prodTran2都赋值为同一单元格Range("A" & dataRow).Text,这两个变量值完全相同,不可能同时满足prodTran = "Ordered"且prodTran2 = "Cancelled" - 同理,
prodOIS和prodOIS2都来自同一单元格Range("AA" & dataRow).Text,也不可能同时等于"Cancelled"和"Refund"
这就导致你的If条件永远为假,自然不会执行删除行的操作。
修正方案(根据常见需求推测)
如果你是想判断当前行A列是"Ordered"、下一行A列是"Cancelled",同时当前行AA列是"Cancelled"、下一行AA列是"Refund",然后删除目标行,可以修改代码如下:
Sub DeleteRowsonCriteria() Dim lastRow As Long, dataRow As Long Dim prodTran As String, prodTranNext As String Dim prodOIS As String, prodOISNext As String ' 更可靠的获取最后一行方式 lastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row ' 循环到第4行,避免越界访问下一行 For dataRow = lastRow To 4 Step -1 prodTran = Range("A" & dataRow).Text prodTranNext = Range("A" & dataRow - 1).Text ' 取上一行A列内容 prodOIS = Range("AA" & dataRow).Text prodOISNext = Range("AA" & dataRow - 1).Text ' 取上一行AA列内容 ' 按需调整条件,示例为匹配上一行A=Ordered、当前行A=Cancelled,上一行AA=Cancelled、当前行AA=Refund时删除上一行 If prodTranNext = "Ordered" And prodTran = "Cancelled" And prodOISNext = "Cancelled" And prodOIS = "Refund" Then Rows(dataRow - 1).Delete End If Next dataRow End Sub
如果你的需求是同一行满足多条件组合(比如A列是"Ordered"或"Cancelled",且AA列是"Cancelled"或"Refund"),可以调整逻辑运算符:
Sub DeleteRowsonCriteria() Dim lastRow As Long, dataRow As Long Dim prodTran As String, prodOIS As String lastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row For dataRow = lastRow To 3 Step -1 prodTran = Range("A" & dataRow).Text prodOIS = Range("AA" & dataRow).Text ' 同一行A列是Ordered/Cancelled,且AA列是Cancelled/Refund时删除 If (prodTran = "Ordered" Or prodTran = "Cancelled") And (prodOIS = "Cancelled" Or prodOIS = "Refund") Then Rows(dataRow).Delete End If Next dataRow End Sub
内容的提问来源于stack exchange,提问作者joselyn reda
相关产品推荐
相关产品推荐

