Zählen wenn - Makro erklären

Hallo zusammen,

habe folgenden Code im Internet gefunden, um in Excel die Einträge ohne Duplikate zu zählen (inklusive Autofilter). Kann mir wer den Code erläutern? Würde gerne verstehen was ich da reinbastel:

Public Function zählenSpezial(bereich As Range) As Long
Dim zelle As Range
Dim dic

Set dic = CreateObject(„scripting.dictionary“)

For Each zelle In bereich
If Not zelle.Height = 0 And Not dic.exists(zelle.Value) Then
dic.Add zelle.Value, „“
End If
Next zelle

zählenSpezial = dic.Count
End Function

zelle.Height = 0 schliesst die ausgeblendeten aus ?
Bereich wird automatisch mit dem Bereich der Formel ersetzt? (Hab noch keine Formel in VBA geschrieben…)
Was bedeutet dic.Add und dic.exists?

Vielen Dank schonmal falls einer bisschen Zeit hat!

MfG

Hallo zusammen,

Hallo Brille

habe folgenden Code im Internet gefunden, um in Excel die
Einträge ohne Duplikate zu zählen (inklusive Autofilter). Kann
mir wer den Code erläutern? Würde gerne verstehen was ich da
reinbastel:

Public Function zählenSpezial(bereich As Range) As Long
Dim zelle As Range
Dim dic

Set dic = CreateObject(„scripting.dictionary“)

Das scripting.dictionary ist ein Object aus dem Windows Script. Du kannst es dir wie einen Schrank mit vielen Schubladen vorstellen. Jede Schublade hat einen Aufkleber (einen Namen), und in jeder Schublade kann (muss aber nicht) etwas drin liegen.
Mit set dic = bekommt der ganze Schrank bildlich gesprochen den Namen dic

For Each zelle In bereich

bereich ist der Zellenbereich, der der Funktion übergeben wurde, der also durchsucht werden soll. IN der For-Schleife wird jetzt nacheinander jede Zelle der Variablen „zelle“ zugewiesen.

If Not zelle.Height = 0 And Not dic.exists(zelle.Value) Then

Wenn die Höhe der Zelle nicht 0 ist (wenn die Zeile nicht ausgeblendet ist) und wenn keine Schublade existiert, die einen Namen hat, der mit dem Inhalt der momentanen Zelle übereinstimmt

dic.Add zelle.Value, „“

dann bekommt eine Schublade des Schrankes jetzt den Zellinhalt als Namen. Die Schublade selbst bleibt leer.

End If
Next zelle

Dann wird die nächste Zelle im Bereich bearbeitet.

zählenSpezial = dic.Count

Am Ende erhält die Funktion zählenSpezial als Wert die Anzahl der Schubladen im Schrank.

End Function

zelle.Height = 0 schliesst die ausgeblendeten aus ?
Bereich wird automatisch mit dem Bereich der Formel ersetzt?
(Hab noch keine Formel in VBA geschrieben…)
Was bedeutet dic.Add und dic.exists?

Vielen Dank schonmal falls einer bisschen Zeit hat!

MfG

Gruß, Andreas

Hallo Andreas,

danke! Mal gucken ob ichs mal auf was eigenes übertragen kann.

Schönes Wochenende!

MfG