2

I am trying to go through an array to find duplicate entries in a single column of that array and delete the entire row.

I am getting figuring out rangeStart, rangeEnd, and lastrow above this and that part is working fine.

data = Range(rangeStart, rangeEnd)

For i = lastrow - 1 To 2 Step -1
    If data(i - 1, x) = data(i, x) Then
        'Delete data(i)
    End If
Next

Any help with this would be awesome!

Teamothy
  • 2,000
  • 3
  • 16
  • 26
CongdonJL
  • 139
  • 2
  • 3
  • 10

3 Answers3

3
Sub RemoveDups()
Const COMPARE_COL as Long = 1
Dim a, aNew(), nr As Long, nc As Long
Dim r As Long, c As Long, rNew As Long
Dim v As String, tmp

    a = Selection.Value
    nr = UBound(a, 1)
    nc = UBound(a, 2)

    ReDim aNew(1 To nr, 1 To nc)
    rNew = 0
    v = Chr(0)

    For r = 1 To nr
        tmp = a(r, COMPARE_COL)
        If tmp <> v Then
            rNew = rNew + 1
            For c = 1 To nc
                aNew(rNew, c) = a(r, c)
            Next c
            v = tmp
        End If
    Next r

    Selection.Value = aNew

End Sub
Tim Williams
  • 154,628
  • 8
  • 97
  • 125
0

Does this help?:

If data(i - 1, x) = data(i, x) Then
    data(i,x).EntireRow.Delete
End If
hstay
  • 1,439
  • 1
  • 11
  • 20
0

Why not use Excel's inbuilt Unique options (Data ... Remove Duplicates)?

Another efficient VBA method is to use a Dictionary.

Sub A_Unique_B()

Dim X
Dim objDict As Object
Dim lngRow As Long

Set objDict = CreateObject("Scripting.Dictionary")
X = Application.Transpose(Range([a1], Cells(Rows.Count, "A").End(xlUp)))

For lngRow = 1 To UBound(X, 1)
    objDict(X(lngRow)) = 1
Next

Range("B1:B" & objDict.Count) = Application.Transpose(objDict.Keys)
End Sub
brettdj
  • 54,857
  • 16
  • 114
  • 177