尝试在 Excel 2007 中的多张工作表中突出显示唯一值

尝试在 Excel 2007 中的多张工作表中突出显示唯一值

我正在尝试比较 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行匹配的行),因此它不会查看bRowSheet2再次行,并且没有无限循环。更令人好奇的是,他本可以说row = 0,但他却含糊地说row = row - row

    但你需要改变这一点。(为了更准确,我认为你应该只消除循环row = …内的语句Do While;除了row = row + 1最后的语句。)因为你没有删除行,所以这导致你的宏重新检查相同的数据一遍又一遍;也就是说,这是一个无限循环。你只需要继续往下走Sheet1

  • 您可以通过键入Ctrl+来中止 VBA 无限循环,而不会终止 Excel 并丢失数据Break。如果您的键盘没有按键,请尝试通过运行 并单击 ,然后单击Break来调出屏幕键盘。如果这不起作用,请尝试然后。oskCtrlPauseCtrlScrLk

Super User 不是脚本编写服务。我想我已经很好地解释了问题所在,您现在应该能够修复它了。如果您仍然无法让它工作,请回来告诉我们您在哪里遇到了困难。

相关内容