简体   繁体   中英

Delete Row from Array

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!

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

Does this help?:

If data(i - 1, x) = data(i, x) Then
    data(i,x).EntireRow.Delete
End If

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM