excel - 如果值匹配,则遍历 A 列的工作表 1 和工作表 2 删除工作表 1 中的整行
问题描述
我有工作表 1(A 列)值和工作表 2(A 列)。我想将工作表 1 的 A 列与工作表 2 的 A 列进行比较。如果在工作表 2 中找到工作表 1(A 列),则删除工作表 1 中的整行。转到下一个。
我一直坚持这一点。下面是我的代码。它不工作。它不断得到错误的单元格值
Sub Compare()
Dim i As Long
Dim j As Long
Dim lastRow_Task As Long
Dim lastRow_Compare As Long
Dim lastRow As Long
'Sheet 1
Dim Task As Worksheet
'Sheet 2
Dim Compare As Worksheet
Set Task = Excel.Worksheets("TaskDetails")
Set Compare = Excel.Worksheets("Compare")
Application.ScreenUpdating = False
lastRow_Task = Log.Cells(Rows.count, "A").End(xlUp).Row
lastRow_Compare = Compare.Cells(Rows.count, "A").End(xlUp).Row
For i = 2 To lastRow_Task
For j = 2 To lastRow_Compare
If Task.Cells(i, "A").Value = Compare.Cells(j, "A").Value Then
Compare.Cells(j, "A").ClearContents
End If
Next j
Next i
解决方案
使用 Match() 速度很快,并且可以避免嵌套循环。
另外 - 删除行时,最好从底部到顶部工作,这样删除的行就不会干扰您的循环计数器。
Sub Compare()
Dim i As Long
Dim lastRow_Task As Long
Dim Task As Worksheet 'Sheet 1
Dim Compare As Worksheet 'Sheet 2
Set Task = ActiveWorkbook.Worksheets("TaskDetails")
Set Compare = ActiveWorkbook.Worksheets("Compare")
Application.ScreenUpdating = False
lastRow_Task = Task.Cells(Task.Rows.Count, "A").End(xlUp).Row
For i = lastRow_Task To 2 Step -1
If Not IsError(Application.Match(Task.Cells(i, 1).Value, Compare.Columns(1), 0)) Then
Task.Rows(i).Delete
End If
Next i
Application.ScreenUpdating = True
End Sub
推荐阅读
- spring - 在 Spring Boot 中接受来自 REST api 的后台处理大型任务的订单
- swift - 协议类型“InheritingProtocol:协议”的值不能符合“协议”
- python - 四分之一持续时间小于 0.25 的 Music21 音符?
- msix - 将依赖项添加到 .exe 并使用 MSIX 安装程序中的参数执行
- c - 使用 fork() 系统调用创建 6 个孩子
- javascript - 哪个支架应该用在哪里?对象解构时的方括号或花括号?我很想使用上下文但有点困惑
- python - 在python中获取空字典
- python - 无法找到 xpath selenium,即使它存在于 html 中
- python - 将列表中的字符串元素转换为单独的变量
- modelica - 缺少起始值