1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. creativewonders

Beiträge von creativewonders

  • Excel Suche nach 2 Werten

    • creativewonders
    • 25. Januar 2023 um 07:37
    Zitat von water
    Code
    $zeile = _Excel_ColumnToLetter($i + 1); Wenn Suchargument 1 gefunden

    muss

    Code
    $zeile = $i + 1; Wenn Suchargument 1 gefunden

    denn das Ergebnis soll ja die Zeilennummer sein und die sind numerisch.

    das war ja einfach :) vielen vielen Dank Water :klatschen:

  • Excel Suche nach 2 Werten

    • creativewonders
    • 24. Januar 2023 um 17:11
    Zitat von water

    Woher soll das "Y" kommen?
    Kannst Du bitte Dein Skript posten?

    Hallo water, hier mein Script ...


    Spoiler anzeigen

    #include <Array.au3>

    #include <Excel.au3>

    #include <MsgBoxConstants.au3>

    Local $oExcel = _Excel_Open(True)

    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeFind Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)

    Local $oWorkbook = _Excel_BookOpen($oExcel, "C:\Users\hfrommon\Documents\search.xlsm")

    Global $sConcern = "C14416821"

    Global $sSelected = "UC-F01/2"

    Global $sRow = ""

    Global $aData = _Excel_RangeRead($oWorkbook) ; Komplettes Worksheet einlesen, inkl Headerlines

    ;_ArrayDisplay($aData)


    For $i = 0 To UBound($aData) - 1 ; Kompletten Array durchlaufen und Suchargument 1 suchen

    If $aData[$i][0] = $sConcern Then


    If $aData[$i][1] = $sSelected Then ; Suchargument 2 vergleichen. Wenn gefunden

    For $j = 2 To UBound($aData, 2) - 1 ; alle Spalten rechts davon verarbeiten

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

    Next

    ConsoleWrite($sRow & @CRLF) ; und auf Konsole ausgeben

    $sRow = ""


    $zeile = _Excel_ColumnToLetter($i + 1); Wenn Suchargument 1 gefunden

    ConsoleWrite($zeile & @CRLF)

    EndIf

    EndIf

    Next

    ;_Excel_BookClose ( $oWorkbook , True )

    ;_Excel_Close($oExcel, Default, True)


  • Excel Suche nach 2 Werten

    • creativewonders
    • 24. Januar 2023 um 11:09

    egal wo ich es platziere im Script, als Ergebnis gibt er mir Y raus :( ich kapier es nicht

    Zitat von water

    In meinem Codeteil

    Code
    For $i = 0 To ..
        ....
    Next

    wird die komplette eingelesene Tabelle durchsucht. $i ist dabei die Zeile (in Deinem Beispiel 26).

    Da der Index eines Array bei 0 und die Zeilennummer in Excel bei 1 beginnt, musst Du $i + 1 nehmen um die Zeile/Reihe zu ermitteln.

    Wenn Du dann die ConsoleWrite Zeile durch Deinen Code ersetzt kannst Du mit $i + 1 die Zeile in Excel adressieren.

  • Excel Suche nach 2 Werten

    • creativewonders
    • 24. Januar 2023 um 10:44
    Zitat von water

    $i + 1 ist die Zeile und $j + 1 ist die Spalte. Mit der Funktion _Excel_ColumnToLetter kannst Du die Spaltennummer in den entsprechenden Buchstaben umwandeln.

    ... irgendwie kriege ich es nicht hin :( ich bekomme den Wert Y raus

    ich möchte doch nur wie in meinem Beispiel bei den gefundenen Werten "Reihe" 26 herausbekommen, damit ich dann damit weiterarbeiten kann ...


    Spoiler anzeigen

    $zeile = _Excel_ColumnToLetter($i + 1)

    ConsoleWrite($zeile & @CRLF)

  • Excel Suche nach 2 Werten

    • creativewonders
    • 23. Januar 2023 um 14:00
    Zitat von water

    Excel durch einen Array ersetzt, Excel-spezifische Zeilen auskommentiert. Skript getestet und läuft:

    AutoIt
    #include <Array.au3>
    ;~ #include <Excel.au3>
    #include <MsgBoxConstants.au3>
    
    ;~ Local $oExcel = _Excel_Open(True)
    ;~ If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeFind Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    ;~ Local $oWorkbook = _Excel_BookOpen($oExcel, "C:\Users\hfrommon\Documents\search.xlsm")
    
    Global $sConcern = "C14435440"
    Global $sSelected = "UC-L01"
    Global $sRow = ""
    Global $aData[][] = [["C14483040", "UC-L03", 1, 2, 3], ["C14435440", "UC-L01", 11, 12, 13, 14]]
    ;~ Global $aData = _Excel_RangeRead($oWorkbook)                                     ; Komplettes Worksheet einlesen, inkl Headerlines
    
    _ArrayDisplay($aData)
    
    For $i = 0 To UBound($aData) - 1                                                    ; Kompletten Array durchlaufen und Suchargument 1 suchen
        If $aData[$i][0] = $sConcern Then                                               ; Wenn Suchargument 1 gefunden
            If $aData[$i][1] = $sSelected Then                                          ; Suchargument 2 vergleichen. Wenn gefunden
                For $j = 2 To UBound($aData, 2) - 1                                     ; alle Spalten rechts davon verarbeiten
                    $sRow = $sRow & $aData[$i][$j] & "|"                                ; mit | als TrennzeichenWenn verknüpfen
                Next
                ConsoleWrite($aData[$i][0] & "|" & $aData[$i][1] & "|" & $sRow & @CRLF) ; Concern, Model-Nr und alle anderen Spalten und auf Konsole ausgeben
                $sRow = ""
            EndIf
        EndIf
    Next
    Alles anzeigen

    BTW: Die Art der Verknüpfung von Strings ist nicht relevant.

    Hallo Leute :)

    vielen Dank nochmal, das hat dann alles funktioniert in meinem Hauptscript, aber .... :)

    jetzt möchte ich die Zell Adresse der beiden überprüften werte haben, um damit weiter zu arbeiten - wer kann mir hier weiterhelfen ??

    Hier in meinem Beispiel das gefundene Ergebnis in Reihe 26 ( B26 und C26 )

    Vorab vielen Dank :)

    AutoIt
    #include <Array.au3>
    #include <Excel.au3>
    #include <MsgBoxConstants.au3>
    
    Local $oExcel = _Excel_Open(True)
    
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeFind Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    
    Local $oWorkbook = _Excel_BookOpen($oExcel, "C:\Users\hfrommon\Documents\search.xlsm")
    
    Global $sConcern = "C14416821"
    
    Global $sSelected = "UC-F01/2"
    
    Global $sRow = ""
    
    Global $aData = _Excel_RangeRead($oWorkbook) ; Komplettes Worksheet einlesen, inkl Headerlines
    
    ;_ArrayDisplay($aData)
    
    For $i = 0 To UBound($aData) - 1 ; Kompletten Array durchlaufen und Suchargument 1 suchen
    
    If $aData[$i][0] = $sConcern Then ; Wenn Suchargument 1 gefunden
    
    If $aData[$i][1] = $sSelected Then ; Suchargument 2 vergleichen. Wenn gefunden
    
    For $j = 2 To UBound($aData, 2) - 1 ; alle Spalten rechts davon verarbeiten
    
    $sRow &= $aData[$i][$j] & "|" ; mit | als TrennzeichenWenn verknüpfen
    
    Next
    
    ConsoleWrite($sRow & @CRLF) ; und auf Konsole ausgeben
    
    $sRow = ""
    
    EndIf
    
    EndIf
    
    Next
    
    ;_Excel_BookClose ( $oWorkbook , True )
    
    ;_Excel_Close($oExcel, Default, True)
    Alles anzeigen
  • Excel Suche nach 2 Werten

    • creativewonders
    • 16. Januar 2023 um 14:50

    Okay, danke, versuche es jetzt mal umzusetzen und in mein "eigentliches" Script einzubauen - erst mal vielen vielen Dank an Alle - TOP !!

    Ich lasse den Beitrag noch offen - für alle Fälle :) :)

  • Excel Suche nach 2 Werten

    • creativewonders
    • 16. Januar 2023 um 10:42
    Zitat von BananaJoe

    ä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 &= )

    es wird nichts in die Konsole geschrieben :(

  • Excel Suche nach 2 Werten

    • creativewonders
    • 16. Januar 2023 um 09:45

    Wo liegt der Fehler ??

    AutoIt
    #include <Array.au3>
    #include <Excel.au3>
    #include <MsgBoxConstants.au3>
    
    Local $oExcel = _Excel_Open(True)
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeFind Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    Local $oWorkbook = _Excel_BookOpen($oExcel, "C:\Users\hfrommon\Documents\search.xlsm")
    
    Global $sConcern = "C14435440"
    Global $sSelected = "L01"
    Global $sRow = ""
    Global $aData = _Excel_RangeRead($oWorkbook)            ; Komplettes Worksheet einlesen, inkl Headerlines
    
    _ArrayDisplay($aData)
    
    
    For $i = 0 To UBound($aData) - 1                        ; Kompletten Array durchlaufen und Suchargument 1 suchen
        If $aData[$i][0] = $sConcern Then                   ; Wenn Suchargument 1 gefunden
            If $aData[$i][1] = $sSelected Then              ; Suchargument 2 vergleichen. Wenn gefunden
                For $j = 2 To UBound($aData, 2) - 1         ; alle Spalten rechts davon verarbeiten
                    $sRow = $sRow & $aData[$i][$j] & "|"    ; mit | als TrennzeichenWenn verknüpfen
                Next
    
                ConsoleWrite($sRow & @CRLF)                 ; und auf Konsole ausgeben
                $sRow = ""
    
            EndIf
    
        EndIf
    Next
    Alles anzeigen
  • Excel Suche nach 2 Werten

    • creativewonders
    • 16. Januar 2023 um 09:41
    Zitat von Velted

    Moin,

    vielleicht liegt es daran, dass in der zweiten Spalte in Deinem Auszug in Beitrag #1 nicht L01 sondern SA-L01 steht?

    ändert leider nichts - egal ob L01 oder SA-L01 ..... Verzweiflung naht :)

  • Excel Suche nach 2 Werten

    • creativewonders
    • 16. Januar 2023 um 08:13
    Zitat von water

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

    Korrigierte Version:

    AutoIt
    Global $sConcern = "C14435440"
    Global $sSelected = "L01"
    Global $sRow = ""
    Global $aData = _Excel_RangeRead($oWorkbook)            ; Komplettes Worksheet einlesen, inkl Headerlines
    For $i = 0 To UBound($aData) - 1                        ; Kompletten Array durchlaufen und Suchargument 1 suchen
        If $aData[$i][0] = $sConcern Then                   ; Wenn Suchargument 1 gefunden 
            If $aData[$i][1] = $sSelected Then              ; Suchargument 2 vergleichen. Wenn gefunden 
                For $j = 2 To UBound($aData, 2) - 1         ; alle Spalten rechts davon verarbeiten
                    $sRow = $sRow & $aData[$i][$j] & "|"    ; mit | als TrennzeichenWenn verknüpfen 
                Next
                ConsoleWrite($sRow & @CRLF)                 ; und auf Konsole ausgeben
                $sRow = ""
            EndIf    
        EndIf 
    Next
    Alles anzeigen


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

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

  • Excel Suche nach 2 Werten

    • creativewonders
    • 13. Januar 2023 um 14:04
    Zitat von water

    Mein Fehler - war wohl Kaffeemangel ;)

    AutoIt
    Global $sConcern = "C14435440"
    Global $sSelected = "L01"
    Global $sRow = ""
    Global $aData = _Excel_RangeRead($oWorkbook)            ; Komplettes Worksheet einlesen, inkl Headerlines
    For $i = 0 To UBound($aData) - 1                        ; Kompletten Array durchlaufen und Suchargument 1 suchen
        If $aData[$i][0] = $sConcern Then                   ; Wenn Suchargument 1 gefunden 
            If $aData[$i][1] = $sSelected Then              ; Suchargument 2 vergleichen. Wenn gefunden 
                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 = ""
                Next
            EndIf    
        EndIf 
    Next
    Alles anzeigen

    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 :)

  • Excel Suche nach 2 Werten

    • creativewonders
    • 13. Januar 2023 um 10:54
    Zitat von water

    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):

    AutoIt
    Global $sConcern = "C14435440"
    Global $sSelected = "L01"
    Global $aData = _Excel_RangeRead($oWorkbook)            ; Komplettes Worksheet einlesen, inkl Headerlines
    For $i = 0 To UBound($aData) - 1                        ; Kompletten Array durchlaufen und Suchargument 1 suchen
        If $aData[$i, 0] = $sConcern Then                   ; Wenn Suchargument 1 gefunden 
            If $aData[$i, 1] = $sSelected Then              ; Suchargument 2 vergleichen. Wenn gefunden 
                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 = ""
                Next
            EndIf    
        EndIf 
    Next
    Alles anzeigen

    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 ??? :(

    pasted-from-clipboard.png

    AutoIt
    #include <Array.au3>
    #include <Excel.au3>
    #include <MsgBoxConstants.au3>
    
    Local $oExcel = _Excel_Open(True)
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeFind Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    Local $oWorkbook = _Excel_BookOpen($oExcel, @DocumentsCommonDir & "\search.xlsm")
    
    Global $sConcern = "C14435440"
    Global $sSelected = "L01"
    
    Global $aData = _Excel_RangeRead($oWorkbook)            ; Komplettes Worksheet einlesen, inkl Headerlines
    
    _ArrayDisplay($aData)
    
    For $i = 0 To UBound($aData) - 1                        ; Kompletten Array durchlaufen und Suchargument 1 suchen
        If $aData[$i, 0] = $sConcern Then                   ; Wenn Suchargument 1 gefunden
            If $aData[$i, 1] = $sSelected Then              ; Suchargument 2 vergleichen. Wenn gefunden
                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 = ""
                Next
            EndIf
        EndIf
    Next
    Alles anzeigen
  • Excel Suche nach 2 Werten

    • creativewonders
    • 12. Januar 2023 um 14:11
    Zitat von Peter S. Taler

    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

    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 ) :)

  • Excel Suche nach 2 Werten

    • creativewonders
    • 12. Januar 2023 um 09:15

    search.zip

    Zitat von SOLVE-SMART

    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 :)

    AutoIt
    Func _show_Concern_values_multiple()             ; set select ModelNo to fields in Concern
    
        $LH = GUICtrlGetHandle($idListview)
    
        $x = _GUICtrlListView_GetItemTextString($LH, _GUICtrlListView_GetSelectedIndices($LH))
    
        Global $sFilePath = $temp & "\SBU-TRACKING" & "\" & $iIndex & "_SBU_Tracking-List.xlsm"
    
        Global $sSearch_Concern = GUICtrlRead($concern_select)        ; ausgewählter Concern
        Global $sSearch = $x                                          ; ausgewählte Model No
    
        Global $oExcel = _Excel_Open(false, Default, Default, Default, True)
        Global $oWorkbook = _Excel_BookOpen($oExcel, $sFilePath)
    
        Local $sSheet = "Concern"
    
        $oWorkbook.Sheets($sSheet).Activate
    
        Local $iNum
    
        Global $aData = _Excel_RangeRead($oWorkbook, $sSheet, "B5:AE50")
    
        ;_ArrayDisplay($aData)
    
           Global $strSearch = $sSearch
           Global $intIndex = -1
    
        $intIndex = _ArraySearch($aData, $strSearch)
    
        Global $aResultC2 = _Excel_RangeFind($oWorkBook, $x, $oWorkBook.Sheets($sSheet).Range("B:B"))
    
        Global $FindvalueC2 = UBound($aResultC2)
    
        if $FindvalueC2 <=1 Then
    
                Global $newEntry = $intIndex   ; Ergebnis in welcher Reihe die gefundene Model Nummer steht
    
        _Excel_BookClose ( $oWorkbook , True )
        _Excel_Close($oExcel, Default, True)
    
    ;... weiterer Code guictrlsetdata( )  etc.
    ...
    ...
    ...
    
    EndFunc
    Alles anzeigen
  • Excel Suche nach 2 Werten

    • creativewonders
    • 12. Januar 2023 um 08:11

    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ß

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™