Jak usunąć zduplikowane wiersze na podstawie niektórych kolumn


11

Mam arkusz programu Excel, który zawiera zduplikowane wiersze

Chcę usunąć wiersz, jeśli jego kolumny ACDEF są takie same (zignoruj ​​B podczas obliczania duplikatów, ale usuń go podczas usuwania wiersza)

W tej chwili ignoruje B zarówno podczas porównywania, jak i usuwania.


Czy możesz dodać zrzut ekranu przed i pożądany po? Próbuję sobie wyobrazić, czego potrzebujesz (przepraszam)
Dave

Czy więc jakiekolwiek zduplikowane wartości w kolumnach A, C, D, E, F spowodują usunięcie całego wiersza, zachowując pierwszą instancję duplikatu? Co się stanie, jeśli A1 pasuje do A2, ale C2 pasuje do C3, czy wiersz 2 zostanie usunięty?
Raystafarian

Odpowiedzi:


18

W programie Excel 2013

  1. Wybierz wszystkie dane
  2. Wybierz kartę Dane -> Usuń duplikaty
  3. Zaznacz „Moje kolumny mają nagłówki”, jeśli Twoje dane mają nagłówki kolumn.
  4. Odznacz wszystkie kolumny, których NIE chcesz używać w porównaniu
  5. wciśnij OK

Gotowe


Nie, szuka wierszy podobnych do innych wierszy. Też o tym myślałem, ale jest to rozwiązanie innego pytania :)
Garrulinae

@Garrulinae Co mówisz, czy możesz wyjaśnić, jak to nie działa? To wydaje się poprawna odpowiedź na pytanie OP.
TheCrazyProgrammer

@TheCrazyProgrammer - Patrząc na to ponad 2 lata później, widzę, że pytanie PO „ Chcę usunąć wiersz, jeśli jego kolumny ACDEF są takie same ” można interpretować na dwa różne sposoby. Zrozumiałem, że jeśli te kolumny są takie same w tym wierszu . Ta odpowiedź zakłada, że ​​oznacza to, że wartości w kolumnach w tym wierszu są takie same jak w innym wierszu . Z perspektywy czasu to założenie wydaje się słuszne, zwłaszcza że zostało oznaczone jako poprawna odpowiedź.
Garrulinae

@Garrulinae Gotcha. Teraz widziałem i zrozumiałem twoją odpowiedź. Na marginesie, jestem zaskoczony, że funkcjonalność wymagana przez OP (i mnie) istnieje jako prosty przycisk w Excelu, ale googlowanie daje ci mnóstwo artykułów wykonujących skomplikowane rzeczy, które przez chwilę wzbudziły we mnie wątpliwości.
TheCrazyProgrammer

@TheCrazyProgrammer, mam też notatkę dodatkową - dopiero co zrozumiałem, że to OP opublikował tę odpowiedź! To oczywiście poprawna odpowiedź, ale szkoda, że ​​pytanie nie było bardziej jasne.
Garrulinae

1

Jeśli dobrze cię zrozumiałem, biorąc pod uwagę wiersze 1 i 2, chcesz usunąć wiersz 2 wtedy i tylko wtedy, gdy A1 = A2, C1 = C2, D1 = D2, E1 = E2 i F1 = F2.

Właśnie to wymyśliłem. Prawdopodobnie może być krótszy, ale załatwia sprawę:

Sub DeleteDuplicate()
Dim current As String
ActiveSheet.Range("A1").Activate
Do While ActiveCell.Value <> ""
    current = ActiveCell.Address
    ActiveCell.Offset(1, 0).Activate
    Do While ActiveCell.Value <> ""
        If ((ActiveSheet.Range(current).Value = ActiveCell.Value) And (ActiveSheet.Range(current).Offset(0, 2).Value = ActiveCell.Offset(0, 2).Value) And (ActiveSheet.Range(current).Offset(0, 3).Value = ActiveCell.Offset(0, 3).Value) And (ActiveSheet.Range(current).Offset(0, 4).Value = ActiveCell.Offset(0, 4).Value) And (ActiveSheet.Range(current).Offset(0, 5).Value = ActiveCell.Offset(0, 5).Value)) Then
            ActiveSheet.Rows(ActiveCell.Row).Delete
        Else
        ActiveCell.Offset(1, 0).Activate
        End If
    Loop
    ActiveSheet.Range(current).Offset(1, 0).Activate
Loop
End Sub

To robi pętlę przez wszystkie pozostałe linie za pomocą ActiveCell jako wskaźnika do ocenianego wiersza i zapisując „oryginalną” komórkę wiersza w bieżącej zmiennej. Po zakończeniu pętli komórka poniżej prądu zostaje aktywowana, a wewnętrzna pętla oceny rozpoczyna się ponownie.

Jeśli gdzieś coś pomieszałem, nie wahaj się mi powiedzieć :)


1

Dodaj tę formułę do każdego wiersza, np.; w kolumnie G:

=IF(AND(A2=C2,A2=D2,A2=E2,A2=F2),"DELETE ME","")

To da wynik taki jak:

A   B   C   D   D   F   G
-   -   -   -   -   -   -
x   o   x   x   x   x   DELETE ME
x   x   x   x   x   o   
x   x   x   x   x   x   DELETE ME
x   o   o   x   x   x   

Następnie utwórz filtr w kolumnie G dla wierszy z napisem „DELETE ME” i usuń je.


0

@ Garrulinae

Użyłem twojego pomysłu jako inspiracji. Miałem wiele wierszy i chciałem usunąć wiersze zawierające zduplikowane wartości kolumny. Jeśli użyję opcji Usuń duplikaty w tej kolumnie, spowoduje to usunięcie tylko danych z tej kolumny, a nie całego wiersza. Chciałem usunąć każdy drugi i trzeci wiersz z całej tabeli. Tak więc, co zrobiłem, utworzyłem nową kolumnę i pozostawiłem pustą wartość pierwszego wiersza, umieszczając mnie w drugim i trzecim wierszu. A potem skopiowałem wartości tylko trzech pierwszych wierszy tej konkretnej kolumny (nie całego wiersza) i wkleiłem całą kolumnę tabeli. Teraz miałem „usuń mnie” w każdym drugim i trzecim rzędzie całej kolumny. Następnie muszę tylko posortować wartości tej kolumny i usunąć wszystkie wiersze zawierające delete me. Możesz użyć tego samego rozwiązania, jeśli chcesz usunąć co 2, 3 i 4 lub 2, 3, 4 i 5 itd. ...

Mam nadzieję, że to pomoże komuś ....


2
Nie do końca rozumiem, co mówisz. Zamiast opisywania tego, co zrobiłeś, możesz pokazać nam, jakich formuł użyłeś, i przedstawić przykładowe dane oraz pokazać, jak działa twoja odpowiedź na tych danych?
Scott
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.