我正在尝试比较 A 列Sheet1
(我已将其重命名为“AR”)和 A 列Sheet2
(我已将其重命名为“粘贴在此处”)的值,并突出显示包含另一张表上不存在的值的行。(两列都以空单元格结尾。)我发现了一个宏,我认为它做了一些与我在此处想要的事情类似的事情有效删除多个 Excel 表中的重复记录,我正在尝试修改它以满足我的需求,但我无法让它工作。目前,当我运行它时,它会锁定 Excel,我必须在 Excel 上执行结束任务。
这是我目前所拥有的:
Option Explicit
Sub Compare2()
Application.ScreenUpdating = False
Dim startRow As Integer
startRow = 1
Dim row As Integer
row = startRow
Dim bRow As Integer
'sharks below, cap'ain
' This loop is looping on row.
' Scan down column AR!A (i.e., Sheet1!A) until we find an empty cell.
Do While (Worksheets("AR").Range("A" & row).Value <> "")
Dim aVal As String
aVal = Worksheets("AR").Range("A" & row).Value
bRow = startRow 'I see thy booty
' This loop is looping on bRow. Scan down column 'Paste Here'!A
' (i.e., Sheet2!A) until we find an empty cell.
Do While (Worksheets("Paste Here").Range("A" & bRow).Value <> "")
Dim aVal2 As String
aVal2 = Worksheets("Paste Here").Range("A" & bRow).Value
If (aVal <> aVal2) Then
Worksheets("AR").Rows(row).Interior.ColorIndex = 6
' we found a traitor; feed 'em to the sharks
row = row - row
Exit Do
End If
If (aVal2 <> aVal) Then
Worksheets("Paste Here").Rows(row).Interior.ColorIndex = 6
row = row - row
Exit Do
End If
bRow = bRow + 1
Loop
row = row + 1
Loop
End Sub
您提供的任何帮助都会很有帮助。
答案1
很遗憾,在开始修改子程序之前,您没有更好地理解它。
- “WalkThePlank”子程序正在寻找火柴。当它在 中找到与 中的行
Sheet1
匹配的行时Sheet2
,它会采取行动。您正在寻找唯一值;即,在Sheet1
中与 中的任何内容都不匹配的行Sheet2
,反之亦然。但您要做的正在做触发了不匹配的行对;即,如果Sheet1!Row 1
不匹配Sheet2!Row 1
,则采取行动。这为时过早;您需要扫描一路通过Sheet2
判断是否Sheet1!Row 1
匹配任何排成一排Sheet2
。 “WalkThePlank”子程序的作者做了一些不太合理的事。在删除由变量索引的行后
row
,他将变量设置为 0。这是浪费的,因为它导致子程序重新检查它已经检查过并确定为唯一的所有行。但是,由于它删除了不唯一的行(即与 上的Sheet1
行匹配的行),因此它不会查看bRow
Sheet2
那再次行,并且没有无限循环。更令人好奇的是,他本可以说row = 0
,但他却含糊地说row = row - row
。但你需要改变这一点。(为了更准确,我认为你应该只消除循环
row = …
内的语句Do While
;除了row = row + 1
最后的语句。)因为你没有删除行,所以这做导致你的宏重新检查相同的数据一遍又一遍;也就是说,这是一个无限循环。你只需要继续往下走Sheet1
。- 您可以通过键入Ctrl+来中止 VBA 无限循环,而不会终止 Excel 并丢失数据Break。如果您的键盘没有按键,请尝试通过运行 并单击 ,然后单击Break来调出屏幕键盘。如果这不起作用,请尝试然后。
osk
CtrlPauseCtrlScrLk
Super User 不是脚本编写服务。我想我已经很好地解释了问题所在,您现在应该能够修复它了。如果您仍然无法让它工作,请回来告诉我们您在哪里遇到了困难。