Jak usunąć powtarzające się wartości (#Nie usuwaj zduplikowanych wartości #) w programie Excel?


0

Mam następujące dwie kolumny danych:

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

Jeśli istnieje zduplikowana kombinacja Locationi Value, należy ją usunąć. Jeśli użyję opcji usuwania duplikatów, duplikaty są usuwane, ale zachowuje jedną z powtarzanych wartości, co nie jest dla mnie korzystne. Moje zamierzone wyniki to:

Location    Value
    B         2
    C         2
    F         5
    G         5

Oto, co do tej pory myślałem i próbowałem:

Połączyłem dwie kolumny, a następnie wykorzystałem COUNTIFdo uzyskania liczby powtórzeń wartości. Następnie mogę filtrować kolumnę zliczania, biorąc pod uwagę tylko liczby równe 1. Pokazano to tutaj:

Moja metoda

Jednak ta moja metoda nie jest wykonalna z powodu różnych innych filtrów i sortowania, które zostały wykonane w moim arkuszu kalkulacyjnym.

Czy są jakieś inne sugestie, aby osiągnąć takie same wyniki jak ja?


Nie rozumiem, dlaczego metoda „kolumny pomocniczej” jest niewykonalna. Ale jeśli nie możesz wstawić dodatkowej kolumny, możesz zamiast tego użyć filtra zaawansowanego i albo filtrować na miejscu, albo w nowej lokalizacji. I użyłbym COUNTIFS - wtedy nie trzeba łączyć.
Ron Rosenfeld

Kiedy czytałem twoje pytanie, zacząłem myśleć: „Jak miałbym na to odpowiedzieć?”, A moją odpowiedzią było użycie kolumny pomocniczej do zliczenia unikalnych wartości i filtrowania na niej - dokładnie tego, co zrobiłeś. Nie dam ci lepszej odpowiedzi, jeśli nie wyjaśnisz lepiej, dlaczego to podejście nie działa.
Scott

Odpowiedzi:


0

Korzystanie z 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

Otwórz Visual Basic / Macros, dodaj moduł w ThisWorkbook , wklej kod po prawej stronie i uruchom go.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.