嘗試在 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。但是,由於它刪除了不唯一的行(即與bRow上的行相符的行Sheet2),因此它不會查看再次排,不存在無限循環。為了增加好奇心,他本來可以這麼說row = 0,但他卻神秘地說row = row - row

    但你需要改變這一點。 (更準確地說,我認為您應該刪除循環row = …內的語句Do While;除了row = row + 1最後的語句。)由於您沒有刪除行,因此導致你的巨集重新檢查相同的數據一遍又一遍地;即,這是一個無限循環。你需要繼續前進Sheet1

  • 您可以透過鍵入Ctrl+中止 VBA 無限循環,而不會終止 Excel 並遺失資料Break。如果您的鍵盤沒有按鍵,請嘗試透過執行並 點擊Break來調出螢幕鍵盤。如果這不起作用,請嘗試然後。oskCtrlPauseCtrlScrLk

超級用戶不是腳本編寫服務。我想我已經很好地解釋了問題所在,您現在應該能夠修復它。如果您仍然無法讓它工作,請回來告訴我們您陷入困境的地方。

相關內容