Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1152to1156
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

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!

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
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
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
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
Anzeige
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
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

416 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige