Удалить строки на основе повторяющихся значений при сравнении двух ячеек строки с ячейками ниже ряда в той же колонке в электронной таблице - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь удалить (в основном) дублирующиеся строки из очень большой электронной таблицы.

Я могу сказать, что строка дублируется, если значения в двух ячейках в строке совпадают.

Вот пример:

1   a   ewq
1   e   weq
1   h   ewq
2   b   ddsfa
2   b   as
2   i   d
3   c   fdsa
3   f   ads
4   d   fd
4   g   as

В этом примере четвертая и пятая строки будут повторяться, поскольку значения в столбце «A» и столбце «B» совпадают.Решающие значения всегда будут находиться в одних и тех же столбцах.

Я хотел бы избавиться от четвертой или пятой строки на основе дублированного статуса и сдвинуть строки вверх.

I 'Я даже не уверен, что это близко, но это то, что у меня пока есть (я получаю ошибку несоответствия):

Sub MasterRemoveDuplicates()
Dim Master As Worksheet

Application.ScreenUpdating = False
Application.DisplayAlerts = False

Set Master = Workbooks("Master.csv").Worksheets("Master")

 Last = 1

For i = 1 To 18211 
If Range("A" & i) And Range("B" & i) <> Range("A" & (i + 1)) And Range("B" & (i + 1)) Then
Worksheets("Master").Rows(Last).Delete Shift:=xlShiftUp
Last = i + 1

Master.Activate
End If
Next i

MsgBox "Completed!", vbInformation, ""

reset_settings:
Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub

Любые мысли о том, как я мог бы достичь этого, были бы очень благодарны!

PS Все в одном листе.

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Вы пытаетесь заново изобрести колесо. Есть готовая команда RemoveDuplicates.

Sub MasterRemoveDuplicates()

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    With Workbooks("Master.csv").Worksheets("Master")

        With .Range(.Cells(1, "A"), .Cells(.Rows.Count, "A").End(xlUp).Offset(0, 2))

            .RemoveDuplicates Columns:=Array(1, 2), Header:=xlNo

        End With

    End With

    MsgBox "Completed!", vbInformation, ""

reset_settings:
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

End Sub
0 голосов
/ 03 января 2019

Вы ошиблись в операторе if

попробуйте это:

    If Range("A" & i) <> Range("A" & (i + 1)) And Range("B" & i) <> Range("B" & (i + 1))    Then
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...