сравнить столбец с уникальным идентификатором в VBA Excel - PullRequest
0 голосов
/ 15 ноября 2018

Мне нужно сравнить данные с уникальным идентификатором, который представляет собой конкатенацию (столбец A, "~" столбец B), и сохранить их в столбце F. Найдите все повторяющиеся значения в ColumnF, который будет использоваться в качестве основы для сравнения.в другие столбцы (столбец C, столбец D и столбец E).Например,

enter image description here

В моем примере у меня есть повторяющееся значение 5 * 2018 ~ OPS $ CABUCKLE, в этом случае я буду сравнивать каждый столбециспользуя идентификатор.В моей 1-й записи столбец C имеет то же значение во 2-й записи, которое равно 222, но в столбце D значение 1-й записи равно N, и оно было изменено на Y во 2-й записи.Тот же самый случай в столбце E. Мне нужно выделить изменения, произошедшие между записями.

Я выполнил только конкатенацию в VBA, но я не знаю, как найти дублирующее значение и сравнить другой столбец?

Sub split1()
    Dim ws As Worksheet, lRow As Long
    Dim x As Long

    Set ws = ThisWorkbook.ActiveSheet
    lRow = ws.Cells(Rows.Count, 1).End(xlUp).Row

    With ws
        For x = 1 To lRow
            For Each wrd In .Cells(x, 1)
                d = wrd 
                For Each nm In .Cells(x, 2)
                    .Cells(x, 6).Value = d & "*" & nm
                Next nm
            Next
        Next x
    End With
End Sub

1 Ответ

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

Это может достичь того, что вы ищете, дайте мне знать, если что-то пропустит

Только не забудьте зайти в Инструменты> Ссылки и проверить «Microsoft Scripting Runtime»

Sub highlight()

    ' need to include Microsoft Scripting Runtime in Tools > References
    Dim prevIDs As Scripting.Dictionary: Set prevIDs = New Scripting.Dictionary
    Dim ws As Worksheet: Set ws = ThisWorkbook.ActiveSheet
    Dim lastRow As Long
    Dim oldRow As Long
    Dim row As Long
    Dim id As String

    With ws
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).row
        For row = 2 To lastRow
            ' set lookup value
            .Cells(row, "F").Value = Trim(CStr(.Cells(row, "A").Value)) & "~" & Trim(CStr(.Cells(row, "B").Value))
            id = .Cells(row, "F").Value
            If prevIDs.Exists(id) Then
                ' get previously found row
                oldRow = prevIDs(id)
                If .Cells(row, "C").Value = .Cells(oldRow, "C").Value Then
                    ' only checks if col D doesn't match --  can change to check both
                    If .Cells(row, "D").Value <> .Cells(oldRow, "D").Value Then
                        .Range("D" & row & ":E" & row).Interior.Color = RGB(100, 200, 100)
                        .Range("D" & oldRow & ":E" & oldRow).Interior.Color = RGB(100, 200, 100)
                    End If
                End If
                ' reset last found row
                prevIDs(id) = row
            Else
                prevIDs.Add id, row
            End If
        Next
    End With
End Sub

Вот мой тест:

enter image description here

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