У меня есть следующие два столбца данных:

Location    Value
    A         1
    A         1
    B         2
    C         2
    D         3
    D         3
    E         4
    E         4
    F         5
    G         5

Если есть дублирующая комбинация Location и Value , она должна быть УДАЛЕНА. Если я использую опцию удаления дубликатов, дубликаты удаляются, но сохраняет одно из повторяющихся значений, и это мне не выгодно. Мой предполагаемый вывод:

Location    Value
    B         2
    C         2
    F         5
    G         5

Вот что я думал и пробовал до сих пор:

Я объединил два столбца и затем использовал COUNTIF чтобы получить количество повторений значения. Затем я могу отфильтровать столбец подсчета, считая только число, равное 1. Это показано здесь:

Мой метод

Тем не менее, мой метод не является возможным из-за различных других фильтров и сортировки, что было сделано в моей электронной таблице.

Есть ли другие предложения для достижения таких же результатов, как у меня?

1 ответ1

0

Используя VBA:

Public Function allDuplicates()
    Dim a As Application
    Set a = Application
    Dim arrayRows() As Boolean
    maxCol = 2
    firstRow = 2
    Dim wks As Worksheet
    Set wks = ActiveSheet
    wks.Application.ScreenUpdating = False
    totalRows = wks.Cells(Rows.Count, "A").End(xlUp).Row
    ReDim arrayRows(totalRows)
    For i = firstRow To totalRows
        theRow = Join(a.Transpose(a.Transpose(wks.Range(Cells(i, 1), Cells(i, maxCol)))), Chr(0))
        For j = i + 1 To totalRows
            theOtherRow = Join(a.Transpose(a.Transpose(wks.Range(Cells(j, 1), Cells(j, maxCol)))), Chr(0))
            If theRow = theOtherRow Then
                arrayRows(i) = True
                arrayRows(j) = True
            End If
        Next j
    Next i
    For i = firstRow To totalRows
        If arrayRows(i) = True Then
            wks.Rows(i).Clear
        End If
    Next i
    Range("A1:B" & totalRows).Sort key1:=Range("A2:A" & totalRows), order1:=xlAscending, Header:=xlYes
    wks.Application.ScreenUpdating = True
    Message = MsgBox("Finished", vbInformation)
End Function

Откройте Visual Basic /Macros, добавьте модуль в ThisWorkbook, вставьте код с правой стороны и выполните его.

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