
我正在嘗試比較 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
,他將變數設為 0Sheet1
。但是,由於它刪除了不唯一的行(即與bRow
上的行相符的行Sheet2
),因此它不會查看那再次排,不存在無限循環。為了增加好奇心,他本來可以這麼說row = 0
,但他卻神秘地說row = row - row
。但你需要改變這一點。 (更準確地說,我認為您應該刪除循環
row = …
內的語句Do While
;除了row = row + 1
最後的語句。)由於您沒有刪除行,因此做導致你的巨集重新檢查相同的數據一遍又一遍地;即,這是一個無限循環。你需要繼續前進Sheet1
。- 您可以透過鍵入Ctrl+中止 VBA 無限循環,而不會終止 Excel 並遺失資料Break。如果您的鍵盤沒有按鍵,請嘗試透過執行並 點擊Break來調出螢幕鍵盤。如果這不起作用,請嘗試然後。
osk
CtrlPauseCtrlScrLk
超級用戶不是腳本編寫服務。我想我已經很好地解釋了問題所在,您現在應該能夠修復它。如果您仍然無法讓它工作,請回來告訴我們您陷入困境的地方。