Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 删除包含特定数据的两列行_Excel_Vba_Macros - Fatal编程技术网

Excel 删除包含特定数据的两列行

Excel 删除包含特定数据的两列行,excel,vba,macros,Excel,Vba,Macros,我有一个excel文件,其中包含一张包含以下数据的表格: A | B | C | D ________________________________________________ 321 2016/12/01 0 0 123 2016/12/03 23 0 1321 2016/12/05 12

我有一个excel文件,其中包含一张包含以下数据的表格:

      A    |     B      |     C    |       D
________________________________________________
    321        2016/12/01    0           0
    123        2016/12/03    23          0
    1321       2016/12/05    12          1
    2315       2015/12/03    0           0
    23154      2015/12/03    0           0

如果C
D中的值为0,我确实希望删除所有行。我怎样才能做到这一点呢?

简短的谷歌搜索给了我多种方法:


简短的谷歌搜索给了我多种方法:


对值为0的列C和D应用过滤器,并删除显示的行

对值为0的列C和D应用过滤器,并删除显示的行

考虑:

Sub RowKiller213()
    Dim i As Long, N As Long

    N = Cells(Rows.Count, "A").End(xlUp).Row
    For i = N To 1 Step -1
        If Cells(i, "C").Value = 0 And Cells(i, "D").Value = 0 Then
            Cells(i, "C").EntireRow.Delete
        End If
    Next i
End Sub
注意:

  • 循环自下而上运行
考虑:

Sub RowKiller213()
    Dim i As Long, N As Long

    N = Cells(Rows.Count, "A").End(xlUp).Row
    For i = N To 1 Step -1
        If Cells(i, "C").Value = 0 And Cells(i, "D").Value = 0 Then
            Cells(i, "C").EntireRow.Delete
        End If
    Next i
End Sub
注意:

  • 循环自下而上运行

确保第一行作为标题行,然后使用以下命令:

Sub Main()
    With Worksheets("mySheetName")
        With .Range("D1", .Cells(.Rows.Count, 1).End(xlUp))
            .AutoFilter field:=3, Criteria1:=0
            .AutoFilter field:=4, Criteria1:=0
            If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        End With
        .AutoFilterMode = False
    End With
End Sub

确保将第一行作为标题1,然后使用此选项:

Sub Main()
    With Worksheets("mySheetName")
        With .Range("D1", .Cells(.Rows.Count, 1).End(xlUp))
            .AutoFilter field:=3, Criteria1:=0
            .AutoFilter field:=4, Criteria1:=0
            If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        End With
        .AutoFilterMode = False
    End With
End Sub

是的,可能是重复的。但在我的例子中,有两列可以在删除行的情况下。在你的例子中,只需在代码中添加C列和D列,而不是只考虑一列(这就是你在评论中所说的吗?)那么,这对我来说是一个简单的例子吗?假设条件中有4列?如果我不得不猜测(我不知道VBA),您会在答案中添加
Do While
,以包括两列。可能类似于:
thiswook.ActiveSheet.Range(“C1”).CurrentRegion.Rows.Count&&thiswook.ActiveSheet.Range(“D1”).CurrentRegion.Rows.Count
是的,可能是重复的。但在我的例子中,有两列可以在删除行的情况下。在你的例子中,只需在代码中添加C列和D列,而不是只考虑一列(这就是你在评论中所说的吗?)那么,这对我来说是一个简单的例子吗?假设条件中有4列?如果我不得不猜测(我不知道VBA),您会在答案中添加
Do While
,以包括两列。可能类似于:
ThisWorkbook.ActiveSheet.Range(“C1”).CurrentRegion.Rows.Count&&ThisWorkbook.ActiveSheet.Range(“D1”).CurrentRegion.Rows.Count
在您的链接中,它没有给出一个将2、3或10列的值与链接中的0进行比较的示例,它没有给出一个例子来考虑将2列、3列或10列的值与响应的0列进行比较。“未找到对象引用”感谢您的回复。“未找到对象引用”带有-不允许作为过程在外部。您必须将该代码包装在
子WhateverName()
结束子块中!见编辑code@FlorinM.,你通过了吗?使用-作为过程不允许外出。你必须将该代码包装在
子WhateverName()
结束子块中!见编辑code@FlorinM.,你熬过了吗?