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

Find-Befehl/gefilterte Daten

Forumthread: Find-Befehl/gefilterte Daten

Find-Befehl/gefilterte Daten
05.06.2008 13:39:00
Petra
Schönen Nachmittag an alle

Sub tt()
Dim a
With Sheets("Tabelle1")
a = .Cells.Find("4711", [A1], , , xlByRows, xlPrevious).Row
End With
End Sub


dieses Codeschnipsel funktioniert,
nur, wenn ich die Tabelle filtere (4711 wird rausgefiltert, nicht angezeigt) kommt es zum
Laufzeitfehler 91 , - Objektvariable oder With-Blockvariable nicht festgelegt -
Was ist zu tun, damit es auch bei gefilterter Liste funktioniert?
Liebe Grüße Petra

Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Find-Befehl/gefilterte Daten
05.06.2008 13:55:00
Chris
servus Petra,
so:

Sub tt()
Dim a
With Sheets("Tabelle3")
If Not .Cells.Find("4711", [A1], , , xlByRows, xlPrevious) Is Nothing Then
a = .Cells.Find("4711", [A1], , , xlByRows, xlPrevious).Row
Else
Exit Sub
End If
End With
'MsgBox a
End Sub


Gruß
Chris

Anzeige
AW: Find-Befehl/gefilterte Daten
05.06.2008 14:00:57
Petra
Servus Chris
das wars wohl nicht,
in meinem Beispiel gibt es ja die 4711, ist jedoch durch Filterung nicht angezeigt. Trotzdem brauche ich die Zeilennummer der 4711!
Wer hat einen brauchbaren Tipp?
Grüße Petra

AW: Anmerkung!
05.06.2008 14:02:48
Chris
Servus Petra,
jetzt bringt der Code nur keine Fehlermeldung mehr, allerdings werden die gefilterten Zeilen so trotzdem nicht gefunden. D.h.: a = 0
Gruß
chris

Anzeige
AW: Anmerkung!
05.06.2008 14:06:00
Petra
Hallo Chris
ich hab nicht nach der Fehlerunterdrückung gefragt!
Mein Problem ist, eine bestimmte Zeilennummer zu finden, auch wenn diese ausgeblendet (durch Filter) ist.
Ich warte sehnsüchtig nach dem richtigen Tipp!
Liebe Grüße Petra

AW: Anmerkung!
05.06.2008 14:18:00
Chris
Servus Petra,
da fällt mir nur das ein (mit einer Schleife durchlaufen), wenn kein Treffer:

Sub tt()
Dim a, lastRow, i
With Sheets("Tabelle3")
If Not .Cells.Find("4711", [A1], , , xlByRows, xlPrevious) Is Nothing Then
a = .Cells.Find("4711", [A1], , , xlByRows, xlPrevious).Row
Else
lastRow = .Cells.SpecialCells(xlCellTypeLastCell).Row
For i = 1 To lastRow
If .Cells(i, 1).EntireRow.Hidden = True Then
a = .Cells(i, 1).Row
Exit For
End If
Next i
End If
End With
MsgBox a
End Sub


Gruß
Chris

Anzeige
AW: Anmerkung!
05.06.2008 14:28:47
Petra
Hallo Chris
das funktioniert leider nicht!
Was Du machst, ist die erste ausgeblendete (gefilterte) Zeilennummer auszugeben! Das war aber nicht meine Fragestellung.
Ich warte weiter auf den richtigen Tipp!
Grüße Petra

AW: Anmerkung!
05.06.2008 15:42:23
Nepumuk
Hallo Petra,
versuch es mal so:
Public Sub Beispiel()
    Dim vntArray As Variant
    Dim lngRow As Long
    vntArray = Tabelle1.Columns(1).Value2
    For lngRow = LBound(vntArray) To UBound(vntArray)
        If vntArray(lngRow, 1) = 4711 Then
            MsgBox lngRow
            Exit For
        End If
    Next
End Sub

Gruß
Nepumuk

Anzeige
AW: Anmerkung!
05.06.2008 16:36:59
Petra
Hallo Nepumuk
Deine Lösung ist Spitze, vielen Dank dafür!
Schönen Tag noch und liebe Grüße
Petra

Anzeige
AW: Sorry mal...
05.06.2008 14:38:00
Chris
... aber dein Code-Schnipsel findet genau eine Zeile in der 4711 steht und zwar die erste von unten. Was willst du überhaupt erreichen?
Willst du alle Zeilen finden, die gefiltert sind, oder was?
Wenn man natürlich etwas erklärungsfaul ist, dann ist klar dass es zu Missverständnissen kommt.
Also beschreib einfach genau, was du willst, dann bekommst du auch eine einwandfrei funktionierende Lösung.
Gruß
Chris

Anzeige
AW: Sorry mal...
05.06.2008 14:50:41
Petra
Hallo Chris
hier mal eine kleine Beispieldatei

Die Datei https://www.herber.de/bbs/user/52850.xls wurde aus Datenschutzgründen gelöscht


vielleicht wirds Dir jetzt klarer!
Grüße Petra

AW: Sorry mal...
05.06.2008 15:29:00
Chris
Servus Petra,
hier die beiden finden 4711 aber nur jeweils den ersten Eintrag von oben oder von unten:

