Duplikate aus einem Array entfernen OHNE den Inhalt des Array's ausgeben zu müssen...?

  • Excel

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Duplikate aus einem Array entfernen OHNE den Inhalt des Array's ausgeben zu müssen...?

    Hallo liebes Forum!

    Mich würde mal interessieren, ob es einen Befehl bzw. eine Methode gibt, wie ich innerhalb eines Array redundante Werte löschen kann...

    Also z.b. ein 1-dimensionales Array hätte folgende Werte...:

    a
    b
    c
    d
    a
    c
    e
    f
    a


    Wenn ich jetzt nur Unikate haben möchte, wäre das Ergebnis:

    a
    b
    c
    d
    e
    f

    Bis jetzt habe ich das immer so gelöst, dass ich den Inhalt des Arrays im Excel ausgegeben habe (hier z.b. A1:A9) und hier, mit

    Visual Basic-Quellcode

    1. .Range("A1:A9").RemoveDuplicates
    die Duplikate entfernt habe....
    Dann habe ich die Unikate erneut in ein Array eingelesen....

    Ich würde jz aber gerne wissen, ob ich mir diesen Schritt irgendwie ersparen kann und direkt im Array Duplikate Werte entfernen kann....

    Geht das irgendwie? - Oder kommt man ums ausgeben nicht drum herum??


    Freu mich auf eure Meinungen...


    DANKE!


    VG Tim
    Ich mag Arrays nicht besonders.
    Das fängt schon damit an, dass du bei Arrays permanent die Größe anpassen musst.

    Deshalb nehme ich für solche Dinge lieber Collections.

    Visual Basic-Quellcode

    1. Option Explicit
    2. Sub Test()
    3. Dim a: a = Array("a", "b", "c", "a", "c", "d")
    4. Dim b As Collection: Set b = UniqueCollectionFromArray(a)
    5. End Sub
    6. Function UniqueCollectionFromArray(ByVal a As Variant) As Collection
    7. Dim coll As New Collection, Element
    8. For Each Element In a
    9. AddUnique coll, Element
    10. Next
    11. Set UniqueCollectionFromArray = coll
    12. End Function
    13. Sub AddUnique(ByVal coll As Collection, ByVal Value As Variant)
    14. On Error GoTo Done
    15. coll.Add Value, Value
    16. Done:
    17. End Sub

    Wenn du unbedingt willst, kannst du ja die Collection wieder in ein Array umwandeln.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    hmmm... ok, danke euch!!

    hab auch zu petaod's Anmerkung (gleiches Prinzip) gerade folgenden link entdeckt:

    dailydoseofexcel.com/archives/…e-items-with-collections/

    Ich finds trotzdem schade, dass man die .removeduplicates nicht irgendwie auf ein Array anwendbar ist... bzw. dass es da von VBA aus keine stadard Funktion etc. gibt... - hätte mich nämlich echt interessiert, wenn's da was geben würde..

    aber geht ja anders auch...

    Vielen Dank!

    VG Tim

    Rainman schrieb:

    List(Of String)
    .Distinct
    Kennt VBA beides nicht.
    Bei .Net kein Problem.

    ereza schrieb:

    .removeduplicates nicht irgendwie auf ein Array anwendbar ist... bzw. dass es da von VBA aus keine stadard Funktion etc. gibt
    Es ist halt eine reine Excel-Methode, die nur auf dem Worksheet selbst arbeitet.
    Da gibt's viele davon (Sort, Filter...)

    Es gibt wenige Programmiersprachen, die solche Funktionen direkt an Bord haben.
    Auch bei VB.Net ist die .Distinct-Funktion nicht im Basis-Sprachumfang, sondern nur in der LINQ-Erweiterung enthalten.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --