Excel Suche nach 2 Werten

  • Hallo...


    wie kann ich in Excel in einer Tabelle nach 2 Werten gleichzeitig suchen???

    Wie ich nach einem suche, habe ich herausgefunden, aber ich bekomme es nicht hin, das AutoIt nur die Zellenadresse wiedergibt, wenn beide "SuchWerte" übereinstimmen...


    Wer kann mir evtl. helfen ?


    Die Tabelle sieht so aus :



    Die Tabelle geht rechts noch weiter, d.h. zu jeder Zeile gibt es weitere Einträge, die dann übertragen werden müssen!


    Ich suche z.B. nach "C14435440" und das Array gibt mir die Werte "L01" und "L03" als Auswahl zurück, soweit, so gut, jetzt möchte ich, wenn ich z.B. "L03" auswähle aus dem Ergebnis, alle Zellen in Excel, die rechts neben (in dem Fall "L03") stehen, übertragen...


    In der Tabelle kann es durchaus sein, das Werte öfters vorkommen, deshalb das Problem, mit der normalen Methode findet er immer den ersten Eintrag, aber nicht den passenden...


    also kurzum, wenn "C14435440" und dazugehörend "L03" gefunden wird, dann soll er alle Zellenwerte übertragen, die rechts daneben stehen...



    Ich hoffe, ich habe es nicht zu kompliziert erklärt :(


    Wäre für eine Hilfe sehr dankbar...


    Gruß

  • Hi creativewonders ,


    willkommen im Forum 👋 .

    1. Bitte teile deine Excel bzw. ein Teil davon oder erstelle kurz eine Demo-Excel (falls das Original sensible Daten enthalten sollte) die wir nutzen können und hänge sie bitte deinem post #1 an, Danke 🤝 .
    2. Des Weiteren habe ich nicht verstanden, was du mit "übertragen" konkret meinst, kannst du dies nochmal bitte kurz beschreiben?
    3. Sinnvoll ist es auf jeden Fall auch, dass du deinen bisherigen Code-Stand mit uns teilst, damit wir deinen Ansatz besser verstehen können und dir ggf. weitere oder sogar robustere Varianten vorschlagen können.

    Danke für die Zuarbeit, damit wird dir hier sicherlich zügig geholfen 😀 .


    Viele Grüße
    Sven

  • search.zip

    Hi creativewonders ,


    willkommen im Forum 👋 .

    1. Bitte teile deine Excel bzw. ein Teil davon oder erstelle kurz eine Demo-Excel (falls das Original sensible Daten enthalten sollte) die wir nutzen können und hänge sie bitte deinem post #1 an, Danke 🤝 .
    2. Des Weiteren habe ich nicht verstanden, was du mit "übertragen" konkret meinst, kannst du dies nochmal bitte kurz beschreiben?
    3. Sinnvoll ist es auf jeden Fall auch, dass du deinen bisherigen Code-Stand mit uns teilst, damit wir deinen Ansatz besser verstehen können und dir ggf. weitere oder sogar robustere Varianten vorschlagen können.

    Danke für die Zuarbeit, damit wird dir hier sicherlich zügig geholfen 😀 .


    Viele Grüße
    Sven

    Hallo Sven,


    danke erstmal für deine schnelle Antwort, Datei habe ich angehangen, eine ".xlsm" hat das System nicht akzeptiert, deshalb ein zip Datei :)


    Mit "übertragen" meine ich, dass ich die Werte aus den Zellen in inputboxen übergebe in AutoIT

    Nein, leider kann ich Dir den bisherigen Code nicht teilen, der erstreckt sich mittlerweile aus fast 1500 Zeilen für das gesamte Programm und das kann ich leider nicht teilen ( Firmenpolitik )


    Hier ein Ausschnitt davon ... - vielleicht reicht das ja schon :)


  • Also ohne das ganze genau angesehen zu haben:

    Exportiere den Excel Inhalt in eine CSV. Dann das ganze in ein Array einlesen, Und nun kann man mit einer simplen Schleife jederzeit nach mehr als einem Wert filtern.


    MFG


    Peter


    Ps.: Genauer geht es nicht - das ist Firmenpolitik

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • ich lese den Inhalt doch bereits in ein Array :)


    ich kann leider die komplette Excel Liste nicht rausgeben, weil es verboten ist, betriebsinterne Daten weiter zu geben ( dass zur Firmenpolitik ) :)

  • Von wievielen Zeilen/Spalten sprechen wir hier?

    Du hast ja den Großteil des Arbeitsblattes mit _Excel_RangeRead bereits nach $aData gelesen. Danach würde ich nur noch diesen Array durchsuchen.

    Beispiel (ungetestet):

  • Von wievielen Zeilen/Spalten sprechen wir hier?

    Du hast ja den Großteil des Arbeitsblattes mit _Excel_RangeRead bereits nach $aData gelesen. Danach würde ich nur noch diesen Array durchsuchen.

    Beispiel (ungetestet):

    Hi water,


    vielen Dank dafür - ich bekomme einen Syntax Error angezeigt und $sRow ist nicht deklariert - liegt es an den eckigen Klammern ?

    Habe dann $sRow deklariert und die "runden Klammern" anstelle der eckigen genommen, bekomme aber dann einen anderen Fehler , dass

    das hier nicht stimmt


    If $aData($i, 0) = $sConcern Then

    If $aData^ ERROR


    Wo liege ich falsch ??? :(



  • Mein Fehler - war wohl Kaffeemangel ;)

  • Mein Fehler - war wohl Kaffeemangel ;)

    kann schon mal passieren :)

    funktioniert soweit , nur in der Console zeigt er nix, aber als Msgbox, ich werde es mal einbauen und testen und mich melden.


    Schönes Wochenende :)

  • Moin,


    AutoIt
                For $j = 2 To UBound($aData, 2) - 1         ; alle Spalten rechts davon verarbeiten
                    $sRow = $sRow & $aData[$i][$j] & "|"    ; mit | als TrennzeichenWenn verknüpfen 
                    ConsoleWrite($sRow & @CRLF)             ; und auf Konsole ausgeben
                    $sRow = ""                              ; <<<<< und gleich danach vernichten ???
                Next

    wenn man Daten in einer Schleife in einer Variablen sammeln will, macht es eher keinen Sinn, die Variable am Ende jedes Schleifendurchlaufs zu leeren.

  • Doch!

    Schau Dir das doch mal genau an!

    Peter


    Edit: In einer Variable sammeln - grrrrr - man sollte GENAU lesen bevor man eine Antwort gibt......... ?(

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

    2 Mal editiert, zuletzt von Peter S. Taler ()

  • Velted stimmt. Das ist natürlich an dieser Stelle verkehrt.

    Korrigierte Version:

  • Velted stimmt. Das ist natürlich an dieser Stelle verkehrt.

    Korrigierte Version:



    ... ich frag mich nur, warum in der "Console" nix ausgegeben wird ... ???


    als msgbox hat es einmal funktioniert, jetzt kommt da auch nix mehr :(

  • Wo liegt der Fehler ??


  • ändere mal

    $sRow = $sRow & $aData[$i][$j] & "|" ; mit | als TrennzeichenWenn verknüpfen

    in

    $sRow &= $sRow & $aData[$i][$j] & "|" ; mit | als TrennzeichenWenn verknüpfen


    (also mach aus = ein &= )

  • Was ist hier falsch? Aus dem Skript in #16:

    AutoIt
    Global $sSelected = "L01"
    ...
            If $aData[$i][1] = $sSelected Then

    ist gleich

    AutoIt
            If $aData[$i][1] = "L01" Then

    In der Zeile mit C14435440 steht in $aData[$i][1] aber UC-L01. Damit gibt es keine Übereinstimmung / keinen Treffer.


    Bei meinem Hinweis auf SA-L01 hatte ich mich in der Zeile vertan. Das hättest Du vielleicht selbst bemerken können. ;)