Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: ListObject nach Wert durchsuchen,unterster Treffer

ListObject nach Wert durchsuchen,unterster Treffer
15.08.2018 14:33:31
Renan
Hallo zusammen,
ich benötige wieder einmal eure Hilfe :) Ich möchte mich bei dieser Gelegenheit auch noch einmal bei allen für die tolle Unterstützung bedanken! Dieses Forum ist wirklich super!
Zu meinem Vorhaben:
Ich habe einen Listenbereich mit dem Namen "tblProjekte". Dort möchte ich in der Spalte "Name" nach einem bestimmten Eintrag (im Beispiel: "Projekt B") suchen und die Zeilennummer der untersten Zelle, die diesen Eintrag enthält, zurückgeben. (Damit ich in einem Makro eine neue Zeile unter diesem Eintrag anlegen kann. Erforderlich für weitere Bearbeitung des Projektes)
Zu meinem Problem:
Es gibt mehrere Einträge die "Projekt B" heißen. Also die Variable nach der ich suche taucht in mehreren Zeilen innerhalb der durchsuchten Spalte auf.
Mein derzeitiger Code läuft nur bis er den ersten Eintrag findet und bricht dann ab. Ergo kriege ich die Zeilennummer des ersten (obersten) Listen-Eintrages das meinem Suchwert entspricht und nicht wie gewünscht die Zeilennummer des letzten (untersten) Listen-Eintrages das meinem Suchwert entspricht.
Wie kann ich mein Code verändern, damit er die Zeilennummer des untersten Eintrages liefert?
Mein derzeitiger Code:

Function GetRowNumber(lstObjName As String, tblHeader As String, SearchVar As String) As  _
Integer
Dim lstObj As ListObject
Dim Output As Variant
Set listObj = ActiveSheet.ListObjects(lstObjName)
GetRowNumber = listObj.ListColumns(tblHeader).DataBodyRange.Cells.Find(What:=SearchVar).Row
End Function

Bei meiner derzeitigen Tabelle sind die Eintrage E8:E10 alle = "Projekt B".
Nachdem ich den obigen Code ausführe, sprich:
Sub TestAusgabe()
MsgBox GetRowNumber("tblProjekte", "Name", "Projekt B")
End Sub

kriege ich "8" zurück. Ich möchte aber "10". Also die Zeilennummer des untersten Eintrages.
MfG,
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ListObject nach Wert durchsuchen,unterster Treffer
15.08.2018 14:46:54
Sepp
Hallo Renan,
probier mal so.
Function GetRowNumber(lstObjName As String, tblHeader As String, SearchVar As String) As Long
Dim listObj As ListObject, rng As Range

Set listObj = ActiveSheet.ListObjects(lstObjName)

With listObj.ListColumns(tblHeader).DataBodyRange
  Set rng = .Cells.Find(What:=SearchVar, SearchDirection:=xlPrevious, After:=.Cells(.Rows.Count, 1))
End With

If Not rng Is Nothing Then GetRowNumber = rng.Row

End Function

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: ListObject nach Wert durchsuchen,unterster Treffer
15.08.2018 16:22:01
Renan
Hallo Sepp,
hat prima funktioniert! Vielen lieben Dank!
MfG,
;

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
Anzeige

Infobox / Tutorial

ListObject nach Wert durchsuchen und den untersten Treffer finden


Schritt-für-Schritt-Anleitung

Um den untersten Treffer in einem ListObject mit Excel VBA zu finden, kannst du folgende Schritte befolgen:

  1. Öffne dein Excel-Dokument und stelle sicher, dass dein ListObject vorhanden ist (in diesem Fall "tblProjekte").

  2. Füge ein neues Modul in deinem VBA-Editor hinzu (Alt + F11, dann Einfügen > Modul).

  3. Kopiere den folgenden VBA-Code in das Modul:

    Function GetRowNumber(lstObjName As String, tblHeader As String, SearchVar As String) As Long
        Dim listObj As ListObject
        Dim rng As Range
    
        Set listObj = ActiveSheet.ListObjects(lstObjName)
    
        With listObj.ListColumns(tblHeader).DataBodyRange
            Set rng = .Cells.Find(What:=SearchVar, SearchDirection:=xlPrevious, After:=.Cells(.Rows.Count, 1))
        End With
    
        If Not rng Is Nothing Then GetRowNumber = rng.Row
    End Function
  4. Führe den folgenden Testcode aus, um die Funktion zu testen:

    Sub TestAusgabe()
        MsgBox GetRowNumber("tblProjekte", "Name", "Projekt B")
    End Sub
  5. Starte das Makro und überprüfe, ob du die Zeilennummer des untersten Eintrages erhältst.


Häufige Fehler und Lösungen

  • Fehler: "Objektvariable oder With-Blockvariable nicht festgelegt"

    • Lösung: Stelle sicher, dass der Name des ListObjects (z.B. "tblProjekte") korrekt geschrieben ist.
  • Fehler: Keine Übereinstimmung gefunden

    • Lösung: Überprüfe, ob der Suchwert (z.B. "Projekt B") genau so geschrieben ist wie in der Tabelle, einschließlich Groß- und Kleinschreibung.

Alternative Methoden

Eine alternative Möglichkeit, den untersten Wert einer Spalte in einem ListObject zu finden, wäre die Verwendung von Application.Match oder einer Schleife, um durch die Einträge zu iterieren. Hier ein Beispiel mit einer Schleife:

Function GetLastRowNumber(lstObjName As String, tblHeader As String, SearchVar As String) As Long
    Dim listObj As ListObject
    Dim i As Long

    Set listObj = ActiveSheet.ListObjects(lstObjName)

    For i = listObj.ListRows.Count To 1 Step -1
        If listObj.ListColumns(tblHeader).DataBodyRange.Cells(i, 1).Value = SearchVar Then
            GetLastRowNumber = listObj.ListColumns(tblHeader).DataBodyRange.Cells(i, 1).Row
            Exit Function
        End If
    Next i

    GetLastRowNumber = -1 'Falls nichts gefunden wird
End Function

Praktische Beispiele

Angenommen, du hast in deiner Tabelle mehrere Zeilen mit dem Namen "Projekt B" in der Spalte "Name". Durch die Anwendung der oben genannten Funktion GetRowNumber erhältst du die Zeilennummer der letzten Übereinstimmung. Wenn du also vier Zeilen mit "Projekt B" hast, wird die Funktion die Zeilennummer der letzten Übereinstimmung zurückgeben.


Tipps für Profis

  • Nutze die databodyrange.find Methode, um die Suche effizienter zu gestalten.
  • Achte darauf, dass du den SearchDirection auf xlPrevious setzt, um den untersten Wert zu finden.
  • Experimentiere mit xlPart oder xlWhole in der Find-Methode, um nach Teilstrings oder exakten Übereinstimmungen zu suchen.

FAQ: Häufige Fragen

1. Wie kann ich die Funktion für andere Spalten anpassen?
Du kannst die Funktion einfach aufrufen, indem du den Namen der entsprechenden Spalte als tblHeader übergibst.

2. Was passiert, wenn der Suchwert nicht gefunden wird?
In diesem Fall gibt die Funktion -1 zurück. Du kannst dies in deinem Code abfangen und entsprechend reagieren.

3. Ist die Verwendung von ListObjects in älteren Excel-Versionen möglich?
Ja, ListObjects sind ab Excel 2007 verfügbar. Stelle sicher, dass du eine kompatible Version verwendest.

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