Excel VBA Макросы: Сравнение строк между двумя листами.

Автор Miko, 20 августа 2019, 20:57

Miko

Нужно сравнить таблицы на двух листах. Таблицы находятся в столбцах A:D.
Если на листе 2 есть строки, которых нет на листе 1, то такие строки нужно закрасить на листе 2.

Администратор

Макрос
Sub Макрос()

    Dim sh1 As Worksheet, sh2 As Worksheet
    Dim arr1(), arr2()
    Dim совпало As Boolean
    Dim lr As Long, i As Long, ii As Long, j As Long
   
   
    ' Присваиваем листам имена.
    Set sh1 = Worksheets("Лист1")
    Set sh2 = Worksheets("Лист2")
   
    ' Копируем данные в массивы, чтобы макрос быстрее работал и может быть
        ' так будет удобнее читать и писать код.
        ' End не ищет в скрытых строках.
    lr = sh1.Cells(sh1.Rows.Count, "A").End(xlUp).Row
    arr1() = sh1.Range("A1:D" & lr).Value
    lr = sh2.Cells(sh2.Rows.Count, "A").End(xlUp).Row
    arr2() = sh2.Range("A1:D" & lr).Value
   
    For i = 2 To UBound(arr2)
        For ii = 2 To UBound(arr1)
            ' Сброс переменной от предыдущего витка цикла.
            совпало = True
            For j = 1 To UBound(arr2, 2)
                If arr1(ii, j) <> arr2(i, j) Then
                    ' Помечаем, что не совпало.
                    совпало = False
                    ' Выход из цикла: остальные столбцы не смотрим.
                    Exit For
                End If
            Next j
            ' Если совпало, то выход из цикла.
            If совпало Then
                Exit For
            End If
        Next ii
        ' Если в переменной "совпало" False, то закрашиваем.
        If совпало = False Then
            sh2.Rows(i).Columns("A:D").Interior.Color = 8696052
        End If
    Next i

    ' Сообщение.
    MsgBox "Готово.", vbInformation

End Sub
[свернуть]

Miko

Огромное Вам спасибо!
Это именно то, что нужно! Благодаря Вам и вашей работе теперь не придется все проверять вручную.