Anzeige
Archiv - Navigation
1528to1532
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
VBA .find Exakte suche Zelleninhalt durchsuchen
19.12.2016 18:23:39
Johannes
Hallo Zusammen,
ich habe folgendes Problem ich möchte in VBA mit einem .find Befehl ein bestimmtes Suchwort(Variable) in einer Tabelle finden.
Nun bin ich soweit gekommen das ich entweder das Exakte Wort finde oder das er mir den kompletten Zelleninhalt durchsucht.
Folgenden Code verwende ich momentan:

'Suchen
Sheets("Matrix IP").Select
With ActiveSheet.Range("A1:I1048576") 'Range
Set C = .Find(What:=Suchzelle, LookIn:=xlValues, LookAt:=xlPart)
End With

Folgende Variationen der LookAt: Funktion gibt es meines Wissens:
  • LookAt:=xlPart - durchsucht inhaltlich die jede einzelne Zelle

  • LookAt:=xlWhole - durchsucht alle Zellen bis der Wert der Zelle dem Suchwert entspricht

  • Nun benötige ich aber eine Kombination aus beidem.
    Oder gibt es hierfür bereits eine Funktion und ich habe diese bei meinen Suchen nicht gefunden?
    Vielen Dank im Voraus!
    Gruß
    Johannes

    16
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: VBA .find Exakte suche Zelleninhalt durchsuchen
    19.12.2016 18:27:53
    Hajo_Zi
    Hallo Johannes,
    Deine Interpretation ist falsch.
    Der LookAt:=xlPart sucht Teil der Zelle, LookAt:=xlWhole Kompletter Zellinhalt.

    AW: VBA .find Exakte suche Zelleninhalt durchsuchen
    19.12.2016 18:35:12
    Johannes
    Hallo Hajo,
    vielen Dank für die schnelle Info.
    Suchbegriff: 10.10.10.11
    Momentan suche ich mit LookAt:=xlPart er gibt mir als Ergebnis momentan die 10.10.10.111 aus.
    Wie kann ich Ihm klar machen das er mir nur Exakt diese Reihenfolge ausgibt und nicht hinten noch ein beliebiges Zeichen anfügt.
    AW: VBA .find Exakte suche Zelleninhalt durchsuchen
    19.12.2016 18:37:41
    Hajo_Zi
    Du suchst nach Teil, mir ist nicht klar warum nicht kompletten Vergleich.
    Gruß Hajo
    Anzeige
    AW: VBA .find Exakte suche Zelleninhalt durchsuchen
    19.12.2016 18:42:44
    Johannes
    Hallo Hajo
    ich muss leider nach dem teil suchen da der Zeileninhalt z.b. wie folgt aussieht:
    "Testanschaltung 10.10.10.111"
    Deshalb muss ich nach dem part suchen und kann nicht nach der ganzen Zelle suchen.
    Gruß
    Johannes
    AW: VBA .find Exakte suche Zelleninhalt durchsuchen
    19.12.2016 20:36:09
    Anton
    Hi Johannes,
    einen Befehl das das letzte Zeichen nicht hinzugefügt wird, kenne ich leider nicht. Habs mit Replace und Left gelöst. Es soll ja wenn "10.10.10.111" gefunden nur "10.10.10.11" zurückgegeben werden auch wenn "Testanschaltung 10.10.10.111" in der Zelle steht, oder?
    
    Sub Finden2()
    Dim rngTreffer As Range
    Dim rngBereich As Range
    Dim rngAdresse As String
    Dim strSuchbegriff As String
    Dim strAusgabe As String
    strSuchbegriff = "10.10.10.11"
    With Sheets("Matrix IP").Range("A1:I1048576")
    Set rngTreffer = .Find(strSuchbegriff, LookIn:=xlValues, lookat:=xlPart)
    If Not rngTreffer Is Nothing Then
    rngAdresse = rngTreffer.Address
    Do
    strAusgabe = Replace(Left(rngTreffer.Value, Len(rngTreffer.Value) - 1), " _
    Testanschaltung ", "")
    Set rngTreffer = .FindNext(rngTreffer)
    Loop While Not rngTreffer Is Nothing And rngTreffer.Address  rngAdresse
    End If
    End With
    End Sub
    
    VG Anton
    Anzeige
    AW: VBA .find Exakte suche Zelleninhalt durchsuchen
    19.12.2016 20:45:42
    Johannes
    Hallo Anton,
    Vielen danke für deine Antwort.
    Ist auf jeden Fall ein sehr interessanter Lösungsweg!
    Leider hilft er bei meinem Problem nicht weiter, da die "richtige" Zielzelle dadurch nicht gefunden wird.
    Die Zielzelle heißt schon "Testanschaltung 10.10.10.11" aber sie kommt nach der anderen Zelle "Testanschaltung 10.10.10.111" weshalb die "falsche" Zelle angegeben wird...
    Danke dir für deinen Vorschlag :)
    VG Johannes
    AW: VBA .find Exakte suche Zelleninhalt durchsuchen
    19.12.2016 20:45:00
    Luschi
    Hallo Johannes,
    die Find-Funktion liefert doch eine Rangeobjekt (bei mir rg) zurück, falls die
    Teilwert-Suche erfolgreich war.
    
    Dim rg As Range, s As String
    s = "10.10.10.111"
    Set rg = Worksheets("meineSuchTab").Range("B4:B133").Find(s, , xlValues, xlPart, xlByRows,  _
    xlNext, False, False, False)
    If Not (rg Is Nothing) Then
    If Right(rg.Value, Len(s)) = s Then
    'gefundener Teilwert entspricht dem Suchwert
    Debug.Print Right(rg.Value, Len(s))
    End If
    Else
    End If
    
    Gruß von Luschi
    aus klein-Paris
    Anzeige
    AW: VBA .find Exakte suche Zelleninhalt durchsuchen
    19.12.2016 20:53:05
    Johannes
    Hallo Luschi,
    vielen Dank für deine Unterstützung.
    Genau ein Rangeobjekt wird zurückgeliefert allerdings das Rangeobjekt der falschen Zelle und somit kommt ein falscher Bezug Zustande was mir im Endeffekt ein falsches Ergebnis wiederspiegelt.
    Ich Lasse mir durch die Range die Nachbarzellen in der gleichen Zeile in Variablen speichern und gebe diese dann auf einem anderen Tabellenblatt aus.
    Somit ist es wichtig den richtigen Zellenbezug zu haben, da sonst die falschen Querverweise zum falschen Ergebnis führen.
    Gruß
    Johannes
    AW: VBA .find Exakte suche Zelleninhalt durchsuchen
    19.12.2016 21:02:13
    Luschi
    Hallo Johannes,
    den Rest mit dem Weitersuchen (FindNext) hat doch Anton aufgezeigt.
    Wenn Du eine klitzekleine Beispieldatei bereitstellst, bastle ich Dir meinen & Antons Code
    heute zusammen.
    Dabei sollte auch die Frage geklärt sein, ob es weitere Fundstellen mit dieser TCP-IP Adresse gibt.-
    Gruß von Luschi
    aus klein-Paris
    Anzeige
    AW: VBA .find Exakte suche Zelleninhalt durchsuchen
    19.12.2016 21:13:00
    Johannes
    Hallo Luschi,
    das Problem ist das ich das nicht so realisieren kann, da das Ergebnis nur in eine Zeile soll und nicht mehrere Ergebnisse aufzeigen soll.
    Da die Datenbank 1.500.000 Millionen Zeilen umfasst wären das zu viele Ausgaben...
    Gibt es eine Möglichkeit den Suchbegriff um ein Leerzeichen zu erweitern sodass der Suchwert wieder einmalig wird?
    z.b. So?
    'Suchen
    Sheets("Matrix IP").Select
    With ActiveSheet.Range("A1:I1048576") 'Range
    Set C = .Find(What:=Suchzelle&" ", LookIn:=xlValues, LookAt:=xlPart)
    End With
    
    Oder muss ich versuchen die Rohdaten entsprechend anzupassen?
    Vielen Dank!
    Freundliche Grüße
    Johannes
    Anzeige
    AW: VBA .find Exakte suche Zelleninhalt durchsuchen
    19.12.2016 21:21:52
    Luschi
    Hallo Johannes,
    nun mach es Dir doch nicht so schwer; kopiere 20-25 IP-Adressen; die sich möglichst bis auf die letzten 2 Stellen gleichen wie 1 Ei dem anderen in eine total leere Excelmappe und lade sie hier hoch mit einer kurzen Beschreibung was passieren soll, wenn eine gesuchte IP gefunden hat.
    Ein paar Test-/Spielwerte reichen doch, um das Prinzip der Teilwert-Suche zu demonstrieren.
    Gruß von Luschi
    aus klein-Paris
    AW: VBA .find Exakte suche Zelleninhalt durchsuchen
    20.12.2016 00:56:52
    Werner
    Hallo Johannes,
    wenn die Zahlenfolge immer am Ende steht dann versuch mal das:
    Public Sub aaa()
    Dim strSuchbegriff As String
    Dim rngTreffer As Range
    strSuchbegriff = Sheets("Tabelle1").Range("B1")
    With Sheets("Tabelle1").Columns(1)
    Set rngTreffer = .Find("*" & strSuchbegriff, LookIn:=xlValues, lookat:=xlWhole)
    If Not rngTreffer Is Nothing Then
    MsgBox strSuchbegriff & " ist in Zelle " & rngTreffer.Address
    Else
    MsgBox strSuchbegriff & " konnte im Bereich nicht gefunden werden."
    End If
    End With
    End Sub
    
    Nur ein Beispiel zum Testen. Durchsucht wird die Spalte A, den Suchbegriff nach dem gesucht werden soll schreibst du bitte in die Zelle B1
    Gruß Werner
    Anzeige
    AW: VBA .find Exakte suche Zelleninhalt durchsuchen
    20.12.2016 08:28:31
    Luschi
    Hallo Werner,
    wenn der Fragesteller nicht gewillt ist, ein Demobeispiel , das seinen Gegebenheiten relativ nahe kommt, bereitzustellen, dann unternehme ich keine weiterenm Versuche, hier weiterzuhelfen.
    Mal sehen was noch passiert. Ich sehe es nicht ein, auch noch das Beispiel selber zu basteln.
    Gruß von Luschi
    aus klein-Paris
    AW: VBA .find Exakte suche Zelleninhalt durchsuchen
    20.12.2016 08:51:25
    Johannes
    Hallo Luschi, hallo Werner,
    erstmal vielen Dank für die Unterstützung.
    @Luschi anbei eine Probe-Datenbank:
    https://www.herber.de/bbs/user/110116.xlsx
    und hier Mein Code:
    Public IP As String
    Public Prefix As String
    Public Sub MSG_BOX_IP_Prefix()
    ' MSG_BOX_IP_Prefix Makro
    'Prüfen ob Datenbank hinterlegt ist
    Dim strBlattName As String
    strBlattName = "Matrix IP"
    On Error Resume Next
    Worksheets(strBlattName).Activate
    If Err.Number  0 Then
    Err.Clear
    MsgBox "Datenbank nicht gefunden!" & Chr(13) & "Bitte erste einspielen", , "Hinweis"
    Exit Sub
    End If
    ' Netz eintragen
    IP = InputBox("Tragen Sie bitte die Netzadresse ein")
    ' Prefix eintragen
    Prefix = InputBox("Prefix" & Chr(13) & "Trägschd bidde hier den Prefix oin" & Chr(13) & "wenn  _
    denn net woischd dann nimmschd bidde die 28")
    If IP = "" Then
    MsgBox ("Bitte IP und Prefix angeben"), vbInformation
    Exit Sub
    End If
    'Prüfen ob schon nach diesem Netz gesucht wurde
    Dim wsss As Worksheet
    For Each wsss In ActiveWorkbook.Sheets
    If wsss.Name = IP & "_" & Prefix Then
    MsgBox ("Nach diesem Netz wurde bereits gesucht!")
    Sheets(IP & "_" & Prefix).Select
    Exit Sub
    End If
    Next
    Sheets.Add after:=Sheets(Sheets.Count)
    ActiveSheet.Name = IP & "_" & Prefix
    'Überschriften einfügen
    Worksheets(IP & "_" & Prefix).Range("A1") = "IP Adresse"
    Worksheets(IP & "_" & Prefix).Range("B1") = "Prefix"
    Worksheets(IP & "_" & Prefix).Range("C1") = "Network Mask"
    Worksheets(IP & "_" & Prefix).Range("D1") = "Standort_Port"
    Worksheets(IP & "_" & Prefix).Range("E1") = "IF Alias"
    Worksheets(IP & "_" & Prefix).Range("F1") = "ifAdminStatus"
    Worksheets(IP & "_" & Prefix).Range("G1") = "ifOperStatus"
    Worksheets(IP & "_" & Prefix).Range("H1") = "portSpeed"
    Worksheets(IP & "_" & Prefix).Range("I1") = "IP Adresse Spectrum"
    Columns("C:C").Select
    Selection.NumberFormat = "000,000,000,000"
    Range("A1").Select
    'Werte einfügen
    Worksheets(IP & "_" & Prefix).Range("A2") = IP
    'Tabelle an Prefix anpassen
    If Prefix = 29 Then
    Worksheets(IP & "_" & Prefix).Range("B2:B8") = Prefix
    Worksheets(IP & "_" & Prefix).Range("A2").AutoFill Destination:=Range("A2:A8"), Type:= _
    xlFillDefault
    ElseIf Prefix = 27 Then
    Worksheets(IP & "_" & Prefix).Range("B2:B32") = Prefix
    Worksheets(IP & "_" & Prefix).Range("A2").AutoFill Destination:=Range("A2:A32"), Type:= _
    xlFillDefault
    ElseIf Prefix = 30 Then
    Worksheets(IP & "_" & Prefix).Range("B2:B4") = Prefix
    Worksheets(IP & "_" & Prefix).Range("A2").AutoFill Destination:=Range("A2:A4"), Type:= _
    xlFillDefault
    ElseIf Prefix = 26 Then
    Worksheets(IP & "_" & Prefix).Range("B2:B64") = Prefix
    Worksheets(IP & "_" & Prefix).Range("A2").AutoFill Destination:=Range("A2:A64"), Type:= _
    xlFillDefault
    Else
    Worksheets(IP & "_" & Prefix).Range("B2:B16") = Prefix
    Worksheets(IP & "_" & Prefix).Range("A2").AutoFill Destination:=Range("A2:A16"), Type:= _
    xlFillDefault
    End If
    'Sub Netz_Suchen()
    Dim Suchzelle As String
    Dim Z As Integer
    Dim Name As String
    Dim ifAdminStatus As String
    Dim ifOperStatus As String
    Dim IFalias As String
    Dim IPadress As String
    Dim portspeed As String
    Dim NM As String
    Z = 2
    Anfang:
    Suchzelle = Worksheets(IP & "_" & Prefix).Range("A" & Z)
    'Suchen
    Sheets("Matrix IP").Select
    With ActiveSheet.Range("E1:H1048576") 'Range
    Set C = .Find(What:=Suchzelle, LookIn:=xlValues, LookAt:=xlPart)
    End With
    If C.Row = False Then GoTo nexte
    NM = Cells(C.Row, 11)
    Name = Cells(C.Row, 1)
    ifAdminStatus = Cells(C.Row, 2)
    ifOperStatus = Cells(C.Row, 3)
    portspeed = Cells(C.Row, 9)
    IFalias = Cells(C.Row, 6)
    IPadress = Cells(C.Row, 8)
    Worksheets(IP & "_" & Prefix).Range("C" & Z) = NM
    Worksheets(IP & "_" & Prefix).Range("D" & Z) = Name
    Worksheets(IP & "_" & Prefix).Range("E" & Z) = IFalias
    Worksheets(IP & "_" & Prefix).Range("F" & Z) = ifAdminStatus
    Worksheets(IP & "_" & Prefix).Range("G" & Z) = ifOperStatus
    Worksheets(IP & "_" & Prefix).Range("H" & Z) = portspeed
    Worksheets(IP & "_" & Prefix).Range("I" & Z) = IPadress
    'Nächste suchzelle und Präfix Prüfung
    nexte:
    Z = Z + 1
    If Prefix = 29 And Z = 9 Or Prefix = 28 And Z = 17 Or Prefix = 27 And Z = 33 Or Prefix = 30 And  _
    Z = 5 Or Prefix = 26 And Z = 65 Then GoTo ende Else GoTo Anfang
    ende:
    Sheets(IP & "_" & Prefix).Select
    Cells.EntireColumn.AutoFit
    End Sub
    

    @Werner ich hab da schon eine Idee wie ich das Testen kann.
    Gruß Johannes
    Anzeige
    AW: VBA .find Exakte suche Zelleninhalt durchsuchen
    20.12.2016 11:14:36
    Johannes
    Hallo Zusammen,
    habe jetzt eine Lösung gefunden vielen Dank für die Unterstützung!
    Ich lasse nun alle Leerzeichen mit " " " auffüllen sowie das Zellenende und habe somit meinen Eindeutigen Suchwert.
    Danke und Gruß
    Johannes

    122 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige