У меня есть большая таблица с возможными дублирующимися строками. Однако меня интересует только сопоставление некоторых столбцов, как показано желтым цветом ниже.

Итак, мой вопрос: как я могу искать дубликаты только в определенных столбцах строки и, когда я нахожу совпадение, выделять их?

2 ответа2

1

Я бы добавил новый столбец и использовал столбец CONCATENATE, чтобы объединить 2-й и 3-й столбцы. Если ваша первая ячейка - A1, формула будет такой:

=CONCATENATE(B1," ",C1)

Затем на домашней ленте я бы выбрал Условное форматирование / Правила выделения ячеек / Дублирующие значения.

Вот картина окончательного результата:

1

Это делает именно то, что вы хотите, основываясь на снимке экрана, который вы дали

До

И после того, как я нажимаю кнопку "выделить дупс"

Верхняя часть - это бит, который вы можете настроить. В данный момент я смотрю на Col A и B, но вы можете обновить это, чтобы посмотреть Cols B и C или A и D и т.д.

Я также предоставил подробности и ссылку, чтобы повлиять на цвет подсветки (снова см. Комментарии в коде)

Sub HighlightDuplicates()

    Dim transparent As Integer
    transparent = -4142 

    Dim yellow As Integer
    yellow = 27 ' colour index, see http://dmcritchie.mvps.org/excel/colors.htm for more details about setting the colour

    Dim column1 As String
    column1 = "A" 'Update me if you don't want to check for dupes in the A column

    Dim column2 As String
    column2 = "B" 'Update me if you don't want to check for dupes in the B column

    Dim endOfRows As Boolean
    moreRows = True

    Dim currentCell As Integer
    currentCell = 0

    Do While (moreRows)

        currentCell = currentCell + 1

        Dim aValue As String
        Dim bValue As String

        aValue = Worksheets("Sheet1").Range(column1 & currentCell).Value
        bValue = Worksheets("Sheet1").Range(column2 & currentCell).Value

        'check it isn't already coloured
        If (Worksheets("Sheet1").Range(column1 & currentCell).Interior.ColorIndex = transparent) Then

            Dim moreInnerRows As Boolean
            moreInnerRows = True

            Dim currentInnerCell As Integer
            currentInnerCell = currentCell

            Dim isDupe As Boolean
            isDupe = False
            'Now to loop through the other rows

            Do While (moreInnerRows)
                currentInnerCell = currentInnerCell + 1

                If (Worksheets("Sheet1").Range(column1 & currentInnerCell).Value = "" And Worksheets("Sheet1").Range(column2 & currentInnerCell).Value = "") Then
                    Exit Do
                End If

                If Worksheets("Sheet1").Range(column1 & currentInnerCell).Value = aValue And Worksheets("Sheet1").Range(column2 & currentInnerCell).Value = bValue Then
                    isDupe = True
                    Worksheets("Sheet1").Range(column1 & currentInnerCell).Interior.ColorIndex = yellow
                    Worksheets("Sheet1").Range(column2 & currentInnerCell).Interior.ColorIndex = yellow

                End If

            Loop

            If (isDupe = True) Then
                'Now we mark the original row as a dupe
                Worksheets("Sheet1").Range(column1 & currentCell).Interior.ColorIndex = yellow
                Worksheets("Sheet1").Range(column2 & currentCell).Interior.ColorIndex = yellow

            End If

        End If

        If (Worksheets("Sheet1").Range(column1 & currentCell).Value = "" And Worksheets("Sheet1").Range(column2 & currentCell).Value = "") Then
            Exit Do
        End If


    Loop

End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .