根据另一个工作表中的可见范围删除行
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 好吧。谢谢。以上是关于根据另一个工作表中的可见范围删除行的主要内容,如果未能解决你的问题,请参考以下文章