Форум по VBA и MS Office

VBA, Excel => VBA, макросы в Excel => Тема начата: Miko от 20 августа 2019, 20:57

Название: Excel VBA Макросы: Сравнение строк между двумя листами.
Отправлено: Miko от 20 августа 2019, 20:57
Нужно сравнить таблицы на двух листах. Таблицы находятся в столбцах A:D.
Если на листе 2 есть строки, которых нет на листе 1, то такие строки нужно закрасить на листе 2.
Название: Re: Excel VBA Макросы: Сравнение строк между двумя листами.
Отправлено: Администратор от 20 августа 2019, 22:27
Макрос
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
[свернуть]
Название: Re: Excel VBA Макросы: Сравнение строк между двумя листами.
Отправлено: Miko от 20 августа 2019, 23:04
Огромное Вам спасибо!
Это именно то, что нужно! Благодаря Вам и вашей работе теперь не придется все проверять вручную.