Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1800to1804
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Doppelte Werte aus Array ausfiltern
04.01.2021 12:53:41
Marc
Hallo zusammen,
zunächst allen mal ein gutes neues Jahr 2021!
Auch im 2021 brauche ich leider bereits wieder Eure Hilfe. Ich habe in einem bestehenden "Programm" bisher ein Array "arrTemp" erstellt, in dem aber leider doppelte Einträge vorkommen. Dieses Problem habe ich bisher erfolgreich mittels dem folgenden Code erledigt:
Dim objArrLst       As Object
Set objArrLst = CreateObject("System.collections.arraylist")
For lIndex = 0 To UBound(arrTemp)
If objArrLst.Contains(arrTemp(lIndex, 9)) = False Then
objArrLst.Add arrTemp(lIndex, 9)
End If
Next
With objArrLst
.Sort
arrTemp2 = .ToArray
End With

Danach habe ich das neue Array "arrTemp2" (das ja nur Eindimensional ist) mit dem Array "arrTemp" verglichen und in einem neuen Ziel-Array (Dimensioniert wie arrTemp2) die Daten gespeichert. Das hat bisher wie gesagt funktioniert, nun bekomme ich aber plötzlich eine Fehlermeldung in der Zeile set objArrLst = CreateObject("System.collections.arraylist"). Meine Recherche scheint darauf hinauszulaufen, dass diese Funktion offenbar das .NET-Framework 3.5 voraussetzt, und offenbar hat unsere IT es für sinnvoll erachtet, dieses zu entfernen.
Jetzt bin ich auf der Suche nach einer ähnlich eleganten Lösung, ohne dass ich das bisher wunderbar funktionierende Progrämmchen komplett über den Haufen werden muss. Wer könnte mir da helfen? Danke im Voraus für Eure Bemühungen!
Lg
Marc

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Dictionary-Object
04.01.2021 13:08:42
Rudi
Hallo,
als Anregung

Dim objArrLst As Object
Set objArrLst = CreateObject("sripting.dictionary")
For lIndex = 0 To UBound(arrTemp)
objArrLst(arrTemp(lIndex, 9)) = 0
Next
arrTemp2 = objArrLst.keys

Gruß
Rudi
da fehlte ein c
04.01.2021 13:09:23
Rudi
Hallo,
als Anregung

Dim objArrLst As Object
Set objArrLst = CreateObject("scripting.dictionary")
For lIndex = 0 To UBound(arrTemp)
objArrLst(arrTemp(lIndex, 9)) = 0
Next
arrTemp2 = objArrLst.keys

Gruß
Rudi
AW: da fehlte ein c
04.01.2021 13:30:47
Marc
Hallo Rudi,
danke Dir für die schnelle Antwort, das versuche ich gleich. Nur eine Nachfrage, die Zeile
objArrLst(arrTemp(lIndex, 9)) = 0

verstehe ich nicht. Kann das sein, das dies ein Tippfehler ist? Oder wie muss ich das verstehen?
Lg Marc
Anzeige
AW: da fehlte ein c
04.01.2021 14:07:47
Daniel
Hi
Ein Dictionary ist im Prinzip ein eindimensionales Array, bei dem der Index durch einen Beliebigen Freitext gebildet wird.
Der Index wird dann Key genannt.
Man erzeugt hier einen neuen Eintrag, indem man einfach dem Index einen beliebigen Wert zuweist.
Ist der Index schon vorhanden, wird der vorhandene Wert überschrieben, fehlt er, wird er neu angelegt.
Somit ist die Liste der Keys immer eindeutig und man verwendet diese gant gerne, um Duplikate zu entfernen.
Allerdings kann man hier nicht sortieren.
Ich würde an deiner Stelle das ursprüngliche arrTem in eine freie Stelle auf einem Excelblatt einfügen, dort sortieren und das Duplikate entfernen anwenden und dann wiedrr ins Array einlesen, wenn du die Liste sortiert und Duplikatfrei brauchst.
Gruß Daniel
Anzeige
AW: da fehlte ein c
04.01.2021 14:25:17
Marc
Hallo Daniel,
danke Dir, das war bisher die beste (resp. verständlichste) Erklärung für ein Dictionary, so verstehe ich das auch gleich besser.
Sortieren ist für mich zum Glück eigentlich unwichtig, ich hole die Daten vorher sowieso mit einer SQL-Abfrage aus einer Access-Datenbank, ich sortiere dies einfach bereits dort;-). Aber danke für den Tipp!
AW: da fehlte ein c
04.01.2021 14:20:30
Marc
Hallo Rudi,
nochmals danke, Du hast mir geholfen, mein Problem zu lösen. Auf Dictionary bin ich zwar auch bereits gekommen, aber speziell, dass man mit arr = obj.keys das Ganze in ein Array umfrachten kann, war mir nicht bewusst. Der Vollständigkeit halber (ev. hat ja mal jemand ein ähnliches Problem) anbei mein funktionierender Code:
Dim objArrLst       As Object
Set objArrLst = CreateObject("scripting.dictionary")
For lIndex = 0 To UBound(arrTemp)
If Not objArrLst.exists(arrTemp(lIndex, 9)) Then
objArrLst.Add arrTemp(lIndex, 9), lIndex
End If
Next
arrTemp2 = objArrLst.keys
Set objArrLst = Nothing
Lg Marc
Anzeige

102 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige