Wie kann man ein Leerzeichen nach einen Text oder Zahl automatisch einfügen? Bsp eingabe: m100.17k2 = m 100.17 k2 mmmb 1.01k = mmmb 1.01 k ich2.02 K = ich 2.02 k ich2.02 = ich 2.02 Ich weiß das als ertes immer Buchstaben kommen, danach Zahlen nach der/den Zahlen ein punkt und dann eine 2 stellige Zahl ob danach noch etwas kommt weiß ich nicht.
Hintergrund ist Ich lese mit einer Uf Dateien ein, die andere erstellen. Da passiert es öfter mal das einer die Leerzeichen vergisst einzutippen. Somit habe ich das Problem die Datei mit der UF zu öffnen. Die Namen stehen immer in einem TabellenBlatt. Was ich möchte: 1. Das bei einer eingabe in ein TabellenBlatt sagen wier mal in der Zelle A1. Bei der eingabe schon der Name so eingetragen wird auch wenn mann alles zusammen schreibt 2. Beim einlesen von alten Tabellen, mir der Name dann so im Bsp. in einer TextBox dargestell wird
in VBA kann die Funktion "like" sicher Buchstaben und Zahlen unterscheiden.
Zitat:for i = 1 to len(Tx)-1 if mid(Tx, i,1) like "@" and mid(Tx(i+1,i, 1) like "#" then 'Einfügen eines Leerzeichens, z.B. mit cells.characters.insert next i
Der Code ist nur symbolisch. Eine zusätzliche Prüfung auf "." ist notwendig.
mfg
(für FReitagabend ok, Montags könnte es auch getestet werden)
Hallo! Habe ien wenig getestet. @shift-del gefällt mir
@Fennek Leider funktioniert dein Code nicht, bekomme Syntax fehler!
Für das was ich vorhabe wird vieleicht doch ein VBA Code benötigt. Wie schon beschrieben, lese ich die zelle A1 in die TextBox1 ein. Ich habe ein Beispiel erstellt zum besseren verständniss. In der TextBox1 steht der Wert aus A1 und in TextBox2 so wie ich ihn gerne nach dem einlesen von A1 in der Textbox habe möchte. Was ich vorhabe ist dann eine Datei zu suchen und in einer anderen Datei einen wert auslesen.
Sub Bo2() Dim Bo As Boolean For i = 1 To 2 Tx = Cells(i, "A") Ty = "" For l = 1 To Len(Tx) If Not Bo And Mid(Tx, l, 1) Like "#" Then Ty = Ty & " " Bo = True End If
If Bo And Mid(Tx, l, 1) Like "[A-Za-z]" Then Ty = Ty & " " Bo = False End If Ty = Ty & Mid(Tx, l, 1) Next l Cells(i, "F") = WorksheetFunction.Trim(Ty) Next i End Sub
mfg
Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:1 Nutzer sagt Danke an Fennek für diesen Beitrag 28 • michel34497
für die Beispiele der Datei (und sehr ähnlich zu shift-del):
Code:
Sub iFen() For i = 1 To 3 Tx = Cells(i, "A") For p1 = 1 To Len(Tx) If Mid(Tx, p1, 1) Like "#" Then Exit For Next p1 For p2 = Len(Tx) To p1 Step -1 If Mid(Tx, p2, 1) Like "#" Then Exit For Next p2 Cells(i, "G") = WorksheetFunction.Trim(Left(Tx, p1 - 1) & " " & Mid(Tx, p1, p2 - p1 + 1) & " " & Mid(Tx, p2 + 1)) Next i End Sub
mfg
Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:1 Nutzer sagt Danke an Fennek für diesen Beitrag 28 • michel34497
Habe jetzt nochmal getestet und mir ist noch was aufgefallen. Mit der Formel von shift-del wird alles so in Spalte E dargestellt wie ich es haben möchte. Mit deinen beiden Codes wird es leider so nicht eingetragen. Das Problem besteht in der Zeile 3 a 1.01n4 sollte dann so sein a 1.01 n4 (Buchstaben, leerzeichen, Zahlen, leerzeichen, Buchstabe & Zahle zusammen). Was müsste geändert werden? Ich benutze eigentlich den 2 Code den du gepostet hast. Beim ersten Code wird manchmal nachdem schon ein leerzeichen vorhaden ist ein zusätzliches eingefügt.
Sub prcTestRegex() Dim re As Object, reMat As Object Dim lngC As Long, lngA As Long Dim vtr As Variant, vntArray As Variant
Set re = CreateObject("vbscript.regexp") re.Pattern = "(\w+)(\s*)(\d+\.\d+)(\s*)(\w*)" re.Global = True For lngA = 1 To Cells(1, 1).End(xlDown).Row vtr = Cells(lngA, 1).Value Set reMat = re.Execute(vtr) ReDim vntArray(0 To reMat(0).submatches.Count - 1) For lngC = 0 To UBound(vntArray) vntArray(lngC) = reMat(0).submatches(lngC) If vntArray(lngC) = " " Then vntArray(lngC) = "" Next lngC Cells(lngA, 2).Value = Join(vntArray) Next lngA End Sub
Leider funktioniert dein Code nicht so wie ich das möchte. Beim test hat er aus Michael100.01 das daraus gemacht Michael10 0.01 und zuviele Leerzeichen eingefügt. Rauskommen soll aber immer nach der Buchstaben folge (Michael) ein leerzeichen, Zahlen folge (100.01) . Sollte nach der Zahlen folge (100.01) noch ein Buchstabe stehen dann leerzeichen und der rest der folgt zusammen. Mit shift-del Formel geht das genauso wie ich das möchte. In der Spalte E der Tabelle wird es genauso dargestellt wie es sein soll, nur ich hätte das gerne als VBA Code. Deinen Code habe ich auch in das Modul1 mit eingefügt.