VBA inStr anweisung optimieren

Hallo @ all,

im VBA würde ich gerne automatisieren, ob eine Zelle des einen worksheet einen String aus einem anderen worksheet enthält. Soweit klappt auch alles, leider gibt er mir zu viel aus. BSP.: zu durchsuchender String = „A15“
durchsuchter String = „A152“
Wert ist somit True… aber ich möchte dass er dann wirklich nur „A15“ = True
Ich würde ja eine If x = y abfrage machen, jedoch enthält der durchsuchte String mehr als nur wie in meinem Beispiel „A152“…
Kann mir bitte jemand weiter helfen???

Grüezi ich möchte Lernen!

Vielleicht hilft es, wenn Du den Suchbegriff mit Leerzeichen umgibst?

BSP.: zu durchsuchender String = " A15 "

jedoch enthält der
durchsuchte String mehr als nur wie in meinem Beispiel
„A152“…

Ansonsten sind mehr Angaben erforderlich über den zu durchsuchenden als auch den zu suchenden Begriff.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo möchte gerne …

wenn du a=b vergleichen willst, tu es!
Wenn du in die Dokumentation reinschauen würdest, könntest du lesen:

Returns a Variant (Long) specifying the position of the first occurrence of one string within another.
**Remarks**
The InStrB function is used with byte data contained in a string. Instead of returning the character position of the first occurrence of one string within another, InStrB returns the byte position.

Hallo Herr Ramel,

ich sollte meine letzte Nachricht korrigieren. Der Tip von Ihnen war Zielführend. Nun funktioniert es! Ich musste lediglich die Durchsuchte Zelle optimieren ( hinter den „Suchstring“ ein Leerzeichen setzen!

Vielen Dank für den super Tip!!!

Liebe Grüße- Peter

Hallo,
ich würde hierfür den Suchbefehel nutzen.
Im VBA wäre das

Cells.Select
Selection.Find(What:=„A15“, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate

Ausschlaggebend ist hier der Parameter LookAt:=xlWhole
Standardmäßig steht hier immmer LookAt:=xlPart

Gruß,
Ptonka

Hallo

If ((x = y) and (lengh(x) = lenght(y))

das müsste passen, schau ob lenght richtig geschrieben ist.

Gruß fred

Hallo,

bei der Fragestellung kann ich leider nicht weiter helfen, dafür bin ich zu wenig Experte.

Gruß Hugo

Hallo „Ich möchte lernen“

für so einer Suche solltest du eine benutzerdefinierte Funktion erstellen, an die du die Paramter für die Suche übergibst.

Für die Suche selbst verwende die Suchfunktion von Excel. Erst bei komplizierten Suchmustern muss man auf andere Funktionen zurückgreifen.

Gruß
Franz

Code-Beispiel

Sub Test1()
 Dim bolVorhanden As Boolean
 bolVorhanden = fncFindContent(varWhat:="A15", \_
 rngBereich:=Worksheets("Tabelle2").UsedRange, \_
 bolMatchCase:=True)
 If bolVorhanden = True Then
 MsgBox """A15"" gefunden!"
 Else
 MsgBox """A15"" nicht gefunden!"
 End If
End Sub

Public Function fncFindContent(varWhat As Variant, rngBereich As Range, \_
 Optional bolMatchCase As Boolean = False, \_
 Optional lngLookat As Long = xlWhole, \_
 Optional lngLookin As Long = xlValues) As Boolean
 Dim rngZelle As Range
 On Error GoTo Fehler
 Set rngZelle = rngBereich.Find(What:=varWhat, LookIn:=lngLookin, \_
 Lookat:=lngLookat, MatchCase:=bolMatchCase)
 If rngZelle Is Nothing Then
 fncFindContent = False
 Else
 fncFindContent = True
 End If
 Exit Function
Fehler:
 fncFindContent = False
 MsgBox "Fehler-Br.: " & Err.Number & vbLf & Err.Description
End Function

Sorry, da verstehe ich nicht ganz was Du möchtest.
Grüsse Sebastian