Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Anzahl von Textwerten in Spalte mit VBA

Anzahl von Textwerten in Spalte mit VBA
Textwerten
Hallo Forum,
ich muss aus einer (sehr) langen Liste von unterschiedlichen Text-Werten die Anzahl der einzigartigen Vorkommen ermitteln. Und zwar mit VBA.
Das sieht in etwa wie folgt aus:
AA
BB
CC
AA
AA
BB
Das Ergebnis wäre simple und einfach: 3
Es funktioniert, wenn ich die betreffende Spalte in ein neues Blatt kopiere, dort die Duplikate lösche, dann die Anzahl der verbliebenen Werte ermittle und das neue Blatt wieder lösche.
Aber das ist natürlich sehr unelegant und dauert lange. Gibt es denn nicht eine einfache Scriptlösung, um das zu erreichen?
Vielen Dank für Eure Hilfe!
Anzeige
Dictionary
27.04.2010 17:21:49
Backowe
Hi,
Sub Vergleich()
Dim i As Long
Dim MyDic As Object
Dim myKeys As Variant
Set MyDic = CreateObject("Scripting.Dictionary")
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
If MyDic.exists(CStr(Cells(i, "A"))) = False Then _
MyDic.Add CStr(Cells(i, "A")), ""
Next
i = 1
For Each myKeys In MyDic.Keys
Cells(i, "B") = myKeys
i = i + 1
Next
End Sub

Gruß Jürgen
Anzeige
Du möchtest ja nur die Anzahl, hatte ich überlesen
27.04.2010 17:44:07
Backowe
Hi,
Sub Vergleich()
Dim i As Long
Dim MyDic As Object
Dim myKeys As Variant
Set MyDic = CreateObject("Scripting.Dictionary")
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
If MyDic.exists(CStr(Cells(i, "A"))) = False Then _
MyDic.Add CStr(Cells(i, "A")), ""
Next
i = 0
For Each myKeys In MyDic.Keys
i = i + 1
Next
MsgBox i
End Sub
Gruß Jürgen
Anzeige
ooops ;-)
27.04.2010 18:21:59
ransi
HAllo Jürgen
Das Dictionary ist sauschnell.
Wenn du da jetzt noch Schleifen drüberbügelst ist das mit der Schnelligkeit vorbei.
Ausserdem brauchst du nicht zu prüfeb ob der Wert schon drin ist.
So wird er einfach aufgenommen wenn er nicht drin ist.
Ist er schon in den Keys wird das Item einfach wieder mit 0 überschrieben.
Versuch mal:
Sub Vergleich()
Dim i As Long
Dim MyDic As Object
Set MyDic = CreateObject("Scripting.Dictionary")
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
    MyDic(Cells(i, "A").Value) = 0
Next
MsgBox MyDic.Count
End Sub



ransi
Anzeige
AW: ooops ;-)
27.04.2010 18:24:31
ransi
HAllo Jürgen
Selbst diesen kleinen Code kann man noch optimieren ;-)
ransi
Werde ich in meinem Makro...
27.04.2010 18:37:03
Backowe
Hi ransi,
... auch gleich umsetzen! Bin in dieser Thematik ziemlich unbeleckt! ;-)
Danke für Deinen Support! :)
Gruß Jürgen
Dictionary
27.04.2010 18:30:25
Backowe
Hi ransi,
uups, da hast Du recht, die zweite Schleife ist überflüssig! Mea culpa! :)
Ich habe den Code aus einem Makro von mir kopiert, mit dem ich täglich für einen bestimmten Zeitraum Kontonummern überprüfe und diese zum Schluß wieder in eine Textdatei zurückschreibe, daher die zweite Schleife!
Danke für den Hinweis!
Gruß Jürgen
Anzeige
abgeschweift
27.04.2010 18:39:25
ransi
HAllo
und diese zum Schluß wieder in eine Textdatei zurückschreibe, daher die zweite Schleife!
Geht auch ohne Schleife ;-)
txtDatei.writeline join(objDic.keys,vbcrlf)
ransi
DANKE! :) oT
27.04.2010 18:47:09
Backowe
AW: Du möchtest ja nur die Anzahl, hatte ich überlesen
28.04.2010 09:49:09
holgi
Vielen Dank an Euch beide!
Beide Wege funktionieren prima - und sehr schnell. Wirklich elegant!
Aber eine Frage hätte ich trotzdem noch:
Könnte man diese Funktion so abändern, das sie auch in einem Autofilter funktioniert? Also nur die Werte berechnet, die durch die Filter sichtbar sind?
Vielen Dank nochmal....
Gruß,
Holger
Anzeige
Geht auch!
28.04.2010 10:16:17
Backowe
Hallo Holger,
Sub Vergleich()
Dim i As Long
Dim MyDic As Object
Set MyDic = CreateObject("Scripting.Dictionary")
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
If Rows(i).Hidden = False Then _
MyDic(Cells(i, "A").Value) = 0
Next
MsgBox MyDic.Count
End Sub

Gruß Jürgen
Anzeige
AW: Geht auch!
28.04.2010 10:31:06
holgi
Genial!
1000dank, Jürgen! Das ist genau das, was ich brauche! Es lebe das Forum!
Viele Grüße aus dem sonnigen Bremen!
Holger

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige