【发布时间】:2020-02-06 06:20:57
【问题描述】:
我在两张表中有 400 000 条记录,每列 5 列,A 列中的数据是唯一标识符。两张表中的列顺序相同。我正在尝试搜索 Sheet1 中存在的记录并在 Sheet2 中找到它。如果找到,我需要将该记录的数据与 sheet2 中的数据进行比较。不匹配的数据应突出显示 sheet1 中的单元格并复制 sheet 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 被挂起并自动关闭。
【问题讨论】:
-
看看FIND。比检查每个单元格要快得多。
-
并注释掉 On Error 行,看看会发生什么。