Excel macro / Problem von Zeichenverschieben in String

denschiro

Grünschnabel
Hallo ,

ich bin ein VBA Beginner und plage mich hier mit einem Problem herum.

Ein String soll gesucht werden.
Dummerweise kann in diesem String ein Zeichen fehlen. Es handelt sich hier um das Zeichen "µ" dieses kann sich an beliebiger Position innerhalb des String befinden. Es ist alles möglich von 2- bis vorletzte Stelle des Strings, ebenso hat der String keine feste Länge.

Eine 100% suche habe ich schon, nun fehlt mir ein Ansatz zur Suche nach diesen String mit dem fehlenden "µ".

Nun hatte ich überlegt den String in ein Arry zu packen und anschließen das µ durchlaufen zu lassen.

Hat hier jemand einen tipp wie man dies in vba excel bewerkstelligt?
 

Yaslaw

alter Rempler
Moderator
Fehlt das µ im zu durchsuchenden String oder im Suchstring?
Mach doch mal schnelle zwei drei Beispiele in der Art
Code:
Suchmuster: Hans Wurst
Text: Hallo Haµns Wurst
 

denschiro

Grünschnabel
Das µ fehlt im Suchstring

Habe eine Liste in der die Werte gespeichert sind.

Text_Eingabe: Hans_25
Richtiger Text: Hansµ_25 -> Dieser wird auch in der Liste gefunden.

Text_Eingabe: C10Ent_35
Richtiger Text: C10µEnt_35


Ich hoffe das hilft als Beispiel
 

Yaslaw

alter Rempler
Moderator
Mach dir einfach. Entferne das µ vor dem Suchen. Und dann dursuchst du den Text.
Mit dem folgenden sollte es gehen
Replace(strOriginalText, "µ", "")

Ich weiss jetzt nicht, wie due durchsuchen willst. Geht es nur darum herauszufinden, ob der Suchbegriff im Text vorkommt, oder musst du wissen wo er vorkommt?
 

Yaslaw

alter Rempler
Moderator
Nachtrag:
Falls du den Originaltext mit dem u als Resultat brauchst, dann kannst du das über Reguläre Ausdrücke machen

Visual Basic:
Public Function searchU(iSearchText As String, iText As String, iSpecialChar As String) As String
    Dim letters() As String
    Dim pattern As String
    Dim rx As Object
    
    letters = strSplit(iSearchText)
    pattern = "(?:" & iSpecialChar & ")?"
    pattern = pattern & Join(letters, pattern) & pattern
    
    Set rx = CreateObject("VBScript.RegExp")
    rx.pattern = pattern
    
    If rx.Test(iText) Then
        searchU = rx.execute(iText)(0)
    End If
End Function


'/**
' * http://wiki.yaslaw.info/dokuwiki/doku.php/vba/functions/strsplit
' * Splittet ein String in Teile nach einer vordefinierten Grösse auf
' *
' *     array = strSplit(string [,teillänge])
' *
' * @param  String      zu zerlegender String
' * @param  Integer     Grösse der Teile
' * @return Array<String>
' */
Public Function strSplit(ByVal iString As String, Optional ByVal iSplitLen As Integer = 1) As String()
    If Len(iString) = 0 Then Exit Function
    Dim size As Integer:    size = (Len(iString) \ iSplitLen + IIf(Len(iString) Mod iSplitLen > 0, 1, 0))
    Dim retArr() As String: ReDim retArr(size - 1)
    
    Dim i As Integer: For i = 0 To size - 1
        retArr(i) = Mid(iString, (i * iSplitLen) + 1, iSplitLen)
    Next i
    strSplit = retArr
End Function

Beispiel
Code:
? searchU("C10Ent_35", "C10µEnt_35", "µ")
C10µEnt_35
 

denschiro

Grünschnabel
Hallo ,

leider muss ich das "µ " in der Original Liste behalten, da dies eine Eindeutiger Bezeichner ist.

Das Szenario ist folgendes , ich habe eine Liste, in dieser suche ich den String,
Wenn ich den finde kopiere ich aus der Liste die Benachbarte Zelle mit der Artikelbezeichnung.

Nun haben leider einige Artikelnummern das µ im String.

Werde deinen Ansatz aber mal verfolgen und eine Ghostliste ohne "µ" erzeugen und in dieser suchen.

Update :
Habe deinen Nachtrag eben erst gesehen. Teste das mal. Danke!
 

denschiro

Grünschnabel
Hallo Yaslwa der Tipp mit den Regulären Ausdrücken und deinem Beispiel haben geholfen.
Danke !!

Durchsuche nun mit die Liste nach dem Wert, wenn dies fehlschlägt , arbeite ich mit den Regulären ausdrücken und durchsuche mit diesen meine Liste.

Klappt gut, einiziges Manko hierbei, das Suchen dauert bei den Regulären ausdrücken etwas länger. Ich werde hier mal den Suchbereich optimieren....