Anzeige
Archiv - Navigation
908to912
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
908to912
908to912
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA Werte zählen

VBA Werte zählen
30.09.2007 19:18:00
Marion
Hallo,
ich hab mich jetzt den ganzen Tag mit folgendem Problem beschäftigt und habs nicht hinbekommen, deshalb wende ich mich an Euch.
In einer Excel Tabelle stehen in Spalte A Namen. Die Anzahl der Namen möchte ich nun mit Hilfe von VBA zählen und mir dann über eine MsgBox ausgeben lassen.
Bsp.
Müller
Meier
Müller
Schulz
Schulz
Müller
...
Ausgabe:
Müller: 3
Meier: 1
Schulz: 2
Mein Problem: ich weiss vorher weder wie gross die Tabelle ist noch wie viele verschiedene Namen es gibt.
Ich hab jetzt seit 2 Stunden im Forum / Archiv gesucht. Obwohl ich mir sicher bin dass mein "Problem" sicher schon oft gelöst wurde habe ich nichts finden können.
Wer kann mir helfen? Dankeschön!

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Werte zählen
30.09.2007 19:38:50
Erich
Hallo Marion,
warum mit VBA? Das geht einfacher mit Formeln:
(Groß-/Kleinschreibung wird nicht berücksichtigt)
 ABC
1Bsp.Ohne DupsAnzahl
2MüllerMüller3
3MeierMeier1
4MüllerSchulz2
5Schulz  
6Schulz  
7MÜLLER  
8   
9   
10   

Formeln der Tabelle
ZelleFormel
B2{=WENN(SUMME(WENN(A$2:A$100=0;0;1/ZÄHLENWENN(A$2:A$100;A$2:A$100)))+1<ZEILE(); ""; INDIREKT("A" &(KKLEINSTE(WENN(ZÄHLENWENN(BEREICH.VERSCHIEBEN(A$2;;;ZEILE($1:$100)); A$2:A$100)=1;ZEILE($2:$100)); ZEILE(A2)-1))))}
C2=WENN(B2="";"";ZÄHLENWENN($A$1:$A$999;B2))
B10{=WENN(SUMME(WENN(A$2:A$100=0;0;1/ZÄHLENWENN(A$2:A$100;A$2:A$100)))+1<ZEILE(); ""; INDIREKT("A" &(KKLEINSTE(WENN(ZÄHLENWENN(BEREICH.VERSCHIEBEN(A$2;;;ZEILE($1:$100)); A$2:A$100)=1;ZEILE($2:$100)); ZEILE(A10)-1))))}
C10=WENN(B10="";"";ZÄHLENWENN($A$1:$A$999;B10))
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
Matrix verstehen

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: VBA Werte zählen
30.09.2007 19:50:42
Josef
Hallo Marion,
als Ansatz.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Namen_Zaehlen()
Dim vVal As Variant, vRes() As Variant
Dim rng As Range
Dim lngI As Long
Dim strMsg As String

Set rng = Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)

vVal = rng

Redim vRes(0)
vRes(0) = "###"

For lngI = 1 To UBound(vVal, 1)
    If Not IsNumeric(Application.Match(vVal(lngI, 1), vRes, 0)) Then
        strMsg = strMsg & vVal(lngI, 1) & vbTab & vbTab & Application.CountIf(rng, vVal(lngI, 1)) & vbLf
        Redim Preserve vRes(UBound(vRes) + 1)
        vRes(UBound(vRes)) = vVal(lngI, 1)
    End If
Next

If Len(strMsg) > 0 Then MsgBox strMsg

End Sub

Gruß Sepp

Anzeige
AW: VBA Werte zählen
30.09.2007 20:03:11
Worti
Hallo Marion,
eine Lösung hab ich auch noch:

Sub Anzahlen()
Dim objDict, c
Dim myValues, myKeys
Dim lngI As Long
Dim Bereich As Range
Set Bereich = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
Set objDict = CreateObject("Scripting.Dictionary")
For Each c In Bereich
If Not objDict.exists(c.Value) Then
Call objDict.Add(c.Value, Application.CountIf(Bereich, c))
End If
Next
myKeys = objDict.keys
myValues = objDict.Items
For lngI = 0 To objDict.Count - 1
MsgBox "Der Name " & myKeys(lngI) & " kommt " & myValues(lngI) & " mal vor"
Next lngI
Set objDict = Nothing
Set Bereich = Nothing
End Sub


Gruß Worti

Anzeige
AW: VBA Werte zählen
30.09.2007 20:17:31
Daniel
Hallo
statt langwierige Matrix-Formeln oder Makros zu tippen, dann man so eine Auswertung auch schnell und elegant über wenige Mausklicks mit einer Pivot-Tabelle zusammen stellen (zu finden unter DATEN-PIVOTTABELLE)
sieht am Anfang furchtbar kompliziert aus, ist aber, wenn mans mal geblickt hat, sehr einfach und komfortabel zu bedienen und ein wirklich mächtiges Instrument für komplexe Datenauswertungen.
Beispiel:
https://www.herber.de/bbs/user/46457.xls
Gruß, Daniel

Anzeige
AW: VBA Werte zählen
30.09.2007 23:26:00
Marion
Wow.
Vielen Dank Euch allen für Eure Hilfe! :)
Ich wollte den Post nicht zu kompliziert machen, deshalb habe ich Euch "verschwiegen" dass ich beruflich mit einem engl. Windows / Office arbeite. Bin mir nicht sicher ob ich die dt. Formeln verwenden kann, vermutlich muss ich die Formeln in einem "deutschen Excel" eingeben und kann die abgespeicherte Datei dann in der engl. Version öffnen. (?) VB ist da eher "international", dh der Code sollte unabhängig von der Excel-Sprachversion funktionieren.
Mir ist an Josefs Code aufgefallen dass die Tabelle nach Namen sortiert sein muss.
Und bei Worti wird zwar beim Zählen nicht zwischen Groß-/Kleinschreibung unterschieden, wohl aber bei der Ausgabe.
Also
Müller
Meier
Müller
ergibt
"Der Name Müller kommt 2 mal vor"
"Der Name Meier kommt ein mal vor"
aber bei
Müller
Meier
MÜLLER
ist die Ausgabe
"Der Name Müller kommt 2 mal vor"
"Der Name Meier kommt ein mal vor"
"Der Name MÜLLER kommt 2 mal vor"
(bitte nicht negativ verstehen, ich bin froh über diese Hilfen!!).
Der Vorteil bei dem VB-Code ist dass ich den als Makro in der persönlichen Arbeitsmappe speichern und immer wieder drauf zugreifen kann (sofern die Tabellen identisch aufgebaut sind).
Nochmals vielen herzlichen Dank, Ihr habt mir den Start in die Woche erleichter! :-)

Anzeige
AW: VBA Werte zählen
30.09.2007 23:34:00
Josef
Hallo Marion,
bei meinem Code muss die Tabelle nicht sortiert sein.
Wie kommst du darauf?
Gruß Sepp

AW: VBA Werte zählen
30.09.2007 23:46:00
Daniel
Hi
tja, wenn du uns das verschwiegen hast, können wir das ja nicht wissen und du musst selber schauen, wie du das ins englische überträgst.
Es sollte eigentlich so funktionieren, wie du es beschreiben hast.
falls nicht, kannst du auch:
- die Formeln in der Deutschen Version eingeben,
- eine Zelle mit der Formel selectieren
- in den VBA-Editor - Direktfenster wechseln
- dort eingeben: "?selection.formula" und dir die internationale (englische) Formelschreibweise ansehen
ansonsten, warum muß es ne MSG-Box meldung sein, das könnte bei vielen Daten lästig werden?
mit der Pivot-Tabelle hast du gleich ne vollständige Liste mit allen Namen, ohne daß du dich um irgendwelche Formeln, Länderversionen oder Makros kümmern musst.
Gruß, Daniel

Anzeige
AW: VBA Werte zählen
01.10.2007 18:51:00
Marion
Zunächst mal muss ich mich bei Josef entschuldigen, es war wohl zu spät für mich gestern Abend, ich weiß nicht mehr genau was ich gemacht habe aber vermutlich war ich es die sich "verzählt" hat bei meinem kurzen Test, bitte nicht bös sein. Vermutlich liegt es daran dass ich übersehen habe dass Dein Code ab Zeile 2 anfängt zu zählen (Set Range), mein Beispiel aber bei Zeile 1 los ging.
Von der Geschwindigkeit her scheint es mir am schnellsten zu sein, wobei ich nicht verstehe was der Code da macht.
Im Detail passiert folgendes:
ich bekomme aus einem Fremdsystem jeden Morgen eine Excel-Liste generiert. In dieser Liste sind für mich in dem Augenblick nur die Anzahl der Namen interessant, weil ich die "nach oben reporten" muss, d.h. mein Chef will wissen wie oft Müller, Meier usw. in der Liste steht.
Ich könnte also per Copy + Paste die Formeln an das Ende der Tabelle kopieren, mit wenigen Mausklicks die Pivot-Tabelle erstellen oder eines der VBA-Makros laufen lassen.
Für genau dieses Problem ist Josefs VB-Code meiner Meinung nach die beste Lösung.
Die Lösung von Daniel gefällt mir insofern gut weil ich wenigstens verstehe was da passiert (so kann ich es als Basis für andere Sachen immer wieder mal verwenden). Genau so wie die Formeln, die ich mir abgespeichert habe (gerade die anfangs kompliziert erscheinenden Matrixformeln), weil ich so etwas bei meiner täglichen Arbeit immer wieder brauche.
Also nochmals vielen Dank an alle Helfer! :-)
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen