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

Identische Werte Zählen

Identische Werte Zählen
11.10.2022 11:44:04
Fred
Hallo Excel Experten,
ich habe hier im Archiv (aus dem Jahr 2007) ein Makro von Chris entdeckt.

Sub t()
Dim iZeile As Long, LetzteZeile As Long
LetzteZeile = Range("A65536").End(xlUp).Row
For iZeile = 1 To LetzteZeile
If WorksheetFunction.CountIf(Range("A1:A" & iZeile), Cells(iZeile, 1)) = 1 Then _
Cells(iZeile, 2) = WorksheetFunction.CountIf(Columns(1), Cells(iZeile, 1))
Next iZeile
End Sub
In diesen Makro werden die identischen Werte aus Spalte "A" gezählt und die Anzahl in Spalte "B" ausgegeben.
Das Makro möchte ich gerne (leicht verändert) nutzen. Was ich an diesen VBA verbessert haben möchte ist;
Meine Werte in Spalte "A" sind nicht sortiert. Daher macht es mehr Sinn, wenn nicht nur im ersten Eintrag eines Wertes die Anzahl in Sp. "B" steht, sondern durchgehend entsprechender Wert eingetragen wird.
Kann mir ein Experte bitte dieses (iZeile?) korrigieren?!
Gruss
Fred

33
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Wozu dann VBA?
11.10.2022 11:49:38
Sheldon
Hallo Fred,
dann reicht doch die Formel (Hier z.B. in Zelle B2 oder irgendeine andere Zelle in Zeile 2)

=ZÄHLENWENN(A:A;A2)
Gruß
Sheldon
AW: Wozu dann VBA?
11.10.2022 11:57:56
Fred
Hallo Sheldon,
ja! die Formel bringt gewünschtes Ergebnis.
Meine Arbeitsmappe hat ggf. über 80.000 Tausend Zeilen und ich möchte diese Mappe ausschließlich mit "VBA Ergebnissen" füllen.
Gruss
Fred
AW: Wozu dann VBA?
11.10.2022 12:05:19
GerdL
Moin Fred!
Des Menschen Wille ist sein Himmelreich.
Also nur VBA-Funktionen:

Sub Unit()
Dim lngZeile As Long
For lngZeile = 1 To Range("A" & Rows.Count).End(xlUp).Row
Cells(lngZeile, 2) = WorksheetFunction.CountIf(Columns(1), Cells(lngZeile, 1))
Next lngZeile
End Sub
Gruß Gerd
Anzeige
AW: Wozu dann VBA?
11.10.2022 12:10:18
Fred
Moin Gerd,
klappt !!
oder Amen !!
:-) vielen Dank
Gruss
Fred
Laufzeit ?
11.10.2022 14:08:11
Daniel
Hi
wie lange braucht das bei 80.000 Zeilen?
Gruß Daniel
ohne Schleife
11.10.2022 12:21:30
Rudi
Hallo,

Sub test()
With Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)).Offset(, 1)
.FormulaR1C1 = "=countif(c1,rc1)"
.Value = .Value
End With
End Sub
Gruß
Rudi
AW: ohne Schleife
11.10.2022 15:02:38
Fred
Hallo Rudi,
sehe verspätet deinen Ansatz.
"Dein Teil" läuft schneller und ist wohl für zigtausende von Zeilen besser geeignet.
Danke für die Aufmerksamkeit und Kompetenz.
Gruss
Fred
AW: Identische Werte Zählen
11.10.2022 12:37:03
Daniel
Hi
Probiers mal so, das dürfte bei großen Datenmengen das schnellste sein

sub Zählen()
Dim rng das Range
Dim arr
Dim dic
Dim i as long
Set dic = createobject("scripting.dictionary")
Set rng = Range("A1:A" Cells(Rows.count, 1).End(xlup).row)
arr = rng.value
For i = 1 to ubound(arr, 1)
dic(arr(i, 1)) = dic(arr(i, 1)) + 1
Next
For i = 1 to ubound(arr, 1)
arr(i, 1) = dic(arr(i, 1))
Next
rng.offset(0, 1).value = arr
End Sub
Wenn ne Formel sein soll, könnte das das schnellste sein:
B1: =ZählenWenn(A:A;A1)
Ab B2 bis Ende:=Wennfehler(SVerweis(A2;A$1:B1;2;0);ZählenWenn(A2:A$100000;A2))
Gruß Daniel
Anzeige
AW: Besser Testen!
11.10.2022 13:16:09
GerdL
Hi
Der Fehlerteufel schlug zu.
AW: Besser Testen!
11.10.2022 13:39:38
Daniel
kann sein.
Mein Händy kann kein VBA.
Schenk mir eins, dass das kann, dann kann ich auch testen.
AW: Besser Testen!
11.10.2022 17:03:06
GerdL
Nein, nur eine lauffähige Prozedur.

Sub Unit()
Dim rng As Range
Dim arr As Variant
Dim dic As Object
Dim i As Long
Set dic = CreateObject("scripting.dictionary")
Set rng = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
arr = rng.Value
For i = 1 To UBound(arr, 1)
If dic.Exists(arr(i, 1)) Then
dic(arr(i, 1)) = dic(arr(i, 1)) + 1
Else
dic(arr(i, 1)) = 1
End If
arr(i, 1) = dic(arr(i, 1))
Next
rng.Offset(0, 1).Value = arr
Set rng = Nothing
dic.RemoveAll
Set dic = Nothing
End Sub

Anzeige
Das hast du auch nicht getestet
11.10.2022 17:28:01
Daniel
Diese Prozedur läuft zwar, liefert aber nicht das gewünschte Ergebnis.
hier wird nicht bei jedem Wert die Anzahl eingetragen so wie es gewünscht war, sondern es wird hochgezählt.
Da du ja schon mit einer anderen Vorgehensweise das richtige Ergebnis geliefert hast, hast du diesen Code auch nicht getestet, sonst hättest du feststellen müssen, dass er ein anderes Ergebnis liefert.
Gruß Daniel
AW: Hast du denn getestet?
11.10.2022 17:36:54
GerdL
Natürlich habe ich in meiner Tabelle mit korrektem Ergebnis getestet.
Kannst du bitte deine Beispieldatei mit den fehlerhaften Ergebnissen hier uploaden,
um deine Aussage verifizieren zu können.
Anzeige
AW: Hast du denn getestet?
11.10.2022 17:53:09
Daniel
gerne.
hier mal eine Beispieldatei mit ein paar Daten.
in Spalte B trägt dein erstes Makro UNIT seine Ergebnisse ein, das ist das mit ZählenWenn, welches Fred mit "klappt !!" kommentiert hat.
Das sollte die Referenz sein, da es das richtige Ergebnis liefert (also das, was Fred sich gewünscht hat)
in Spalte C siehst du dann das Ergebnis deinen neuen Makros, ich hoffe du siehst den Unterschied.
in Spalte D dann das Ergebnis meines Makros mit den Korrekturen, die Fred ja selbst einfügen konnte, weil es ich nur um zwei Tippfehler handelt.
(Der Mann denkt mit und kopiert nicht einfach nur die Codes)
über den Button werden dann die drei Makros nacheinander aufgerufen, die Ausgabespalte habe ich in den Codes entsprechen angepasst.
https://www.herber.de/bbs/user/155604.xlsm
Gruß Daniel
Anzeige
AW: Touche
11.10.2022 18:22:25
GerdL
Ich hatte den ersten Code nicht getestet u. deshalb die sittenwidrigen, aber von Fred so gewollten, Endergebnisse der einzelnen Zählungen in meinem eigenen Code nicht, sondern den Normalfall, also Auswertungen von oben nach unten, errechnet. Insofern hast du trotz deiner ersten fehlerbehafteten Prozedur Recht.
sittenwidrig? man, man, man
11.10.2022 18:34:30
Daniel
Warum beleidigst du Fred und bezeichnest seinen Wunsch als "sittenwidrig"?
nur weil du das vielleicht anders machen würdest?
kennst du die Aufgabenstellung? Hast du bei Fred nachgefragt, warum er das so haben möchte? Hast du dich versichert, dass es nicht vielleicht doch notwendig ist und er dieses Ergebnis so braucht?
Warum gehst du davon aus, dass deine Vorstellung der "Normalfall" sein soll?
Und wieso ist dir nicht aufgefallen, dass deine Lösungsvorschläge unterschiedliche Ergebnisse liefern, das müsste dir doch klar gewesen sein auch ohne testen.
Tut mir leid, aber jetzt bin ich sehr enttäuscht von dir.
Anzeige
AW: sittenwidrig? man, man, man
11.10.2022 18:54:33
GerdL
Ich habe keine zwei eigene Lösungsvorschläge gemacht, sondern den einen von Fred nur erweitert.
Fred habe ich nicht beleidigt, sondern seine Aufgabenstellung kritisiert.
Stelle hier keine infamen unbegründeten Behauptungen auf.
"sittenwidirig" ist eine Beleidung
11.10.2022 19:01:46
Daniel
Kritik ist die ausführliche Erklärung folgender Punkte:
Was ist schlecht?
Warum ist es schlecht?
Wie geht es besser?
das alles hast du nicht gemacht.
Sittenwidrig ist, wenn ich in der Öffentlichkeit meinen Dödel raushängen lasse.
AW: "sittenwidirig" ist eine Beleidung
11.10.2022 19:15:45
GerdL
Mache deinen Erklärbär jemand anderes, lass es oder mach weiter, damit du das letzte Wort hast, wenn du darauf angewiesen bist.
Anzeige
zu feige zu zu geben, dass du dich in der Wortwahl
11.10.2022 19:21:07
Daniel
vergriffen hast?
Bei manchen Dingen ist Daniel halt getriggert.
12.10.2022 07:56:46
lupo1
... Obacht! :)
Lupo du bist doch Rechtsexperten und kennst
12.10.2022 09:28:48
Daniel
den Palandt und das BGB.
Gerd hat Fred Frage bzw sein Vorhaben als "Sittenwidrig" bezeichnet.
Sittenwidrig ist aber ein Begriff aus dem BGB mit einer festen Bedeutung.
Würdest du hier zustimmen, dass es korrekt ist, Freds Vorhaben als "sittenwidrig" zu bezeichnen oder ist das hier nicht zutreffend?
Und ja, mich triggern schon ein paar Sachen, beispielsweise, wenn ich meine Position ausführlich begründe und erläuterte, damit man versteht, warum ich so denke, und dann jemand als Antwort nicht auf meine Begründung eingeht, sondern einfach generell mit einem patzigen "mach hier nicht den Erklärbär" abschmettert, dann triggern mich das schon.
Sowas zeigt, das solche Menschen nicht wirklich sachlich diskutieren wollen sondern einfach ihre Meinung durchsetzen wollen, ohne zu hinterfragen, ob diese richtig oder gerechtfertigt ist.
Anzeige
Weil Du so freundlich fragst:
12.10.2022 13:48:19
lupo1
Ich finde das Wort "sittenwidrig" selbst nicht so schlimm und schon gar nicht beleidigend - auch wenn eine sittenwidrige Tat durchaus strafbewehrt sein kann.
Denn es steckt schon im Worte "Sitte" ein gerüttelt Maß an lokaler Subjektivität. In den USA kostete Wildpinkeln schon vor 30 Jahren 1000 USD Strafe.
AW: Weil Du so freundlich fragst:
12.10.2022 13:53:57
Daniel
Die frage ist, ob das Vorhaben von Fred als sittenwidirg bezeichnet werden kann oder nicht.
wenn nein, wäre es ja ein falscher Vorwurf.
man müsste zumindest begründen können, warum man der meinung ist, das das Vorhaben von Fred sittenwidirg sei.
aber ok, ich merke mir mal, dass du es nicht als beleidigend empfinden wirst, falls man dich oder dein Verhalten mal als "sittenwidirg" bezeichnen würde.
Anzeige
Ich würde mir das gar nicht merken können ...
12.10.2022 20:17:02
lupo1
... aber Du bist vermutlich noch jünger.
Der Grund, warum wir immer ewig diskutieren ist
13.10.2022 12:39:12
Daniel
Das du nicht die von mir gestellten Fragen beantwortet, sondern immer auf andere Themen ausweichst und somit ein Punkt nie wirklich abgeschlossen werden kann.
AW: Der Grund, warum wir immer ewig diskutieren ist
13.10.2022 12:45:52
JoWE
Also bitte - iwann muss es doch auch mal gut sein.
Könnt ihr zwei Euch bitte in irgendeiner Form privat über Euer Thema unterhalten (?)
Ins Forum jedenfalls gehört Euer Zoff nun wirklich nicht.
Hallo Herbert, ich bitte um ein Statement
Gruß
Jochen
PN gibts hier leider nicht
13.10.2022 13:35:35
Daniel
Sonst wäre das sicherlich ein Fall dafür, da hast du recht.
Ich möchte hier aber auch nicht jedem meine Mailadresse geben.
Gruß Daniel
Ich über setzte das mal:
12.10.2022 12:38:19
Daniel
"Sei still, deine Argumente interessieren mich nicht."
Kann es sein dass Du, lieber Gerd, derjenige ist, der immer Recht haben muss und dafür auch mal eine sachliche Diskussion mit Argumenten einfach so abwürgt?
AW: Besser Testen!
11.10.2022 15:54:32
Fred
ja Daniel,

Dim rng As Range

Set rng = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
ratzfatzzz
Gruss
Fred
Pivottabelle
11.10.2022 15:02:05
Yal
Moin,
es scheint alles ausführlich beantwortet zu sein, jedoch wollte ich die Lösung mit Pivottabelle nicht unerwähnt lassen. Kein Formel, kein VBA.
VG
Yal
AW: Pivottabelle
11.10.2022 15:09:06
Daniel
Naja das ist dann ja nur der erste Teilschritt.
Dann hast du die Anzahlen für jeden Wert in einer separaten duplikstfreien Liste und diese müssten dann noch in die Hauptliste zurückgespielt werden.
Gruß Daniel
AW: Pivottabelle
11.10.2022 15:43:17
Yal
Richtig. Zumindest, wenn der Fragenden es denn so will.
Ich sehe -ist aber imho- den Mehrwert nicht darin. Ich gehe davon aus, dass die Spalte A als Überschrift verwendet werden soll. Da die Pivottabelle diese Aufzählung mitliefert, braucht man die Spalte A als Überschrift nicht mehr.
Dann kann man mit der PT noch nach Schlüssel oder nach Anzahl von Treffer sortieren.
VG
Yal

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige