【发布时间】:2018-09-05 09:03:57
【问题描述】:
我有以下代码比较两个列表(工作表 1 中的 A 列和工作表 2 中的 C 列)并删除工作表 2 列表中不存在的值。此代码工作正常,但在以下情况下不起作用表 1 中的 A 列和表 2 中的 C 列都有表格。请让我知道如何修改此代码以也适用于表格。另外,如何从具有 C 列(表 2)常量列表的多个工作表中删除不匹配项?
Sub Stridhan()
Dim lr As Integer, x As Integer
lr = ThisWorkbook.Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
For x = lr To 2 Step -1
If Application.WorksheetFunction.CountIf(Sheets("Sheet2").Range("C:C"), Sheets("Sheet1").Cells(x, 1).Value) = 0 Then
Sheets("Sheet1").Rows(x).EntireRow.Delete
End If
Next x
Application.ScreenUpdating = True
End Sub
【问题讨论】:
-
我今天可能有点慢,但是“此代码工作正常,但当工作表 1 中的 A 列和工作表 2 中的 C 列都有表格时它不起作用”到底是什么意思?我以为您的意思是两列都是表格格式的范围的一部分,但是当我尝试代码对我来说可以正常工作时...另外-它不起作用是什么意思?它显示错误或运行没有错误,但给出错误的数据?
-
是的,我的意思是当范围格式化为表格时。代码运行没有任何错误,但不会从表中删除行。
-
我重新创建了文件以确保它再次按预期工作,尽管我的数据集被格式化为表格。表 1 上还有其他内容吗?您是否尝试单步执行代码以查看执行删除行时会发生什么?
-
我想知道是什么导致了这种行为 - 如果工作表 1 中有任何内容阻止删除行,那么它很可能会导致错误。例如,如果有一个数据透视表。因此,如果您没有看到任何错误,我猜想更有可能找不到匹配项。再一次 - 单步执行代码以查看其行为方式将是最佳的行动方案 - 它是否识别匹配?如果没有 - 为什么?如果是 - 为什么不删除该行?这就是我将如何进行。
-
您好,谢谢!更改工作表参考后,它对我有用。另外,我希望这段代码除了前两张表之外,也不会从其他工作表中删除任何匹配项。