Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1272to1276
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
Inhaltsverzeichnis

ScreateObject("Scripting.Dictionary") Daten zuord.

ScreateObject("Scripting.Dictionary") Daten zuord.
Peter
Guten Tag
Erich G. hat mir einen Code zusammengestellt (vielen Dank!), den ich etwas angepasst habe und der nun wie unten aufgeführt aussieht.
Das klappt alles wunderbar, nur habe ich noch zwei Sonderprobleme:
A) Manchmal enthält der Bereich [_Attname] nur eine Zelle, dann stopt der Code bei oDic(arQ(zz, 1)) = 0
B) Der Bereich [_Attname] ist in der Regel ein zusammenhängender Bereich in einer Spalte. Im Moment gibt es Probleme, wenn es nicht ein zusammenhängender Bereich ist, z.B. $E$11:$E$17,$E$24. Ist es möglich auch der Variable oDic die Werte von [_Attname] zuzuweisen, wenn dieser Bereich nicht zusammenhängend ist?
Vielen Dank und
Gruss, Peter
Sub ListeSortOhneDup()
''''Daten werden aus Spaltenbereich übernommen, sortiert und mehrfach Vorhandene eliminiert
Dim arQ, oDic as Object, zz As Long, arZ
arQ = [_Attname].Value
Set oDic = CreateObject("Scripting.Dictionary")
For zz = 1 To [_Attname].Cells.Count
oDic(arQ(zz, 1)) = 0 '''hier
Next
arZ = QuickSort(oDic.keys)
''''' jetzt steht die Liste in arZ(0) bis arZ(oDic.Count - 1)
For zz = 0 To oDic.Count - 1
Debug.Print zz & " / " & arZ(zz)
Next zz
End Sub
Public Function QuickSort(vSort As Variant, _
Optional ByVal lngStart As Variant, _
Optional ByVal lngEnd As Variant)
Dim i As Long
Dim J As Long
Dim h As Variant
Dim X As Variant
If IsMissing(lngStart) Then lngStart = LBound(vSort)
If IsMissing(lngEnd) Then lngEnd = UBound(vSort)
i = lngStart: J = lngEnd
X = vSort((lngStart + lngEnd) / 2)
Do
While (vSort(i)  X): J = J - 1: Wend
If (i  J)
If (lngStart 

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: CreateObject("Scripting.Dictionary") Daten zu
09.08.2012 12:42:44
Christian
Hallo Peter,
zu A:
wenn der Bereich nur eine Zelle umfasst, dass ergibt "arQ = [_Attname].Value" kein Array sondern nur den Wert dieser Zelle. Aber bei einer Zelle brauchst ja eh nicht sortieren oder doppelte eliminieren. Also vorher abfangen zB mit "If [_Attname].Cells.Count > 1 Then"
zu B:
mit "arQ = [_Attname].Value" werden die Werte eines Bereichs auf einen Schlag in ein Array geschrieben. Wenn der Bereich zusammengesetzt ist, funktioniert das offensichtlich nicht - kannst du im Lokalfenster überprüfen. Daher musst du die Zellen des Bereichs einzeln durchlaufen.
zB:

Dim rng as Range
If Instr([_Attname].Address, ",") > 0 Then
For Each rng in [_Attname]
oDic(rng.Value) = 0
Next
End If

Gruß
Christian
PS: ich würde auf die Darstellung in eckigen Klammern verzichten.
Anzeige
AW: CreateObject("Scripting.Dictionary") Daten zu
09.08.2012 15:13:41
Peter
Hallo Christian
vielen Dank für deine Antwort
Gruss, Peter
Daten ohne Dubletten sortieren
09.08.2012 13:28:13
Erich
Hi Peter,
hatten wir das nicht beides schon in https://www.herber.de/forum/archiv/1268to1272/t1271860.htm#1271911 ?

Option Explicit
Sub ListeSortOhneDup3()
''''Daten werden aus Spaltenbereich übernommen, sortiert und mehrfach Vorhandene eliminiert
Dim zz As Long, arZ
arZ = OhneDupSort(Range("_Attname"))
For zz = 0 To UBound(arZ)
Debug.Print zz & " / " & arZ(zz)
Next zz
End Sub
Function OhneDupSort(rngBereich As Range)
Dim oDic As Object, rngA As Range, arQ, zz As Long
Set oDic = CreateObject("Scripting.Dictionary")
For Each rngA In rngBereich.Areas
If rngA.Count = 1 Then
oDic(rngA.Value) = 0
Else
arQ = rngA.Value
For zz = 1 To UBound(arQ)
oDic(arQ(zz, 1)) = 0
Next zz
End If
Next rngA
OhneDupSort = QuickSort(oDic.keys)
End Function
Das funzt mit Mehrfachselektion (wg. der Areas) und funzt, wenn der Bereich aus nur 1 Zelle besteht.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
AW: Link nochmal
09.08.2012 15:16:37
Peter
Hallo Erich
Tatsächlich. Das ist für mich sehr peinlich, anscheinend hatte ich diesen Beitrag nicht mehr verarbeitet - und vielleicht spricht es auch für gute Erholung - seither war ich zwei Wochen in den Ferien im Vorarlberg - und alles vergessen ...?
Nochmals ganz herzlichen Dank!
Peter
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen