Сравнивая три динамических диапазона - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь сравнить рабочие книги pkws (столбец A), tmpws (столбец A) и fdws (столбец B).

Данные выглядят как «123456789».Если что-то совпадает, макрос должен выделить строку в pkws Workbook.

Вот мой код, который работает для двух рабочих книг, но не для трех.Я попытался ввести еще одну переменную (сравнивая pkws и fdws).

If StrComp(Trim(range1.Text), Trim(range2.Text), vbTextCompare) = 0 Then
Dim range1 As Range, range2 As Range, n As Long, m As Long
For n = 1 To pkws.Range("A" & Rows.count).End(xlUp).Row
    Set range1 = pkws.Range("A" & n)
    For m = 1 To tmpws.Range("A" & Rows.count).End(xlUp).Row
        Set range2 = tmpws.Range("A" & m)
        If StrComp(Trim(range1.Text), Trim(range2.Text), vbTextCompare) = 0 Then
            range1.Interior.Color = RGB(255, 255, 0)
        End If
        Set range2 = Nothing
    Next m
    Set range1 = Nothing
Next n

1 Ответ

0 голосов
/ 30 ноября 2018

Ваш подход с вложенным циклом будет очень медленным, поэтому что-то вроде этого может быть лучшим методом:

Sub Tester()

    Dim range1 As Range, range2 As Range, range3 As Range, c As Range
    Dim m1, m2, v

    Set range1 = pkws.Range("A1:A" & pkws.Cells(Rows.Count, 1).End(xlUp).Row)
    Set range2 = tmpws.Range("A1:A" & tmpws.Cells(Rows.Count, 1).End(xlUp).Row)
    Set range3 = fdws.Range("A1:A" & fdws.Cells(Rows.Count, 1).End(xlUp).Row) '<<EDIT

    For Each c In range1.Cells
        v = c.Text
        'look for matches in the other sheets
        m1 = Application.Match(v, range2, 0)
        m2 = Application.Match(v, range3, 0)

        If Not IsError(m1) And Not IsError(m2) Then
            'got two matches...
            c.Interior.Color = RGB(255, 255, 0)
        End If
    Next c

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...