除非另一列具有特定的文本字符,否则请根据2列中的值删除行

时间:2017-12-07 04:31:48

标签: excel excel-vba vba

所以我有一个包含6列的工作表,它有标题。在F列中,有以mm - dd - yy格式表示的日期。在B列中,有一些数字引用了订单的优先级,范围从-999,999到473,700。在A列中,有数字形式的工作中心编号,4005,7009等。一些SPECIAL工作中心的名称以R结尾。我需要删除遵循这些条件的所有行:   - B列中大于0   - 今天在F栏指定了日期   - 在A栏的工作中心末端没有R

这是我到目前为止所做的,但它仍在删除R工作中心(如1027R)

我在这个网站上看过很多不同的文章,有些使用AutoFilter工具,有些使用if值是这个,然后增加这个var并将所有vars一起添加以检查是否应删除该行,但这是最干净的到目前为止我已经获得了代码,但它无法正常工作。还有很多关于删除重复项的文章,但这不是我的问题。

Sub CleanData()
Dim lr As Long, i As Long
With Sheet3
    lr = Application.Max(.Cells(Rows.Count, 1).End(xlUp).Row, _
      .Cells(Rows.Count, 2).End(xlUp).Row, _
      .Cells(Rows.Count, 6).End(xlUp).Row)
    For i = lr To 1 Step -1
        If Not InStr(1, ActiveSheet.Cells(i, 2).Value, "R") > 0 And _
            .Cells(i, 2).Value > 0 And _
            .Cells(i, 6).Value = Date Then
            .Rows(i).EntireRow.Delete
        End If
    Next i
End With

End Sub

1 个答案:

答案 0 :(得分:0)

Sub CleanData()
Dim lr As Long, i As Long
With Sheet3
    lr = Application.Max(.Cells(Rows.Count, 1).End(xlUp).Row, _
      .Cells(Rows.Count, 2).End(xlUp).Row, _
      .Cells(Rows.Count, 6).End(xlUp).Row)
    For i = lr To 1 Step -1
        If Not Application.Right(.Cells(i, 1).Value, 1) = "R" Then
            If .Cells(i, 2).Value > 0 And .Cells(i, 6).Value = Date Then
                .Rows(i).EntireRow.Delete
            End If
        End If
    Next i
End With

您的问题似乎是If Not InStr(1, ActiveSheet.Cells(i, 2).Value, "R"),其中InStr正在评估 B栏。我只更改为嵌套if if for sanity,因为它更容易阅读...如果您还有其他问题,我认为它可能采用Date格式。