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 VBA Zellen vergleichen und bei Übereinstimmung Zeile löschen

Hallo miteinander, kenne mich leider gar nicht in VBA aus und brauche dringend Hilfe für ein Projekt. Ich beschreibe mal kurz mein Problem: Im Worksheet "Objekt löschen" in zeile C6 soll eine Objekt ID eingegeben werden. Diese muss dann mit den Objekt IDs im Worksheet "Objektdaten" in der Spalte B verglichen werden. Wenn sie dort existiert, dann soll die gesamte Zeile, in der sich die eingegebene ID befindet, gelöscht werden. Das ganze soll funktionieren, indem man auf eine Schaltfläche auf dem 1. Tabellenblatt klickt. Ich hoffe, das war jetzt einigermaßen verständlich erklärt. Freue mich sehr über eure Hilfe Danke :) Rosi

...zur Frage

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

Laufzeitfehler 429 in VBA (Excel Makro)?

Hallo!

Zurzeit versuche ich mich an VBA. Ich habe ein Makro erstellt, dass aus einer Excel Tabelle z.B. eine Rechnung erstellt ( durch befüllen der Texftfelder einer Vorlage )

Nun wollte ich das Makro so umändern, dass automatisch der richtige Pfad zum Speichern bzw Öffnen der Vorlage, für den jeweiligen Windows Nutzer benutzt wird. ( Das habe ich mithilfe von Workbook.Path gemacht.

Allerdings gibt er mir jetzt immer Laufzeitfehler 429 aus und ich weiß nicht was zu tun ist.

Bitte helft mir. ( Office und Word sind up to date )

Grüße

Chris

Hier mein Code: https://paste2.org/E8ZmvBXk

...zur Frage

Wie durchsuche ich meine Excel Datei nach bestimmten Wörtern pro Spalte, um bei der Dateneingabe und der Suche nach der richtigen Excelzeile Zeit zu sparen?

Meine Datentabllen wachsen und wachsen. Dennoch möchte ich die gesuchte Excel Zeile möglichst schnell finden.

Ich hatte hierfür schonmal eine Suchzeile, inder mir die Zeile mit dem Wert ausgegeben wird, welche ich für die erste Spalte als Vergleich gesucht habe.


=WENNFEHLER(INDEX($A$2:$Z$4400;VERGLEICH($AC$4;$A$2:$A$4400;0);VERGLEICH(AE$2;$A$1:$Z$1;0));"Gib in AC4 einen Wort ein!")

Also kurz erklärt, In AC4 gibt man den gesuchten Wortlaut an. In AE2 ist die varilable Beschriftung der zu durchsuchenden Spalte.

Nun möchte ich, dass in der ersten zu durchsuchenden Spalte (das Wort wird in AC4 angegeben) nach dem Wort auch innerhalb der Zelle gesucht wird. Eignet sich zB für Doppelnamen und man nur nach einem Suchen kann, weil der zweite im Schreiben nicht erwähnt ist. Es sollte ein Treffen mit dem vollständigen Inhalt der gefundenen Zelle ausgegeben werden.

Die darauf folgende Formel rechts nebendran ließt jetzt aus Zelle AC5 einen weiteren Wortteil heraus, welcher in der gleichen Zeile existieren muss wie der Wortteil aus AC4. Somit muss durch die Eingabe in Zelle AC5 (falls FALSCH) die Tabelle weiter durchsucht werden nach dem gleichen Prinzip.

Am Ende der Suchspalte ist dann ein variabler Hyperlink der mich direkt zur passenden Zeile führt, nachden ich bestätigen kann, dass es bei den angezeigten Angaben sich um den richtigen Datenzeilensatz handelt.

Theoretisch gelaube ich schon, dass das mit Excel möglich ist. Bloß ich weiß es einfach nicht :(

Vielen Lieben Dank Für Deine Hilfe !!!

Diese Paar Codezeilen würden mir Stunden an Arbeit in Zukunft sparen :)

...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

VBA: Verschiedene Formel je Bedingung?

Ich sitze leider schon länger dran aber mittlerweile habe ich ein Brett vor dem Kopf.

Ich versuche meine Frage mal wie folgt zu beschreiben:

Wenn in Spalte P Ein Eintrag Namens "Hans" Vorhanden ist, so soll in Spalte AF eine Formel A hintelegt werden.
Bei anderen Einträgen in Spalte P wird Formel B hinterlegt.

Ich schaffe es, die Formel A einzutragen und sie Funktioniert auch, aber Formel B wird komplett ignoriert, obwohl in Spalte P andere Namens als Hans erscheinen.

'Dim Ende As Long
'ActiveSheet.UsedRange.AutoFilter Field:=16, Criteria1:="HANS"
'Range("AF2").FormulaLocal = "=WENN(HEUTE()-AE2<=40;""OK"";""P"")"
'Ende = Cells.SpecialCells(xlCellTypeLastCell).Row
'Range("AF2").AutoFill Destination:=Range("AF2:AF" & Ende), Type:=xlFillDefault

'ActiveSheet.UsedRange.AutoFilter Field:=16, Criteria1:="<>HANS"
'Range("AF2").FormulaLocal = "=WENN(HEUTE()-AE2<=30;""OK"";""P"")"
'Ende = Cells.SpecialCells(xlCellTypeLastCell).Row
'Range("AF2").AutoFill Destination:=Range("AF2:AF" & Ende), Type:=xlFillDefault

Vorab lieben Dank und

Viele Grüße

...zur Frage

Was möchtest Du wissen?