根据另一个工作表中的可见范围删除行

Posted

技术标签:

【中文标题】根据另一个工作表中的可见范围删除行【英文标题】:Delete Rows Based on Visible Range In Another Worksheet 【发布时间】:2020-06-01 17:02:02 【问题描述】:

我有 2 个工作表,sheet1 和 sheet2。由于两张表中有共同的行,我想删除 sheet1 中可以在 sheet2 中找到的行。我只希望为具有条件“Y”的列删除工作表 1 中的行。我使用 sheet2 中的条件 Y 过滤了列,并选择了范围作为可见范围。所以 sheet1 中行的删除要根据 sheet2 中的可见范围。但是,在 sheet1 中删除行是根据 sheet2 删除每个出现的事件,而不是根据可见范围。我有下面的代码,但它不工作。有人可以让我知道我做错了什么吗?谢谢。

lastrow = Sheets("Sheet1").Cells.Find("*", searchorder:=xlByRows, SearchDirection:=xlPrevious).Row

With Sheets("Sheet2")
    .AutoFilterMode = False
    .Range("B1").AutoFilter Field:=2, Criteria1:="Y"
End With

With Sheets("Sheet1")
    For i = lastrow To 1 Step -1
            If IsNumeric(Application.Match(.Range("A" & i).Value, Sheets("Sheet2").Range("A1:B" & lastrow).SpecialCells(xlCellTypeVisible), 0)) Then
            .Rows(i).Delete
            End If
    Next i
End With

【问题讨论】:

如果第 1,3 和 5 行是 Sheet2 中唯一可见的行,您希望在 Sheet1 中删除这些相同的行吗? 两个文件是否具有相同的行结构?我的意思是相同数量的行,位于相同的位置? 不,两个文件都有随机列出的行。 sheet1 中要删除的行将基于 sheet2 中的 2 个条件。一个条件是列中的值等于 Yes,另一个条件是列中的值等于唯一标识符。 【参考方案1】:

如果我正确理解要求,此代码将起作用。

With Sheets("Sheet2")

    Dim lastRow As Long
    lastRow = .Cells(.Rows.Count, 2).End(xlUp).Row

    Dim data As Range
    Set data = .Range("B1:B" & lastRow)

    .AutoFilterMode = False
    data.AutoFilter 1, "Y"

    Dim deleteRows As Range
    Set deleteRows = data.SpecialCells(xlCellTypeVisible)

End With

Worksheets("Sheet1").Range(deleteRows.Address).EntireRow.Delete

要删除 sheet2 过滤数据中的 sheet1 中的值,请执行此操作

Dim d as Range
For each d in deleteRows

    Dim found as Range
    Set found = Worksheets("Sheet1").Columns(1).Find(d.Value,lookat:=xlWhole)

    If not found is Nothing Then

        Dim removeFrom1 as Range
        If removeFrom1 is Nothing Then
            set removeFrom1 = found
        else
            set removeFrom1 = Union(removeFrom1,found)
        end If

    End If

Next

removeFrom1.entirerow.delete

【讨论】:

太棒了@SJL。如果您将其标记为已回答,它将在将来对其他人有所帮助。 实现了基于地址的代码删除。如果两张纸中的行顺序相同,它将完美地工作。在 sheet2 中过滤后,如果我想根据 sheet2 中的唯一标识符删除 sheet1 中的行,我该怎么做?谢谢。 它没有用。它不会进入 if not found is nothing then 循环。 请调试代码并查看为什么它没有找到您期望的单元格值。我没有你的数据,无法调查。我还有一个需要解决的优先项目。 @SJL 好吧。谢谢。

以上是关于根据另一个工作表中的可见范围删除行的主要内容,如果未能解决你的问题,请参考以下文章

怎样将EXCEL工作表中某列数值小于一个数的行删除,或将工作表中某列数值大于一个数的行统计到另一个工作表

根据单元格值将特定范围而不是整行复制到另一个谷歌工作表

根据另一个表中的值删除行

使用具有动态范围的自动过滤器

根据另一个表中的列值选择一个表中的行?

根据行数据复制特定单元格并粘贴到特定工作表上