Kategorie szkoleń | Egzaminy | Kontakt
  • 2
  • 2
  • 415

Potrzebuje po dodaniu danych do tablicy z arkusza Excel usunąć te elementy które są zduplikowane. Chciałbym dokonać tego na poziomie tablicy nie zmieniając danych z arkusza. W późniejszym etapie będę potrzebował porównać te tablice z inną tablicą w celu odnalezienia elementów występujących w obu tablicach, tylko w pierwszej, tylko w drugiej tablicy.

 

Sub duplikaty()
Dim poArr() As Variant ' declare an unallocated array.
poArr = Range("A2:A546") ' poArr is now an allocated array
poArr = eliminateDuplicate(poArr)

Set Destination = Worksheets(2).Range("K1")
Destination.Resize(UBound(poArr, 1), UBound(poArr, 2)).Value = poArr

End Sub


Public Function eliminateDuplicate(poArr As Variant) As Variant
Dim poArrNoDup()

    dupArrIndex = -1
For i = LBound(poArr) To UBound(poArr)
        dupBool = False

        For j = LBound(poArr) To i
            If poArr(i) = poArr(j) And Not i = j Then
                dupBool = True
            End If
        Next j

        If dupBool = False Then
            dupArrIndex = dupArrIndex + 1
            ReDim Preserve poArrNoDup(dupArrIndex)
            poArrNoDup(dupArrIndex) = poArr(i)
        End If
Next i

eliminateDuplicate = poArrNoDup
End Function

 

W trakcie uruchamiania procedury otrzymuję następujący błąd:

"Run time error "9". Subscript out of range.

 

Załączniki

  • xlsm

    Duplikaty.xlsm ( 24K )
Jacek_Kurowski
  • Zapytał
  • @ Jacek_Kurowski | 11.10.2015
    • 3
    • 1
    • 0

Odpowiedzi (2)

  • 1

Błąd wykonania nr. 9 zawsze wiąże się z użyciem nieistniejącego indeksu w tablicy lub kolekcji, więc tu trzeba szukać źródła błędu.

A tak nawiasem mówiąc nie lepiej użyć Excelowego gotowego narzędzia do usuwania duplikatów?

  • Odpowiedział
  • @ | 19.10.2015
  • TRENER ALTKOM AKADEMII
  • 1

Ja usuwam jest w następujący sposób.

Zbieram wszystkie dane do tablicy, następnie przenoszę je do osobnego, nowego arkusza i używam defaultowego usuwania duplikatów:

np.: 

ThisWorkbook.Sheets(1).Range("A:A").RemoveDuplicates Columns:=1, Header:=xlNo

Michał_Gwiazdonik
  • Odpowiedział
  • @ Michał_Gwiazdonik | 29.03.2016
    • lider
    • laureat
    • 13
    • 9
    • 51