根据其他工作表条件删除行

时间:2017-03-12 20:09:21

标签: excel vba excel-vba autofilter

我在Excel中的工作表中有两个删除行,基于另一个工作表中的条件。

条件表如下

Delete(Y/N) ReferenceID
Y           1
N           2
Y           3
Y           4
N           5

数据表如下

Name ReferenceID
John 1
Andy 2
Mary 3
Anna 4
Rony 5

基于条件表的删除(Y / N)列,我必须删除John,Mary和Anna,参考ID为1,3和5

我查看了另一个解决方案示例here,但条件似乎来自同一张表。我不知道如何根据适用的参考资料从另一张表开始工作。

有关如何执行此操作的任何想法。

1 个答案:

答案 0 :(得分:2)

使用Yes构建ReferenceID的字典,然后使用xlFilterValues参数构建字典键上的AutoFilter。如果有可见行,请删除它们。

Option Explicit

Sub qwewqw()
    Dim d As Long, dict As Object

    Set dict = CreateObject("Scripting.Dictionary")
    dict.comparemode = vbTextCompare

    With Worksheets("Conditional")
        For d = 2 To .Cells(Rows.Count, "B").End(xlUp).Row
            If LCase(.Cells(d, "A").Value2) = "y" Then
                dict.Item(CStr(.Cells(d, "B").Value2)) = .Cells(d, "A").Value2
            End If
        Next d
    End With

    With Worksheets("Data")
        If .AutoFilterMode Then .AutoFilterMode = False
        With .Cells(1, "A").CurrentRegion
            .AutoFilter Field:=2, Criteria1:=dict.keys, Operator:=xlFilterValues
            With .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count)
                If CBool(Application.Subtotal(103, .Cells)) Then
                    .Cells.EntireRow.Delete
                End If
            End With
            .AutoFilter
        End With
    End With
End Sub

奇怪的是,以这种方式使用字典密钥要求您将数字视为文本以进行过滤。