MS Excel Makro - Gleiche Einträge in Spalte erkennen und zählen

2 Antworten

Eigentlich ist das ein typisches Datenbankproblem. Wenn es aber Excel sein soll oder muss, dann ist VBA nur eine Möglichkeit, besser löst du das mit einer Pivot-Tabelle!

VBA wirkt für diese Aufgabe overpowert. Versuche, mit ZÄHLENWENN und Filtern dein Ziel zu erreichen. Das ist weniger komplex und sollte dafür ausreichend sein.

Wenn du es unbedingt in VBA gelöst bekommen willst, wäre dein Ansatz nicht schlecht. Würde uns eine Menge Arbeit ersparen.

Das Skript soll als weiterer Bestandteil eines größeren Skripts in den Code implementiert werden, daher scheiden die Excel-eigenen Funktionen aus.

Ansatz habe ich so noch keinen da mein Wissen 12 Jahre alt ist, ich mir die bisherigen Parts aber Dank vielen versuchen und Recherchen im Internet zusammenschustern konnte :)

Vom Prinzip her sollte der Wert aus Spalte J in eine Variable geschrieben und die Anzahl auf "1" gesetzt werden. Wenn der gleiche dann noch mal auftaucht eben wieder "+1" usw. Das gilt natürlich für alle unterschiedlichen Einträge in der Liste.

0
@Chris8301

okey, mal ein Ansatz:

clsListe

Option Explicit

Dim saWerte(1000)
Dim iaAnzahl(1000)

Public Sub Add(sWert)
  Dim i
  Dim bGefunden
  
  bGefunden = False
  For i = 0 To UBound(saWerte)
    If (saWerte(i) = "") Then _
      Exit For
    If (saWerte(i) = sWert) Then
      iaAnzahl(i) = iaAnzahl(i) + 1
      bGefunden = True
      Exit For
    End If
  Next
  If Not bGefunden Then
    saWerte(i) = sWert
    iaAnzahl(i) = 1
  End If
End Sub

Public Sub Out()
  Dim i
  For i = 0 To UBound(saWerte)
    If saWerte(i) = "" Then _
      Exit For
    Debug.Print saWerte(i) & ": " & iaAnzahl(i)
  Next
End Sub

Die Arrays kannst du noch versuchen, dynamisch zu machen.

Aufruf:

Sub ListeZaehleWerte()
  Dim oListe
  Dim rZelle
  
  Worksheets(1).Activate
  
  Set oListe = New clsListe
  For Each rZelle In Range("J1:J100")
    If rZelle.Value <> "" Then _
      oListe.Add rZelle.Value
  Next
  
  oListe.Out
  
  Set oListe = Nothing
End Sub
1
@Suboptimierer

Puh! Vielen Dank für den Code! Ich muss aber zugeben dass ich ihn nicht ganz versetehe...

Wo wird denn zum Beispiel nun der Suchbereich (die Spalte) definiert? Die Länge des Suchbereichs, ich nehme an im Teil "J1:J100" definiert, sollte auch flexibel sein da die Liste sich monatlich ändern kann. Die Länge aktuell umfasst ca. 30.000 Zeilen...

0
@Chris8301

Für Testzwecke habe ich den Bereich eingegrenzt. Willst du über die gesamte Spalte laufen, musst du Range("J:J") eingeben.

Für die Klasse machst du ein Klassenmodul (Einfügen → Klassenmodul → Name der Klasse bei der Eigenschaft des Moduls ändern)

0

Excel Makro - Spalte automatisch und fortlaufend gruppieren

Hallo liebe Exel VBA-ler,

ich bräuchte ein Makro, welches automatisch gruppiert und ausblendet.

Folgende Situation:

In einem Tabellenblatt werden immer neue Spalten hinzugefügt, füllen sich also von Spalte J nach Spalte xy auf (Verlauf von neu nach alt). Ich möchte nun, dass er Spalte J bis zur letzten Spalte mit Inhalt gruppiert, damit man nicht nicht den Überblick verliert.

Ich habe 2 Bilder angefügt, um das visuell etwas zu verdeutlichen.

Ist das möglich ?

LG gerrul3r

...zur Frage

Kopieren aus Puffer (Excel)?

Hallo,

ich habe in Zelle Kn (=Pufferspalte) das aktuelle Datum stehen, welches ich in die nächste freie Zelle Fn kopieren muss, wobei die älteren Daten aus F nicht überschrieben werden dürfen.
Bitte um Hilfe.
Danke im Vorraus

...zur Frage

Wie kann ich in Excel VBA eine Zeile in die nächste leere Zeile eines anderen Tabellenblattes einfügen?

Hi, ich habe hier ein Makro und weiß nicht was dabei falsch ist.... Makro: http://www.codecopy.de/?action=show&q=92cabe Das Makro funktioniert auch, aber nur kurz... Wenn ich es einmal ausführe dann klappt alles, auch beim zweiten mal wird die Zeile von Tabelle1 in Tabelle5 eingefügt! Beim dritten Mal Ausführen allerdings, sind im Tabellenblatt 5 nur Zwei Zeilen eingefügt worden! Woran kann das liegen und wie kann ich es beheben? Bzw. wenn es eine bessere Variante gibt es zu machen bitte schreibt mir den Quellcode! Das soll das Programm machen: Wenn in Tabelle1 in der Spalte L (12) in der dritten Zeile ein Wert steht, ob Text oder sonst was ist egal, dann soll die ganze Zeile kopiert und in Tabelle5 in der nächsten leeren Zeile eingefügt werden! Bitte helft mir mit diesem Makro! Danke für die Antworten schon im Voraus!

...zur Frage

Excel Steuerelement Schriftart in Arial ändern?

Hi,

ich möchte in einer Exceltabelle, in der ein Steuerelement eingebunden ist die Schriftart des Steuerelements ändern, ist das möglich und wenn ja wie?

Mit freundlichen Grüßen

...zur Frage

Excel =WENN mit SVERWEIS

Hallo,

ich muss derzeit folgendes in Excel lösen:

Ich habe 2 Tabellenbläter (Tabellenblatt1 und Tabellenblatt2).

Mein Projekt kann man mit einer Einkaufsliste vergleichen:

Im Tabellenblatt1 habe ich in Spalte A die Produkte. Trage ich in Spalte B ein "x" ein, soll das Produkt im Tabellenblatt 2 in der Spalte A2 (etc.) angezeigt werden.

Hat jemand eine Lösung?

...zur Frage

VBA Makro Löschabfrage einer Tabelle zuordnen?

Hi,

ich möchte ein Makro in Excel schreiben, das Daten löscht und neue einsetzt, aber möchte das in einer bestimmten Tabelle einer Datei machen und nicht in der Tabelle in der ich das Makro ausführe, wie geht das oder gibt es eine leichtere Variante?

Mit freundlichen Grüßen

...zur Frage

Was möchtest Du wissen?