Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1656to1660
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

Werte zählen und in variable Spalte eintragen

Werte zählen und in variable Spalte eintragen
20.11.2018 13:58:23
Anna
Hallo zusammen,
zu folgendem Problem fällt mir keine Lösung ein:
Ich habe in Spalte A verschiedene Namen z.B. Maier, Mueller, Schaefer. Diese Namen kommen untereinander z.t. gehäuft auf.
Spalte A Spalte B
Maier 3
Maier
Maier
Mueller 1
Schaefer 2
Schaefer
Baur 2
Baur
Wie oben soll nun die Gesamtanzahl der Namen in der jeweiligen Spalte B in der er als erstes auftritt, reingeschrieben werden.
Problem: Wie definiere ich nun die Zeile in Spalte B in der der NAme das erste mal auftritt.
Bis jetzt funktioniert meine Zählweise & der Rest, nur das "Finden" der Zeile in Spalte B bekomme ich nicht hin...
Freue mich über Hilfe!
Sub NamenZaehlen
Dim objDict, f
Dim myValues, myKeys
Dim lngI As Long
Dim Bereich As Range
Set Bereich = Range("A2:A" & letzteZeile)
Set objDict = CreateObject("Scripting.Dictionary")
For Each f In Bereich
If Not objDict.Exists(f.Value) Then
Call objDict.Add(f.Value, Application.CountIf(Bereich, f))
End If
Next
myKeys = objDict.keys   'Wort
myValues = objDict.Items 'Häufigkeit die das Wort auftritt
For lngI = 0 To objDict.Count - 1
Range("B2").Value = myValues(lngI)   ' hier Problem: nur manuelle Eingabe gelingt mir
Next lngI
Set objDict = Nothing
Set Bereich = Nothing
End Sub


14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
die nachfolgenden Werte nur einmal zählen
20.11.2018 14:10:04
WF
Hi,
in B1:
=WENNFEHLER(WENN(VERGLEICH(A1;A:A;0)=ZEILE();ZÄHLENWENN(A:A;A1);"");"")
runterkopieren
Salut WF
AW: die nachfolgenden Werte nur einmal zählen
20.11.2018 14:21:05
Anna
Hallo WF,
Danke für deine Idee. Nur leider handelt es sich hier um eine Tabelle deren Inhalt immer wieder geleert und neu befüllt wird. Wenn ich deine Formel in B1 schreibe, zerschießt es mir die Überschrift und es wird nur runter gezählt also von 1 bis 8.
Hast du eine Idee wie ich meinen Code anpassen könnte?
AW: die nachfolgenden Werte nur einmal zählen
20.11.2018 14:23:52
Anna
Hallo WF,
ich habe gerade meinen fehler bemerkt, die Formel stimmt natürlich nur als VBA Umsetzung, da wie gesagt der komplette Inhalt gelöscht wird nach jedem Öffnen der Tabelle
Gruß Anna
Anzeige
VBA ist nicht meine Baustelle
20.11.2018 14:31:07
WF
.
Trotzdem Danke!
20.11.2018 15:14:59
Anna
Trotzdem Danke
AW: die nachfolgenden Werte nur einmal zählen
20.11.2018 14:54:42
Bernd
Hallo Anna,
teste mal...

Sub NamenZaehlen
Dim objDict, f
Dim myValues, myKeys
Dim lngI As Long
Dim Bereich As Range
Set Bereich = Range("A2:A" & letzteZeile)
Set objDict = CreateObject("Scripting.Dictionary")
For Each f In Bereich
If Not objDict.Exists(f.Value) Then
Call objDict.Add(f.Value, Application.CountIf(Bereich, f))
End If
       ActiveSheet.Cells(f.row, 2).FormulaLocal = "=WENNFEHLER(WENN(VERGLEICH(A" & _
f.row & ";A:A;0)=ZEILE();ZÄHLENWENN(A:A;A" & f.row & ");"""");"""")"
   Next
myKeys = objDict.keys   'Wort
Set objDict = Nothing
Set Bereich = Nothing
End Sub
Grüße, Bernd
Anzeige
AW: die nachfolgenden Werte nur einmal zählen
20.11.2018 15:14:17
Anna
Hallo Bernd,
super! Vielen Dank.
Nur leider liefert mir das folgendes:
Spalte A Spalte B
Maier 4
Maier
Maier
Mueller 1
Schaefer 2
Schaefer
Baur 2
Baur
Maier
Gewünscht wäre das hier: damit es eindeutiger bleibt:
Spalte A Spalte B
Maier 3
Maier
Maier
Mueller 1
Schaefer 2
Schaefer
Baur 2
Baur
Maier 1
Irgendwelche Ideen?
Grüße
AW: die nachfolgenden Werte nur einmal zählen
20.11.2018 15:25:08
Bernd
Servus Anna,
sorry, ich verstehe nicht, was du meinst.
Warum soll der letzte Maier nicht mehr zum ersten Maier gezählt werden?!
Grüße, Bernd
AW: die nachfolgenden Werte nur einmal zählen
20.11.2018 15:45:44
Anna
Hallo Bernd,
ich möchte noch weitere spalten anhängen und evlt mal sowas wie eine kleine Datenbasis / Datenbank für mich aufbauen. Möchte meine Excel Kentnisse vertiefen bzw. richtig aufbauen :)
Grüße zurück!
P.S.: Daniel hat dazu eine schöne Lösung gepostet!
Anzeige
AW: Werte zählen und in variable Spalte eintragen
20.11.2018 14:48:15
Daniel
HI
probiers mal so:

Sub NamenZaehlen()
Dim objDict, f
Dim lngI As Long
Dim Bereich As Range
Dim letzteZeile As Long
Dim ID As String
Dim arr
letzteZeile = Cells(Rows.Count, 1).End(xlUp).Row
Set Bereich = Range("A2:A" & letzteZeile)
arr = Bereich.Value
Set objDict = CreateObject("Scripting.Dictionary")
For Each f In arr
objDict(f) = objDict(f) + 1
Next
For lngI = 1 To UBound(arr)
ID = arr(lngI, 1)
arr(lngI, 1) = objDict(ID)
objDict(ID) = ""
Next
Bereich.Offset(0, 1).Value = arr
End Sub
Gruß Daniel
AW: Werte zählen und in variable Spalte eintragen
20.11.2018 15:12:13
Anna
Hallo Daniel,
danke! Klappt wunderbar - jedoch wird bei dir auch wie bei bei der Formel der Gesamtwert angezeigt, dh. wie häufig ein Name insgesamt vorkommt.
Wenn ich nun aber
Spalte A Spalte B
Maier 3
Maier
Maier
Mueller 1
Schaefer 2
Schaefer
Baur 2
Baur
Maier 1
haben sollte, liefert mir dein Beispiel
Spalte A Spalte B
Maier 4
Maier
Maier
Mueller 1
Schaefer 2
Schaefer
Baur 2
Baur
Maier
Gibt es hier noch einen Weg, wirklich nur das zu zählen, was in der direkten Spalte steht?
Anzeige
AW: Werte zählen und in variable Spalte eintragen
20.11.2018 15:27:47
Daniel
Hi
in dem Fall einfach so (ausgehend von einer Zeile Überschrift:
1. in Zelle C2 die Formel: =Wenn(A2=A3;C3+1;1)
2. in Zelle B2 die Formel: =Wenn(A2=A1;"";C2)
3. Beide Formeln bis zum Tabellenende runter ziehen
4. Spalte B kopieren und an gleicher stelle als Wert einfügen
5. Spalte C wieder löschen.
als VBA dann entweder genauso, dh per Makro diese Schritte ausführen (geht schnell und ist schleifenfrei, das ist sehr angehem , wenn man den Code im Einzelstepmodus testen will)
oder mit einer einfachen Zählschleife von unten nach oben.
hier mal die Codes für beide Varianten.
ich denke das zeigt deutlich, warum man sich beim Schreiben von Makros durchaus Gedanken darüber machen sollte, wie man die Aufgabe per Formel lösen könnte, das gibt dann oft auch schöne, dh kurze und schnelle Makrolösungen:
Sub NamenZaehlenReinVBA()
Dim arr
Dim z As Long
Dim x As Long
Dim Bereich As Range
Set Bereich = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
arr = Bereich.Value
For z = UBound(arr, 1) To 2 Step -1
x = x + 1
If arr(z, 1)  arr(z - 1, 1) Then
arr(z, 1) = x
x = 0
Else
arr(z, 1) = ""
End If
Next
arr(1, 1) = "Anzahl"
Bereich.Offset(0, 1).Value = arr
End Sub

Sub NamenZählenVBAundFormel()
With Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)
With .Offset(0, 1).Resize(, 2)
.Columns(2).FormulaR1C1 = "=IF(RC1=R[1]C1,R[1]C+1,1)"
.Columns(1).FormulaR1C1 = "=IF(RC1=R[-1]C1,"""",RC[1])"
.Formula = .Value
.Columns(2).ClearContents
End With
End With
End Sub

Anzeige
AW: Werte zählen und in variable Spalte eintragen
20.11.2018 15:44:24
Anna
Hallo Daniel,
vielen Dank dir! Also rein zum Verstehen ist natürlich die Formel lösung um einiges einfacher! Mit der VBA Lösung, mache ich mich hoffentlich auch bald vertraut. Sieht um einiges komplizierter aus, als ich mir das gedacht hab :)
Grüße
AW: Werte zählen und in variable Spalte eintragen
20.11.2018 15:46:25
Daniel
naja, wer mit Dicitionarys agiert, sollte eigentlich mit einer einfachen Zählschleife kein Problem haben.
Gruß Daniel

322 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige