Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Daten finden mit find/findnext Methode

VBA Daten finden mit find/findnext Methode
Axel
Hallo,"
ich habe mal wieder ein kleines Problem mit VBA.
Ich habe ein Excelblatt mit mehreren Tabellen, die ich in kopieren will. Wobei dieses Blatt immer wieder neu erstellt wird und somit sich die Tabellen jedes Mal ändern.
Die Tabellen sind begrenzt, von oben nach unten durch "leere Zellen" und von Links nach Rechts durch den Begriff "TIME".
Ich hatte mir vorgestellt, dass ich praktisch die Eckpunkte in einen Array schreibe und dann anhand dieses die Daten kopiere. Leider funktioniert meine find/findnext Methode nicht so richtig.
Der erste Teil funktioniert sehr gut und ich bekomme die Spalten in denen die Tabellen anfangen. Aber der Zweite Teil (Zeilen) funktioniert leider nicht wie gewünscht.
Ich habe auch schon versucht beide Suchen in eine Funktion zu schreiben, aber das ist mir leider auch misslungen.
Sub Datenfinden()
Dim i As Integer
Dim gefundene_Zelle_TIME As Range, gefundene_Zelle_leer As Range, ErsteZelle As Range
Dim Spalte(3)
Dim Zeile(3)
i = 0
With Sheets(1).Range("A2:ZZ2")
Set gefundene_Zelle_TIME = .Find(What:="TIME", After:=.Cells(.Cells.Count), LookIn:=xlValues,  _
SearchDirection:=xlNext, MatchCase:=False) 'Sucht den Begriff
If Not gefundene_Zelle_TIME Is Nothing Then
ErsteZelle = gefundene_Zelle_TIME.Address
Do
Spalte(i) = gefundene_Zelle_TIME.Column
Set gefundene_Zelle_TIME = .FindNext(gefundene_Zelle_TIME)
i = i + 1
Loop While Not gefundene_Zelle_TIME Is Nothing And gefundene_Zelle_TIME.Address   _
ErsteZelle 'Prüf so lange, bis wieder die erste Zelle gefunden wurde
End If 'Prüft ob der Suchbegriff überhaupt existiert
End With
i = 0
Spaltenbuchstabe = Split(Cells(1, Spalte(i)).Address, "$")(1)
Set gefundene_Zelle_leer = Range(Spaltenbuchstabe & ":" & Spaltenbuchstabe).Find(What:="",  _
LookIn:=xlValues, SearchDirection:=xlNext, MatchCase:=False) 'Sucht den Begriff
If Not gefundene_Zelle_leer Is Nothing Then
ErsteZelle = gefundene_Zelle_leer.Address
Do
Zeile(i) = gefundene_Zelle_leer.Row
i = i + 1
Spaltenbuchstabe = Split(Cells(1, Spalte(i)).Address, "$")(1)
Set gefundene_Zelle_leer = Range(Spaltenbuchstabe & ":" & Spaltenbuchstabe). _
FindNext("")
Loop While Not gefundene_Zelle_leer Is Nothing And gefundene_Zelle_leer.Address   _
ErsteZelle 'Prüft so lange, bis wieder die erste Zelle gefunden wurde
End If 'Prüft ob der Suchbegriff überhaupt existiert
End Sub
Habt ihr evtl. einen Tipp für mich? Gibt es evtl. eine einfachere Methode?
Gruß und Dank
Axel
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA Daten finden mit find/findnext Methode
07.04.2010 09:18:56
ChrisL
Hi Axel
Probier mal...
gefundene_Zelle_leer = Cells(65536, Spalte(i)).End(xlUp).Row
evtl. noch plus 1
Gruss
Chris
AW: VBA Daten finden mit find/findnext Methode
07.04.2010 13:04:52
Axel
Hallo Chris,
deine Lösung funktioniert. Danke!
@Christian:
Du hast sicherlich recht damit, dass mir die ein oder andere Grundlage fehlt, aber dieser Fehler ist durch das komprimieren der eigentlichen Datei entstanden.
Gruß und Dank
Axel
Anzeige
AW: VBA Daten finden mit find/findnext Methode
07.04.2010 10:09:14
Christian
Hallo,
ich bezweifel auch, dass der erste Teil funktioniert.
Dein "ErsteZelle" ist ein String, du hast dies aber als Range deklariert.
Andere Variablen deklariertst du erst gar nicht...
Einen Teil referenzierst du auf die 1. Tabelle, ein anderen Teil auf das aktive Blatt.
fang mal mit den Basics an... dort wirst du über Themen stolpern, die dir bei VBA gut seit Jahren bestens bekannt sein sollten.
Gruß
Christian
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Daten finden mit VBA: Die find/findnext Methode


Schritt-für-Schritt-Anleitung

Um die find und findnext Methoden in Excel VBA effektiv zu nutzen, folge diesen Schritten:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Modul einfügen: Klicke mit der rechten Maustaste auf "VBAProject (deinWorkbookName)", gehe zu "Einfügen" und wähle "Modul".

  3. Code einfügen: Kopiere und füge den folgenden Code in das Modul ein:

    Sub Datenfinden()
       Dim i As Integer
       Dim gefundene_Zelle_TIME As Range, gefundene_Zelle_leer As Range, ErsteZelle As String
       Dim Spalte(3) As Integer
       Dim Zeile(3) As Integer
       i = 0
       With Sheets(1).Range("A2:ZZ2")
           Set gefundene_Zelle_TIME = .Find(What:="TIME", After:=.Cells(.Cells.Count), LookIn:=xlValues, _
           SearchDirection:=xlNext, MatchCase:=False)
           If Not gefundene_Zelle_TIME Is Nothing Then
               ErsteZelle = gefundene_Zelle_TIME.Address
               Do
                   Spalte(i) = gefundene_Zelle_TIME.Column
                   Set gefundene_Zelle_TIME = .FindNext(gefundene_Zelle_TIME)
                   i = i + 1
               Loop While Not gefundene_Zelle_TIME Is Nothing And gefundene_Zelle_TIME.Address <> ErsteZelle
           End If
       End With
    
       i = 0
       Set gefundene_Zelle_leer = Cells(65536, Spalte(i)).End(xlUp).Offset(1, 0)
       If Not gefundene_Zelle_leer Is Nothing Then
           ErsteZelle = gefundene_Zelle_leer.Address
           Do
               Zeile(i) = gefundene_Zelle_leer.Row
               i = i + 1
               Set gefundene_Zelle_leer = Cells(65536, Spalte(i)).End(xlUp).Offset(1, 0)
           Loop While Not gefundene_Zelle_leer Is Nothing And gefundene_Zelle_leer.Address <> ErsteZelle
       End If
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle Datenfinden und klicke auf "Ausführen".


Häufige Fehler und Lösungen

  • Fehler bei der Variablendeklaration: Achte darauf, dass alle Variablen korrekt deklariert sind. Der Fehler in Axels Code war, dass ErsteZelle als Range deklariert war, aber tatsächlich ein String sein sollte.

  • Nichts gefunden: Wenn das Makro keine Werte findet, überprüfe, ob der Suchbegriff "TIME" tatsächlich im angegebenen Bereich vorhanden ist.

  • Endlos-Schleifen: Achte darauf, dass die Abbruchbedingung in den Schleifen korrekt ist, um unendliche Schleifen zu vermeiden.


Alternative Methoden

Falls die find und findnext Methoden nicht die gewünschten Ergebnisse liefern, kannst du auch die Range-Objekte direkt mit einer Schleife durchsuchen:

Dim cell As Range
For Each cell In Sheets(1).Range("A2:ZZ2")
    If cell.Value = "TIME" Then
        ' Weiterverarbeitung
    End If
Next cell

Diese Methode ist zwar weniger effizient, dafür aber einfacher zu verstehen und zu implementieren.


Praktische Beispiele

Hier sind einige praktische Anwendungsbeispiele für die findnext Methode:

  1. Mehrere Suchbegriffe: Du kannst die Methode auch erweitern, um mehrere Begriffe zu suchen, indem du eine Liste von Suchbegriffen in ein Array speicherst und diese in einer Schleife abarbeitest.

  2. Daten extrahieren: Nutze die find Methode, um Daten in einer großen Tabelle zu suchen und die Ergebnisse in ein neues Arbeitsblatt zu kopieren.

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets.Add
' Daten kopieren

Tipps für Profis

  • Fehlerbehandlung: Verwende On Error Resume Next und On Error GoTo 0, um Fehler zu behandeln und die Ausführung deines Codes nicht abrupt zu stoppen.

  • Leistung optimieren: Schalte die Bildschirmaktualisierung mit Application.ScreenUpdating = False aus, bevor du große Datenmengen verarbeitest, und aktiviere sie danach wieder.

  • Nachhaltige Programmierung: Halte deinen Code modular und sauber, indem du häufig genutzte Funktionen in separate Subroutinen auslagerst.


FAQ: Häufige Fragen

1. Wie kann ich die findnext Methode in einer Schleife verwenden? Die findnext Methode kann in einer Schleife verwendet werden, um alle Vorkommen eines Suchbegriffs zu finden, indem du den gefundenen Bereich speicherst und dann mit FindNext weitermachst.

2. Was ist der Unterschied zwischen Find und FindNext? Die Find Methode sucht das erste Vorkommen eines Wertes, während die FindNext Methode das nächste Vorkommen des zuletzt gefundenen Wertes sucht.

3. Welche Excel-Version ist für die Verwendung von VBA erforderlich? VBA ist in Excel-Versionen seit Excel 97 verfügbar, jedoch solltest du sicherstellen, dass du eine aktuelle Version verwendest, um alle Funktionen und Sicherheitsupdates nutzen zu können.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige