Удаление дубликатов при игнорировании пустых ячеек в VBA - PullRequest
0 голосов
/ 08 марта 2019

У меня есть код в VBA, который пытается удалить дубликаты идентификаторов транзакций.Однако я хотел бы изменить код так, чтобы он удалял только дубликаты с идентификатором транзакции, поэтому, если идентификатор транзакции отсутствует, я бы хотел, чтобы эту строку оставили в покое.Вот мой код ниже:

With MySheet
    newLastRow = .Range("A" & .Rows.Count).End(xlUp).Row
    newLastCol = .Cells(5 & .Columns.Count).End(xlToLeft).Column
    Set Newrange = .Range(.Cells(5, 1), .Cells(newLastRow, newLastCol))
    Newrange.RemoveDuplicates Columns:=32, Header:= _
        xlYes
End With

Мне также было интересно - в команде remove.duplicates - есть ли способ, где можно получить имя столбца, на который я хочу посмотреть, а не 32?в случае, если я добавлю или уберу столбцы позже?Вот изображение данных: я бы хотел, чтобы столбец ExchTransID, у которого есть эти 3 пробела, оставлен в покое.enter image description here

1 Ответ

0 голосов
/ 09 марта 2019

Измените и попробуйте следующее:

Option Explicit

Sub test()

    Dim Lastrow As Long, Times As Long, i As Long
    Dim rng As Range
    Dim str As String

    'Indicate the sheet your want to work with
    With ThisWorkbook.Worksheets("Sheet1")
        'Find the last row with IDs
        Lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
        'Set the range with all IDS
        Set rng = .Range("A1:A" & Lastrow)
        'Loop column from buttom to top
        For i = Lastrow To 1 Step -1
            str = .Range("A" & i).Value
            If str <> "" Then
                Times = Application.WorksheetFunction.CountIf(rng, str)
                If Times > 1 Then
                    .Rows(i).EntireRow.Delete
                End If
            End If
        Next i
    End With
End Sub
...