Попытка выделить уникальные значения на нескольких листах в Excel 2007
Я пытаюсь сравнить значения из столбца А 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
,- Вы можете прервать бесконечный цикл VBA, не убивая Excel и не теряя свои данные, нажав Ctrl+Break. Если на вашей клавиатуре нет клавиши Break, попробуйте вызвать экранную клавиатуру, запустив
osk
и нажав Ctrl, а затем Пауза. Если это не сработает, попробуйте Ctrl, а затем ScrLk.
Super User не является сервисом для написания сценариев. Думаю, я достаточно хорошо объяснил, что происходит, чтобы вы могли исправить это сейчас. Если вы все еще не можете заставить его работать, вернитесь и скажите нам, где вы застряли.