Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1588to1592
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Suchergebnisse anzeigen

Suchergebnisse anzeigen
10.11.2017 08:58:10
Axel
Hallo,
ich habe hier dieses Listing : da hat mir fcs schon viel mit geholfen.
jetzt habe ich das Problem das ich gerne die (wenn ich nach 2 werten Suche) jeweils der passende Wert hinter der Ausgabe von Tabelle und Zelle steht.
z.b : Gesuchte Werte 123+654
Tabelle | Zelle | Wert gesucht |
Tabelle A | O72 | 123
Tabelle B | N8 | 657
  • 
    Sub Suchen_und_Anzeigen_neu()
    Dim Meldung         As Byte, Pos        As Byte
    Dim Schleife        As Byte, y          As Byte
    Dim Begriff, Suchen()                   As Variant
    Dim Bereich                             As Range
    Dim n%, x%, xZelle%, yZelle%
    Dim xTabelle$(), Adresse$(), xWorkbook$(), Text$
    Dim arrWkb As Variant, varWkb, wkb As Workbook
    Dim wksAnzeige As Worksheet
    ' Suchbegriff eingeben
    Begriff = InputBox _
    ("Bitte den zu suchenden Wert eingeben." & vbCrLf & _
    "ENTER ohne Wert = Abbruch", "S U C H M O D U S")
    If Begriff = "" Then Exit Sub
    Pos = InStr(Begriff, "+")
    If Pos Then
    ReDim Suchen(2)
    Suchen(1) = Left(Begriff, Pos - 1)
    Suchen(2) = Right(Begriff, Len(Begriff) - Pos)
    Schleife = 2
    Else
    ReDim Suchen(1)
    Suchen(1) = Begriff
    Schleife = 1
    End If
    x = 1 'Zähler für gefundene Zellen
    DateiAuswahl:
    'zu durchsuchende Datei(en) auswählen
    arrWkb = Application.GetOpenFilename( _
    Filefilter:="Excel (*.xls;*.xlsx;*.xlsm),*.xls;*.xlsx;*.xlsm", _
    Title:="Bitte zu durchsuchende Datei(en) auswählen", _
    MultiSelect:=True)
    If Not IsArray(arrWkb) Then Exit Sub
    Application.ScreenUpdating = False
    ' Eigentlicher Suchvorgang (in allen Tabellenblättern)
    For Each varWkb In arrWkb
    Set wkb = Workbooks.Open(Filename:=varWkb, ReadOnly:=True)
    For y = 1 To Schleife
    For n = 1 To wkb.Sheets.Count
    ' Letzte Zelle des Bereiches ermitteln. Diese Zelle wird als Startzelle für
    ' die Suche deffiniert, da Suche nach dieser Zelle, also in erster Zelle
    ' des Bereiches beginnt.
    'Bereich festlegen
    Set Bereich = wkb.Worksheets(n).UsedRange
    With wkb.Worksheets(n).Range(Bereich.Address)
    xZelle = .Columns(.Columns.Count).Column
    yZelle = .Rows(.Rows.Count).Row
    End With
    With wkb.Sheets(n).Range(Bereich.Address)
    Set c = .Find(Suchen(y), After:=Cells(yZelle, xZelle), LookIn:=xlValues)
    If Not c Is Nothing Then
    ErsteAdresse = c.Address
    Do
    ReDim Preserve Adresse(x): ReDim Preserve xTabelle(x)
    ReDim Preserve xWorkbook(x)
    xWorkbook(x) = wkb.Name
    xTabelle(x) = wkb.Sheets(n).Name
    Adresse(x) = c.Address(RowAbsolute:=False, ColumnAbsolute:=False)
    Set c = .FindNext(c)
    x = x + 1
    Loop While Not c Is Nothing And c.Address  ErsteAdresse
    End If
    End With
    Next n
    Next y
    wkb.Close savechanges:=False
    Next varWkb
    Application.ScreenUpdating = True
    If MsgBox("Weitere Dateien nach dem Suchbegriff """ & Begriff _
    & """ durchsuchen?", vbYesNo + vbQuestion, "S U C H M O D U S") = vbYes Then _
    GoTo DateiAuswahl
    ' Die Anzahl der gefundenen Werte ist (x - 1), wenn keiner
    ' gefunden wurde dann ist x = 1
    Select Case x
    Case 1
    Meldung = MsgBox("Es wurde kein übereinstimmender Wert gefunden", _
    vbOKOnly, "G E F U N D E N E   W E R T E")
    Exit Sub
    Case Else
    Meldung = MsgBox("Es wurden " & (x - 1) & " Übereinstimmungen gefunden.", _
    vbOKOnly, "G E F U N D E N E   W E R T E")
    Application.ScreenUpdating = False
    'Tabelle einfügen
    Set wkb = Application.Workbooks.Add(Template:=xlWBATWorksheet)
    Set wksAnzeige = wkb.Worksheets(1)
    On Error Resume Next
    With wksAnzeige
    .Name = "Auswertung"
    .Cells(1, 1) = "Suchbegriff"
    .Cells(1, 2) = Begriff
    .Cells(2, 1) = "Workbook"
    .Cells(2, 2) = "Tabelle"
    .Cells(2, 3) = "Zelle"
    .Cells(3, 1).Select
    ActiveWindow.FreezePanes = True
    For n = 1 To x - 1
    .Cells(n + 2, 1) = xWorkbook(n)
    .Cells(n + 2, 2) = xTabelle(n)
    .Cells(n + 2, 3) = Adresse(n)
    Next n
    .Columns.AutoFit
    End With
    Application.ScreenUpdating = True
    End Select
    End Sub
    

  • hoffe mir kann jemand helfen, so einfach wie ich dachte ist es leider nicht.
    gruß
    Axel

    3
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Suchergebnisse anzeigen
    13.11.2017 08:52:50
    fcs
    Hallo Axel,
    "einfach" ein weiteres Array definieren analog zu den anderen und in dieses dann in der Suchschleife immer den gesuchten Wert eintragen.
    Gruß
    Franz
    Sub Suchen_und_Anzeigen_neu()
    Dim Meldung         As Byte, Pos        As Byte
    Dim Schleife        As Byte, y          As Byte
    Dim Begriff, Suchen()                   As Variant
    Dim Bereich                             As Range
    Dim n%, x%, xZelle%, yZelle%
    Dim xTabelle$(), Adresse$(), xWorkbook$(), Text$
    Dim sGefunden() As String
    Dim arrWkb As Variant, varWkb, wkb As Workbook
    Dim wksAnzeige As Worksheet
    ' Suchbegriff eingeben
    Begriff = InputBox _
    ("Bitte den zu suchenden Wert eingeben." & vbCrLf & _
    "ENTER ohne Wert = Abbruch", "S U C H M O D U S")
    If Begriff = "" Then Exit Sub
    Pos = InStr(Begriff, "+")
    If Pos Then
    ReDim Suchen(2)
    Suchen(1) = Left(Begriff, Pos - 1)
    Suchen(2) = Right(Begriff, Len(Begriff) - Pos)
    Schleife = 2
    Else
    ReDim Suchen(1)
    Suchen(1) = Begriff
    Schleife = 1
    End If
    x = 1 'Zähler für gefundene Zellen
    DateiAuswahl:
    'zu durchsuchende Datei(en) auswählen
    arrWkb = Application.GetOpenFilename( _
    Filefilter:="Excel (*.xls;*.xlsx;*.xlsm),*.xls;*.xlsx;*.xlsm", _
    Title:="Bitte zu durchsuchende Datei(en) auswählen", _
    MultiSelect:=True)
    If Not IsArray(arrWkb) Then Exit Sub
    Application.ScreenUpdating = False
    ' Eigentlicher Suchvorgang (in allen Tabellenblättern)
    For Each varWkb In arrWkb
    Set wkb = Workbooks.Open(Filename:=varWkb, ReadOnly:=True)
    For y = 1 To Schleife
    For n = 1 To wkb.Sheets.Count
    ' Letzte Zelle des Bereiches ermitteln. Diese Zelle wird als Startzelle für
    ' die Suche deffiniert, da Suche nach dieser Zelle, also in erster Zelle
    ' des Bereiches beginnt.
    'Bereich festlegen
    Set Bereich = wkb.Worksheets(n).UsedRange
    With wkb.Worksheets(n).Range(Bereich.Address)
    xZelle = .Columns(.Columns.Count).Column
    yZelle = .Rows(.Rows.Count).Row
    End With
    With wkb.Sheets(n).Range(Bereich.Address)
    Set c = .Find(Suchen(y), After:=Cells(yZelle, xZelle), LookIn:=xlValues)
    If Not c Is Nothing Then
    ErsteAdresse = c.Address
    Do
    ReDim Preserve Adresse(x): ReDim Preserve xTabelle(x)
    ReDim Preserve xWorkbook(x)
    ReDim Preserve sGefunden(x)
    xWorkbook(x) = wkb.Name
    xTabelle(x) = wkb.Sheets(n).Name
    Adresse(x) = c.Address(RowAbsolute:=False, ColumnAbsolute:=False)
    sGefunden(x) = Suchen(y)
    Set c = .FindNext(c)
    x = x + 1
    Loop While Not c Is Nothing And c.Address  ErsteAdresse
    End If
    End With
    Next n
    Next y
    wkb.Close savechanges:=False
    Next varWkb
    Application.ScreenUpdating = True
    If MsgBox("Weitere Dateien nach dem Suchbegriff """ & Begriff _
    & """ durchsuchen?", vbYesNo + vbQuestion, "S U C H M O D U S") = vbYes Then _
    GoTo DateiAuswahl
    ' Die Anzahl der gefundenen Werte ist (x - 1), wenn keiner
    ' gefunden wurde dann ist x = 1
    Select Case x
    Case 1
    Meldung = MsgBox("Es wurde kein übereinstimmender Wert gefunden", _
    vbOKOnly, "G E F U N D E N E   W E R T E")
    Exit Sub
    Case Else
    Meldung = MsgBox("Es wurden " & (x - 1) & " Übereinstimmungen gefunden.", _
    vbOKOnly, "G E F U N D E N E   W E R T E")
    Application.ScreenUpdating = False
    'Tabelle einfügen
    Set wkb = Application.Workbooks.Add(Template:=xlWBATWorksheet)
    Set wksAnzeige = wkb.Worksheets(1)
    On Error Resume Next
    With wksAnzeige
    .Name = "Auswertung"
    .Cells(1, 1) = "Suchbegriff"
    .Cells(1, 2) = Begriff
    .Cells(2, 1) = "Workbook"
    .Cells(2, 2) = "Tabelle"
    .Cells(2, 3) = "Zelle"
    If Schleife > 1 Then .Cells(2, 4) = "Suchwert"
    .Cells(3, 1).Select
    ActiveWindow.FreezePanes = True
    For n = 1 To x - 1
    .Cells(n + 2, 1) = xWorkbook(n)
    .Cells(n + 2, 2) = xTabelle(n)
    .Cells(n + 2, 3) = Adresse(n)
    If Schleife > 1 Then .Cells(n + 2, 4) = sGefunden(n)
    Next n
    .Columns.AutoFit
    End With
    Application.ScreenUpdating = True
    End Select
    End Sub
    

    Anzeige
    AW: Suchergebnisse anzeigen
    13.11.2017 12:51:48
    Stephan
    Hallo Franz (FCS), ist zwar ein anderer Beitrag, aber du hattest eine geniale Listbox erstellt. Leider ist es mir nicht gelungen die Box auf eine andere Spalte als A1 (wie von dir im Beispiel dargestellt) zu legen. Gibt es da einen Trick ? Danke Gruß Stephan P.S. bin ein neues Mitglied und starte mit dem Erlernen von solchen tollen Funktionen in Excel !
    Bezieht auf den Artikel https://www.herber.de/forum/archiv/1464to1468/1464010_Excel_2016_Dropdown_mit_Mehrfachauswahl.html#1464010 bzw den Link https://www.herber.de/bbs/user/102241.xlsm
    Anzeige
    Listbox-Mehrfachauswahl in eine Zelle schreiben
    14.11.2017 02:12:14
    fcs
    Hallo Stephan,
    die auszufüllende Zelle wird im Code der Ereignismakros für das Tabellenblatt festgelegt.
    Hier die Makros angepasst auf Zelle C1 (Spalte/olumn = 3, Zeile/Row = 1).
    https://www.herber.de/bbs/user/117660.xlsm
    Ich hab die auszufüllende Zelle jetzt allgemein festgelegt, so dass sie jetzt über den Zellbereich definiert wird, der für die Anzeige der Listbox festgelegt ist.
    Ich hab noch eine Zeile eingefügt, um die Listbox auch in der Spalte zu positionieren.
    Gruß
    Franz
    angepasster Code für das Tabellenblatt-Codemodul.
    Option Explicit
    Private Const strSep = " " 'Trennzeichen zwischen Namen, wenn Namen Leerzeichen enthalten, _
    dann anderes Zeichen wählen - z.B. ;
    Private Sub ListBox1_Change()
    Dim strText, intK!, intL!
    With Me.ListBox1
    Application.EnableEvents = False
    For intL = 0 To .ListCount - 1
    If .Selected(intL) = True Then
    If strText = "" Then
    strText = .List(intL, 0)
    Else
    strText = strText & strSep & .List(intL, 0)
    End If
    End If
    Next
    'Zelle in die ausgewählte Werte eingetragen werde sollen
    ActiveCell.Value = strText 'Zelle nicht fix sondern abhängig von dem in _
    Makro "Worksheet_SelectionChange" definierten Zellbereich für die Listbox-Anzeige
    Application.EnableEvents = True
    End With
    End Sub
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim varSplit, intK!, intL!, strText As String
    'Prüfen ob eine auszufüllende Zelle selektiert wurde - hier ggf. die Prüfbedingen _
    bzw.den Wert für Row/Column anpassen - aktuell Zelle C1
    If Target.Row = 1 And Target.Column = 3 And Target.Cells.Count = 1 Then
    strText = Target.Text
    With Me.ListBox1
    Application.EnableEvents = False
    For intL = 0 To .ListCount - 1
    .Selected(intL) = False
    Next
    If strText  "" Then
    varSplit = Split(strText, strSep)
    For intK = LBound(varSplit) To UBound(varSplit)
    For intL = 0 To .ListCount - 1
    If .List(intL, 0) = varSplit(intK) Then
    .Selected(intL) = True
    Exit For
    End If
    Next
    Next intK
    End If
    .Left = Target.Left             'neue Zeile für Position der Listbox
    .Top = Target.Offset(1, 0).Top
    .Visible = True
    Application.EnableEvents = True
    End With
    Else
    Me.ListBox1.Visible = False
    End If
    End Sub
    

    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige