Anzahl ohne Duplikate, leere Zellen ignorieren

Bild

Betrifft: Anzahl ohne Duplikate, leere Zellen ignorieren
von: Bonduca01
Geschrieben am: 14.07.2015 10:39:10

Hallo,
Der Code unten gibt mir in Tabelle 1 Zelle (3,8) die Anzahl der Zellen ohne Duplikate aus.
Leider zählt der Code auch die leeren Zellen mit.
Gibt es eine Möglichkeit, dass er die leeren Zellen nicht zählt?


Sub TT()
Worksheets("Tabelle1").Activate
Cells(3, 8) = Anzahl
End Sub

Function Anzahl()
Dim wks As Worksheet, rngC As Range, objCounter As Object
Set objCounter = CreateObject("scripting.dictionary")
Worksheets("Tabelle2").Activate
For Each wks In Worksheets
For Each rngC In wks.Range("a2:a75000")
If rngC <> "" And Not objCounter.exists(rngC.Value) Then _
objCounter.Add rngC.Value, rngC.Value
Next
Next
Anzahl = objCounter.Count
Worksheets("Tabelle1").Activate
End Function

Danke! Viele Grüße,
Bon

Bild

Betrifft: AW: Anzahl ohne Duplikate, leere Zellen ignorieren
von: Daniel
Geschrieben am: 14.07.2015 10:52:07
Hi
das sollte durch die Bedingung: If rngC <> "" eigentlich gegeben sein.
ggf kannst du mit if rngC.Value <> "" hier etwas präzisieren.
Die Funktion enthält noch einiges überflüssiges und kann so gekürzt werden:

Function Anzahl()
  Dim wks As Worksheet, rngC As Range, objCounter As Object
  Set objCounter = CreateObject("scripting.dictionary")
   For Each wks In Worksheets
    For Each rngC In Intersect(wks.Range("a2:a75000"), wks.UsedRange)
      If rngC.value <> "" Then objCounter(rngC.value) = 1
    Next
  Next
  Anzahl = objCounter.Count
End Function
das Intersect mit der Usedrange sorgt dafür, dass die Schleife nicht unnötig über leere Zellen am Tabellenende läuft.
Gruß Daniel

Bild

Betrifft: AW: Anzahl ohne Duplikate, leere Zellen ignorieren
von: Nepumuk
Geschrieben am: 14.07.2015 14:36:01
Hallo,
so sollte es deutlich schneller gehen:

Private Function Anzahl() As Long
    
    Dim objCounter As Object, objWorksheet As Worksheet
    Dim avntValues As Variant, vntItem As Variant
    
    Set objCounter = CreateObject("Scripting.Dictionary")
    
    For Each objWorksheet In Worksheets
        
        With objWorksheet
            
            avntValues = .Range(.Cells(2, 1), .Cells( _
                .Rows.Count, 1).End(xlUp).Offset(1, 0)).Value2
            
        End With
        
        For Each vntItem In avntValues
            
            objCounter(vntItem) = vbNullString
            
        Next
    Next
    
    Anzahl = objCounter.Count - 1
    
    Set objCounter = Nothing
    
End Function

Gruß
Nepumuk

Bild

Betrifft: AW: Anzahl ohne Duplikate, leere Zellen ignorieren
von: Bonduca01
Geschrieben am: 16.07.2015 16:26:57
Entschuldigt das späte Dankeschön.
Vielen Dank!

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Anzahl ohne Duplikate, leere Zellen ignorieren"