Как удалить повторяющиеся строки на основе некоторых столбцов

11

У меня есть лист Excel, который содержит повторяющиеся строки

Я хочу удалить строку, если столбцы ACDEF совпадают (игнорировать B при вычислении дубликатов, но удалить при удалении строки)

На данный момент он игнорирует B при сравнении, а также при удалении.

user33949
источник
Можете ли вы добавить снимок экрана с до и желаемым после? Я изо всех сил пытаюсь изобразить то, что вам нужно (извините)
Дейв
Таким образом, любые повторяющиеся значения в столбцах A, C, D, E, F приведут к удалению всей строки, сохраняя первый экземпляр дубликата? Что если A1 соответствует A2, но C2 соответствует C3, удаляется ли строка 2?
Raystafarian

Ответы:

18

В Excel 2013

  1. Выбрать все данные
  2. Выберите вкладку «Данные» -> «Удалить дубликаты».
  3. Отметьте «Мои столбцы имеют заголовки», если ваши данные имеют заголовки столбцов.
  4. Снимите отметки со всех столбцов, которые вы НЕ хотели бы использовать в сравнении
  5. Нажмите ОК

Выполнено

user33949
источник
Нет, это ищет строки, которые похожи на другие строки. Я тоже думал об этом, но это решение другого вопроса :)
Garrulinae
@Garrulinae Что вы говорите, вы можете объяснить, как это не работает? Кажется, правильный ответ на вопрос ОП.
TheCrazyProgrammer
@TheCrazyProgrammer - Глядя на это более 2 лет спустя, я вижу, что вопрос ОП « Я хочу удалить строку, если столбцы ACDEF одинаковы », можно интерпретировать двумя различными способами. Я понял, что если эти столбцы совпадают друг с другом в этой строке . Этот ответ предполагает, что это означает, что значения в столбцах этой строки совпадают с другой строкой . Оглядываясь назад, это предположение представляется верным, тем более что оно было помечено как правильный ответ.
Garrulinae
@Garrulinae Gotcha. Теперь я увидел и понял твой ответ. Кроме того, я удивлен, что функциональность, требуемая OP (и мне), существует в виде простой кнопки в Excel, но поиск в Google дает вам кучу статей, делающих сложные вещи, которые на мгновение заставили меня усомниться в этом ответе.
TheCrazyProgrammer
@TheCrazyProgrammer, у меня также есть примечание - я только что понял, что это был ОП, который отправил этот ответ! Это, конечно, правильный ответ, но обидно, что вопрос не был более ясным.
Garrulinae
1

Если я вас правильно понял, учитывая строки 1 и 2, вы хотите удалить строку 2 тогда и только тогда, когда A1 = A2, C1 = C2, D1 = D2, E1 = E2 и F1 = F2.

Это то, что я придумал. Это может быть короче, но это делает свое дело:

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

Это делает цикл по всем оставшимся строкам, используя ActiveCell в качестве указателя на оцениваемую строку и сохраняя «оригинальную» ячейку строки в текущей переменной. Как только цикл заканчивается, ячейка ниже тока активируется, и внутренний цикл оценки запускается снова.

Если я что-то напутал, не стесняйтесь, сообщите мне :)

kenkh
источник
1

Добавьте эту формулу в каждую строку, например; в колонке G:

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

Это даст результат как:

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   

Затем создайте фильтр в столбце G для строк с надписью «УДАЛИТЬ МЕНЯ» и удалите их.

Garrulinae
источник
0

@ Garrulinae

Я использовал вашу идею как вдохновение. У меня было много строк, и я хотел удалить строки, содержащие повторяющиеся значения столбца. Если я использую Удалить дубликаты над этим столбцом, он будет удалять только данные из этого столбца, а не всю строку. Я хотел удалить каждую 2-ю и 3-ю строку из всей этой таблицы. Итак, что я сделал, я создал новый столбец и оставил значение первой строки пустым, а затем удалите меня во второй и третьей строке. Затем я скопировал значения первых трех строк только этого конкретного столбца (не всей строки) и вставил весь столбец таблицы. Теперь я должен был «удалить меня» в каждом 2-м и 3-м ряду всего столбца. Тогда мне просто нужно отсортировать значения этого столбца и удалить все строки, содержащие delete me. Вы можете использовать одно и то же решение, если хотите удалять каждые 2-й, 3-й и 4-й или 2-й, 3-й, 4-й и 5-й и т. Д. ...

Надеюсь, это поможет кому-то ....

Сунил
источник
2
Я не совсем понимаю, что вы говорите. Вместо того, чтобы описать, что вы сделали, можете ли вы показать нам, какую формулу (ы) вы использовали, и представить некоторые примеры данных, и показать, как ваш ответ работает с этими данными?
Скотт