У меня 400 000 записей на двух листах по 5 столбцов с данными в столбце А, являющимися уникальным идентификатором. Порядок столбцов на обоих листах одинаков. Я пытаюсь найти запись, которая существует в Sheet1, и найти ее в Sheet2. Если найдено, мне нужно сравнить данные этой записи с данными на листе 2. Несоответствующие данные должны выделять ячейки на листе 1 и копировать всю строку на листе 3.
Мой макрос успешно работает для небольшого набора данных, но зависает с большими данными, а Excel закрывается автоматически.
Я попытался прокомментировать выделение ячеек и только скопировать строку, а также разделить только 25000 записей, но смог увидеть ту же проблему с производительностью, как указано ранее.
Sub CompareSheets()
Dim wS As Worksheet, wT As Worksheet, RS As Worksheet
Dim intSheet1Column As Integer, i As Long, j As Long, k As Long, FoundRow As Long
Set wS = ThisWorkbook.Worksheets("Sheet1")
Set wT = ThisWorkbook.Worksheets("Sheet2")
Set RS = ThisWorkbook.Worksheets("Sheet3")
RS.Cells.ClearContents
RS.Cells.Interior.Color = RGB(255, 255, 255)
wS.Rows(1).EntireRow.Copy RS.Range("A1")
On Error Resume Next
For i = 2 To wS.UsedRange.Rows.Count
For j = 2 To wT.UsedRange.Rows.Count
If InStr(1, wT.Range("A" & j).Value, wS.Range("A" & i).Value) > 0 Then
Match = "FOUND"
FoundRow = j
Exit For
End If
Next
If Match = "FOUND" Then
CopyFlag = False
For intSheet1Column = 2 To wS.UsedRange.Columns.Count
If wS.Cells(i, intSheet1Column).Value <> wT.Cells(FoundRow, intSheet1Column).Value Then
wS.Cells(i, intSheet1Column).Interior.Color = RGB(255, 255, 0)
CopyFlag = True
k = RS.UsedRange.Rows.Count
End If
Next
If CopyFlag = True Then
wS.Rows(i).EntireRow.Copy RS.Range("A" & k + 1)
End If
End If
Next
MsgBox "Validation Complete"
End Sub
Excel зависает и автоматически закрывается.