Excel Sheet nach mehreren Kriterien durchsuchen (Combobox)

  • Excel

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

    Ich habe das ganze jetzt etwas weiter ausgebaut und bin an das nächste Problem mit prinzipiell der selben Themaik gestoßen,
    nur ein etwas anderer Aufbau.

    Ich habe eine Excel Tabelle wo immernoch die gleichen Kriterien drin stehen, welche in zusammengefügt habe in einer
    Spalte. Diese sieht dann prinzipiel so aus "Holzart_Produktart_Oberflaeche".
    Nun habe ich ein Userform mit circa 50 Textboxen welche jeweils den Bestand des Artikels abhängig der Kriterien ausgeben soll.
    Jetzt möchte ich natürlich gerne die Suchfunktion einbauen und alle Textboxen entsprechend füllen lassen.
    Ich habe mir überlegt man könnte jede Textbox entsprechend bennen was da reinsoll also auch "Holzart_Produktart_Oberflaeche".
    Hier würde man ja keine Wiederholung haben und es wäre eindeutig.
    Jetzt müsste ein Funktion alle textboxen durchgehen und anhand der Bezeichnung in der Spalte suchen und die zugehörige Zeile ausgeben. Ist sowas möglich das die Suchfunktion jede Textbox durchgeht? Habe schon an verschiedenen Schleifen gedacht, wo man 1. Schleife für Holzart, eine weitere für Produktart und eine für Oberflaeche macht, und immer wenn es eine Textbox mit der Bezeichnung gibt, dann soll er die Zeile finden und diese füllen.
    Gibt es hier eine IDee/Ansatz wie man es vielleicht besser lösen könnte. Also einen Befehl der alle Textboxen durchsucht oder so?
    Vielen dank

    Habe jetzt den Ansatz, welcher auch erstmal funktioniert.

    Suchfunktion

    Visual Basic-Quellcode

    1. Function Lagerplatz(ByVal Lagerplatzbezeichnung As String) As Range
    2. Const SheetList = "Lagerbestand" 'zu durchsuchende Sheets
    3. Dim ws As Worksheet, Sheetname As Variant, SearchRange As Range, SearchString As String
    4. SearchString = Lagerplatzbezeichnung
    5. For Each Sheetname In Split(SheetList, ",")
    6. Set ws = Worksheets(Sheetname)
    7. Set SearchRange = Intersect(ws.UsedRange, ws.Range("L:L")) 'Suchspalte
    8. Set Lagerplatz = SearchRange.Find(SearchString, LookIn:=xlValues, LookAt:=xlWhole) 'Rückgabewert setzen
    9. If Not Lagerplatz Is Nothing Then Exit Function 'gefunden -> Suche abbrechen
    10. Next
    11. End Function


    Durchläuft alle textboxen und füllt diese

    Visual Basic-Quellcode

    1. Private Sub CommandButton2_Click()
    2. Dim objtxt As Object
    3. Dim Lagerplatzbezeichnung As String
    4. Dim Lagerplatz1 As Range
    5. Dim LagerplatzID As Integer
    6. Dim Lagermenge As Long
    7. For Each objtxt In frmLagerbestand.Controls
    8. If TypeName(objtxt) = "TextBox" Then
    9. Lagerplatzbezeichnung = objtxt.Name
    10. Set Lagerplatz1 = Lagerplatz(Lagerplatzbezeichnung)
    11. If Not Lagerplatz1 Is Nothing Then
    12. Lagerplatz1_Reihe = Lagerplatz1.Row
    13. LagerplatzID = Lagerplatz1_Reihe
    14. Lagermenge = Sheets("Lagerbestand").Cells(LagerplatzID, 7)
    15. objtxt.Value = Lagermenge
    16. End If
    17. End If
    18. Next
    19. End Sub


    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „TeamBob“ ()

    Hallo,

    das obere Problem hat sich bereits gelöst, jedoch würde ich die Funktion "Search" etwas weiterbauen,
    sodass es nur nach einer Übereinstimmung der ersten 3 Zeichen schaut.

    Der wert der Suchzelle ist "Max123" und er soll einen Bereich durchsuchen nach "Max" und nicht nach einer
    genauen Übereinstimmung von "Max123". Wie kann man hier vorgehen? VIelen dank
    Hier der bisherige Suchfunktion:

    Visual Basic-Quellcode

    1. Function SearchSchrankNr(ByVal SchrankNr As String) As Range
    2. Const SheetList = "Verteilerliste" 'zu durchsuchende Sheets
    3. Dim ws As Worksheet, Sheetname As Variant, SearchRange As Range, SearchString As String
    4. SearchString = SchrankNr
    5. For Each Sheetname In Split(SheetList, ",")
    6. Set ws = Worksheets(Sheetname)
    7. Set SearchRange = Intersect(ws.UsedRange, ws.Range("A:A")) 'Suchspalte
    8. Set SearchSchrankNr = SearchRange.Find(SearchString, LookIn:=xlValues, lookat:=xlWhole) 'Rückgabewert setzen
    9. If Not SearchSchrankNr Is Nothing Then Exit Function 'gefunden -> Suche abbrechen
    10. Next
    11. End Function
    Ja das ist das Problem.

    Das Suchfeld bestimmt immer aus 3 Ziffern Bsp: S01
    Im Suchbereich kann die Ziffer entweder so lauten "S01" oder auch "S01.1234"
    Problem ist, wenn ich sagen nehm die ersten 3 Ziffern, dass ich dann Probleme bekommen wenn auf einmal "S017" dasteht