Sub tt3() ' von oben, aber immer nur die erste
Dim a, lastRow, i
With Sheets("Tabelle1")
If Not .Range("A:A").Find("4711", [A1], , , xlByRows, xlPrevious) Is Nothing Then
a = .Range("A:A").Find("4711", [A1], , , xlByRows, xlPrevious).Row
Else
lastRow = .Range("A65536").End(xlUp).Row
For i = 2 To lastRow
If .Cells(i, 1).EntireRow.Hidden = True And .Cells(i, 1).Value = "4711" Then
a = .Cells(i, 1).Row
Exit For
End If
Next i
End If
End With
MsgBox a
End Sub



Sub tt4() ' von unten, aber immer nur die erste
Dim a, lastRow, i
With Sheets("Tabelle1")
If Not .Range("A:A").Find("4711", [A1], , , xlByRows, xlPrevious) Is Nothing Then
a = .Range("A:A").Find("4711", [A1], , , xlByRows, xlPrevious).Row
Else
lastRow = .Range("A65536").End(xlUp).Row
For i = lastRow To 2 Step -1
If .Cells(i, 1).EntireRow.Hidden = True And .Cells(i, 1).Value = "4711" Then
a = .Cells(i, 1).Row
Exit For
End If
Next i
End If
End With
MsgBox a
End Sub


wenn du alle Einträge haben willst, dann musst du alle in einen Array einlesen, aber da gibt es den ein oder anderen Schönheitsfehler, der noch behoben werden muss.
Gruß
Chris

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Find-Befehl für gefilterte Daten in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne deine Excel-Datei und gehe zur entsprechenden Tabelle.

  2. Drücke Alt + F11, um den VBA-Editor zu öffnen.

  3. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (deinDateiname)" > Einfügen > Modul.

  4. Kopiere den folgenden Code in das Modul:

    Sub FindFilteredData()
       Dim foundCell As Range
       Dim searchValue As String
       Dim ws As Worksheet
    
       searchValue = "4711" ' Wert, den du suchen möchtest
       Set ws = ThisWorkbook.Sheets("Tabelle1") ' Ersetze "Tabelle1" mit deinem Tabellennamen
    
       ' Suche nach dem Wert, auch wenn die Zeilen gefiltert sind
       On Error Resume Next
       Set foundCell = ws.Cells.Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
       On Error GoTo 0
    
       If Not foundCell Is Nothing Then
           MsgBox "Der Wert wurde in Zeile " & foundCell.Row & " gefunden."
       Else
           MsgBox "Der Wert wurde nicht gefunden."
       End If
    End Sub
  5. Führe das Makro aus, indem du F5 drückst oder im VBA-Editor auf Run klickst.


Häufige Fehler und Lösungen

  • Laufzeitfehler 91: Dieser Fehler tritt auf, wenn der gesuchte Wert nicht gefunden wird. Stelle sicher, dass der Wert existiert, auch wenn die Zeile gefiltert ist.

  • Objektvariable oder With-Blockvariable nicht festgelegt: Überprüfe, ob das Arbeitsblatt korrekt benannt ist und existiert.

  • Kein Wert gefunden: Wenn der Wert in einer gefilterten Zeile liegt, wird er möglicherweise nicht angezeigt. Verwende die alternative Methode, um auch versteckte Zeilen zu durchsuchen.


Alternative Methoden

  • Verwende ein Array: Du kannst alle Werte in ein Array einlesen und dann nach dem gesuchten Wert suchen. Diese Methode ist besonders nützlich, wenn du mehrere Vorkommen des Wertes finden möchtest.

    Sub FindInArray()
       Dim arr As Variant
       Dim i As Long
       Dim ws As Worksheet
    
       Set ws = ThisWorkbook.Sheets("Tabelle1")
       arr = ws.Columns(1).Value
    
       For i = LBound(arr, 1) To UBound(arr, 1)
           If arr(i, 1) = "4711" Then
               MsgBox "Wert gefunden in Zeile " & i
               Exit Sub
           End If
       Next i
    
       MsgBox "Wert nicht gefunden"
    End Sub

Praktische Beispiele

  • Wenn du nach einem bestimmten Wert suchst, der durch Filter ausgeblendet ist, kannst du die oben genannten Methoden verwenden, um die Zeilennummer zu ermitteln.

  • Die von Chris vorgeschlagenen Methoden, die eine Schleife verwenden, sind ebenfalls nützlich, um alle Einträge zu finden, die gefiltert sind.


Tipps für Profis

  • Verwende das On Error Resume Next-Statement, um Laufzeitfehler zu vermeiden, besonders wenn du mit gefilterten Daten arbeitest.

  • Teste deinen Code in einer Kopie deiner Datei, um unbeabsichtigte Änderungen zu vermeiden.

  • Nutze die Möglichkeit, Debugging-Tools im VBA-Editor einzusetzen, um den Code Schritt für Schritt durchzugehen und Fehler zu identifizieren.


FAQ: Häufige Fragen

1. Kann ich mehrere Werte gleichzeitig suchen?
Ja, du kannst die Suche erweitern, indem du eine Schleife über ein Array von Werten durchführst.

2. Funktioniert dieser Code in allen Excel-Versionen?
Der gegebene Code sollte in den meisten modernen Excel-Versionen (ab 2007) funktionieren, solange VBA unterstützt wird.

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