Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Anzahl aus "Zählen ohne Duplikate" in VBA

Anzahl aus "Zählen ohne Duplikate" in VBA
urmila
Hallo zusammen, und guten Morgen...
zu meinem Problem gibts diverse Beispiele, doch nicht das wonach ich suche....
Ich habe eine Liste, da stehen zig-viele Werte, die mehrmals (nicht durcheinander sonder schon sortiert) auftauchen. Ich will nicht nur das Zählen ohne Duplikate, sondern auch die Anzahl haben.
Im Internet habe ich diese (häufig vorkommende) Formel gefunden
=SUMME(WENN(A3:A650"";1/ZÄHLENWENN(A3:A650;A3:A650)))
Das ist ja was ich brauche, doch ich würde das gerne in VBA Skript, z.B. in MsgBox dargstellt haben (also die Anzahl gesamt ohne Duplikate)
Ich weiß auch dass ich diesen Wert in einer Zelle eintragen kann und im MsgBox den Zellwert ausgeben kann, doch das will ich nicht.....da ich die Tabelle ohne Formeln haben möchte.....
Ich hoffe ihr könnt mir helfen
Danke und LG
Urmila
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
vielleicht so? Gruß
09.09.2010 08:29:26
robert

Sub TT()
MsgBox Anzahl
End Sub

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 wks.Range("a3:a650")
If rngC  "" And Not objCounter.exists(rngC.Value) Then _
objCounter.Add rngC.Value, rngC.Value
Next
Next
Anzahl = objCounter.Count
End Function

Anzeige
danke robert, das wars.... :-)
09.09.2010 09:08:02
urmila
LG
Urmila
Oder so...
09.09.2010 09:01:44
JogyB
Hallo Urmila,
ganz kurz:
MsgBox Evaluate("=SUM(IF(A3:A650"""",1/COUNTIF(A3:A650,A3:A650)))")
Die Laufzeit könnte bei Roberts Lösung besser sein, habe ich jetzt aber nicht probiert.
Gruß, Jogy
auch dir danke Jogy....klappt auch
09.09.2010 09:10:12
urmila
LG
Urmila
Anzeige
AW: noch eine Bitte
09.09.2010 09:36:22
urmila
Sorry,
habs vergessen nachzufragen wie ich das Tabellenblatt z.B. Rot ansprechen könnte....
Danke und lieben Gruß
Urmila
AW: noch eine Bitte
09.09.2010 10:24:38
Hajo_Zi
Hallo Urmilla,
einfach in Excel mal testen
=SUMME(WENN(Rot!A3:A650"";1/ZÄHLENWENN(A3:A650;A3:A650)))

Anzeige
vielleicht doch eher...
09.09.2010 10:31:45
JogyB
so:
=SUMME(WENN(Rot!A3:A650"";1/ZÄHLENWENN(Rot!A3:A650;Rot!A3:A650)))
Gruß, Jogy
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Anzahl aus "Zählen ohne Duplikate" in VBA


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.

  3. Füge den folgenden VBA-Code in das Modul ein:

    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 wks.Range("A3:A650")
                If rngC <> "" And Not objCounter.exists(rngC.Value) Then _
                    objCounter.Add rngC.Value, rngC.Value
            Next
        Next
    
        Anzahl = objCounter.Count
    End Function
  4. Schreibe dann den Code für die MsgBox in ein weiteres Sub:

    Sub TT()
        MsgBox Anzahl
    End Sub
  5. Schließe den VBA-Editor und gehe zurück zu Excel.

  6. Führe das Makro TT aus, um die Anzahl der eindeutigen Werte zu sehen.


Häufige Fehler und Lösungen

  • Fehler: "Typenübereinstimmung"

    • Stelle sicher, dass die Zellen in dem angegebenen Bereich tatsächlich Werte enthalten und nicht leer sind.
  • Fehler: "Objekt nicht gefunden"

    • Überprüfe, ob der Name des Arbeitsblattes korrekt ist, wenn Du auf ein bestimmtes Blatt zugreifen möchtest.
  • Lösung für lange Laufzeiten

    • Wenn die Laufzeit der Funktion zu lang ist, versuche, die Anzahl der durchsuchten Zellen zu verringern oder gezielt nur ein bestimmtes Blatt abzufragen.

Alternative Methoden

Eine weitere Möglichkeit, die Anzahl eindeutiger Werte zu zählen, ist die Verwendung der Evaluate-Funktion in VBA. Hier ein Beispiel:

Sub ZählenOhneDuplikate()
    MsgBox Evaluate("=SUM(IF(A3:A650<>"""",1/COUNTIF(A3:A650,A3:A650)))")
End Sub

Diese Methode kann in bestimmten Situationen schneller sein.


Praktische Beispiele

Angenommen, Du hast in der Spalte A Werte, die Du zählen möchtest. Hier sind einige Beispiele:

  • Zählen von Duplikaten: Verwende den oben beschriebenen VBA-Code, um die Anzahl der einzigartigen Werte zu zählen.
  • Einzelner Bereich: Wenn Du nur einen bestimmten Bereich zählen möchtest, ändere den Code in der For Each Schleife, um nur diesen Bereich zu durchsuchen, z.B. wks.Range("A1:A100").

Tipps für Profis

  • Optimierung der Performance: Wenn Du große Datenmengen hast, solltest Du den Bildschirmaktualisierungsmodus deaktivieren, um die Performance zu verbessern:

    Application.ScreenUpdating = False
    ' Führe Deinen Code aus
    Application.ScreenUpdating = True
  • Verwendung von Dictionaries: Wenn Du die Anzahl der eindeutigen Werte zählen möchtest, ist die Verwendung eines Dictionaries wie im Beispiel sehr effektiv und spart Zeit.


FAQ: Häufige Fragen

1. Wie kann ich die Funktion auf ein bestimmtes Tabellenblatt anwenden? Du kannst den Bereich anpassen, indem Du z.B. Rot!A3:A650 in den Code einfügst.

2. Gibt es eine Formel in Excel, die ich verwenden kann? Ja, Du kannst die Formel =SUMME(WENN(A3:A650<>"";1/ZÄHLENWENN(A3:A650;A3:A650))) direkt in eine Zelle eingeben, um die Anzahl der eindeutigen Werte zu zählen.

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