Suchtext aus Spalte A einer Wertetabelle in Excelzelle suchen und Wert aus Spalet B zurückgeben

  • Excel

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Suchtext aus Spalte A einer Wertetabelle in Excelzelle suchen und Wert aus Spalet B zurückgeben

    Hallo,

    in Excel bin ich recht fit, komme aber mit WENN und SVERWEIS Funktionen nicht weiter. Wer kann mir helfen ein VBA Script zu erstellen, das eine Zelle A2 nach einen Textteil durchsucht. Dabei ist der Suchtext aus der Spalte A des Wertevorrates zu durchlaufen, so dass bei einem Treffer der Rückgabewert der gleichen Zeile der Spalte B in B2 zurückgegeben wird .

    Beispiel ist angehängt.

    Mit eienr WENN Abfrage kann man bis zu 8 Werte geschachtetlt abfragen und das ganze mehrfach für alle Wert wiederholen - aber das ist ja nun keine Programmierung...

    Kann man eine if Abfrage mit einem verweis auf die erste Stelle eines loops bastelt. Oder was sollte man sinnvollerweise tun, dass die Tabelle des Wertevorrates beliebig erweitert und gepflegt werden kann?

    Danke für eure Idee und euer Wissen, dass ih reinbringt.
    Dateien
    • Mappe1.xls

      (25,09 kB, 288 mal heruntergeladen, zuletzt: )

    Suchtext aus Spalte A einer Wertetabelle in Excelzelle suchen und Wert aus Spalte B zurückgeben

    petaod schrieb:

    Zitat von »Wagen.Mark« komme aber mit WENN und SVERWEIS Funktionen nicht weiter Das ist doch aber ein ganz typischer SVERWEIS.

    Hi, beim sverweis, wie ich ihn kenne und verstehe, gebe ich EINEN Wert an, der eine Matrix durchläuft und einen Wert aus einer Zelle einer bestimmten Spalte der Matrix zurückgibt.

    Meine Herausforderung besteht darin, dass ich nach einem Textteil in einer Zelle suche, wobei ich nicht den EINEN Wert , sondern eine List von Textteilen aus einer zweiten Liste an Textteilen abarbeite, bis ich einen Treffer lande. Mit diesem kann ich einen Sverweis machen und einen weiteren Wert zurückgeben.

    Beispiel

    in der ersten Zelle der Liste der Automarken mit diversen Typenbezeichnungen suche ich nur nach dem Textteil "Audi" um ein Audi Modell zu idenzifizieren. Gibt die Suche keinen Wert zurück, so durchlaufe ich die SUCHTEXTTEILLISTE :) und nehme den nächsten Suchtextteil "BMW" und durchsuche die gleiche Zelle. Für die Ergebnisse Audi und BMW kann ich dann sauber über einen sverweis die nächste Rückgabe machen "deutsche Automarken".

    Das ganze geht mit der Schachtelung der Funktionen SUCHE uns SVERWEIS , was aber bei 100 Automarken nicht sinnvoll ist. Also brauche ich einen Algorythmus der die Liste (SUCHTEXTLISTE) der Automarken nimmt und mit dieser meine Tabelle von 3000 Fahrzeugen durchsucht.

    Hoffentlcih habe ich meinen Bedarf nun klarer formuliert.

    Danke für Eure Geduld und Hilfe :)

    Visual Basic-Quellcode

    1. Sub SetCompanyName()
    2. For Each Cell In Range("Automarken")
    3. Cell.Offset(0, 1).Value = CompanyName(Cell)
    4. Next
    5. End Sub
    6. Function CompanyName(ByVal SearchText As String) As String
    7. SearchText = " " & LCase(SearchText) & " "
    8. For Each c In Range("WerteVorratSuchText")
    9. If InStr(1, SearchText, " " & LCase(c.Value) & " ") > 0 Then
    10. CompanyName = c.Offset(0, 1).Value
    11. Exit Function
    12. End If
    13. Next
    14. End Function
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Hallo petaod,

    es hat funktioniert. Besten Dank.

    Nun noch zwei Fragen.

    1. Nun werden bei der Textsuche nur Textteile gesucht / gefunden bei dem ein Leerzeichen folgt. Wie kann ich die Suche nach Textteilen verändern, die nur ein Bruchteil einrs ganzen Wortes in des Zelle sind?

    2. Nachdem das Scipt einmal durchlaufen ist, sollte es die bereits gefüllten Felder nicht mehr überarbeiten. Wie lautet dann der Aufruf. Sollte ich dass einfach mit einer if else abfrage machen? Alternativ könnte die Abfrage auch nur für die Zelle ablaufen, die derzeit active ist - wie macht man so etwas?

    Gruß
    1) Der Suchtext muss ja eindeutig sein. Sonst findest du bei "Audi" auch "Alfa Romeo"-Einträge, weil in beiden ein A enthalten ist. Das macht für mich wenig Sinn.

    2)

    Visual Basic-Quellcode

    1. If Not IsEmpty( Cell.Offset(0,1)) Then Cell.Offset(0, 1).Value = CompanyName(Cell)
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Danke für die Hilfe.

    zu 1) ist mir klar, nur müsste ich dann beide möglichen Suchtexte angeben, also "Audi" und "Audi ", denn das script findet ja nur Text mit einem nachfolgendnen Leerzeichen

    2) muß ich noch ans Laufen bekommen, da ich mir zugleich auch noch überlegen muß, das script nur für einen markierten Bereich ablaufen zu lassen, da sonnst die bereits gefüllte Tabelle nochmal komplett durchlaufen wird, was keinen sinn macht

    Gruß

    Wagen.Mark schrieb:

    denn das script findet ja nur Text mit einem nachfolgendnen Leerzeichen
    Das täuscht.
    Geh's im Debugger mal durch, dann siehst du, wo die Separator-Wirkung der künstlich eingefügten Leerzeichen zuschlägt.
    Du kannst ja die Blanks mal durch einen Leerstring ersetzen, dann wird's wesentlich abgeschwächter und in meinen Augen u.U. fehlerträchtig.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --