Clever-Excel-Forum

Normale Version: Sonderzeichen soll alle Leerzeichen in einem String durchlaufen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hi,

(10.02.2016, 17:59)coemm schrieb: [ -> ]hat sie!

ok, dann entschuldige ich mich!
Hallo mal wieder!
Zitat:schon mal vielen Dank. Aber wie sieht das Ganze aus wenn ich die einzelnen Werte mit Debug.print angeben will. 

Ich muss auch zugeben, dass ich mich Excelformeln nun so gar nicht auskenne.

Wäre aber nicht schlecht.  :21:
Peter hat Dir zwar bereits die "klassische" Variante gepostet, ich bin aber der Meinung, dass man Excelformeln auch in VBA nutzen sollte!
Da Du es ja gerne im Direktfenster haben willst:

Sub OderAnders()
Dim strSatz As String, iSpace As Long
strSatz = "Dies ist ein Satz, in dem ein Sonderzeichen nacheinander alle Leerzeichen durchläuft."
For iSpace = 1 To Ubound(Split(strSatz))
  Debug.Print WorksheetFunction.Substitute(strSatz, " ", "#", iSpace)
Next
End Sub

[attachment=4153]

Gruß Ralf
Code:
Sub LeerstellenimString(vbPosition, anzahl)
vbSonder = "#"
vbSatz = "Dies ist ein Satz, in dem ein Sonderzeichen nacheinander alle Leerzeichen durchläuft."

If Not vbPosition = 0 Then
Mid(vbSatz, InStr(vbPosition, vbSatz, " "), 1) = Replace(Mid(vbSatz, InStr(vbPosition, vbSatz, " "), 1), " ", vbSonder)
Debug.Print anzahl & ". = " & InStr(vbPosition, vbSatz, vbSonder) & " " & vbSatz '1
LeerstellenimString (InStr(vbPosition, vbSatz, " ")), anzahl + 1 '2 '3
End If

vbSatz = Replace(vbSatz, vbSonder, " ")
End Sub

Sub AlleLeerstellenimString()
Call LeerstellenimString(1, 1)
End Sub

Ansatz über rekursive Programmierung
weiterer Lösungsvorschlag:
Code:
Sub A_SonderzeichenindieLeerstellen()
'Die Leerstellen werden nacheinander von einem Sonderzeichen durchlaufen
vbSonder = "#" 'Sonderzeichen
vbSatz = "Dies ist ein Satz, in dem ein Sonderzeichen nacheinander alle Leerzeichen durchläuft."

vbPosition = InStr(1, vbSatz, " ") 'Startwert
While Not vbPosition = 0
Mid(vbSatz, InStr(vbPosition, vbSatz, " "), 1) = Replace(Mid(vbSatz, InStr(vbPosition, vbSatz, " "), 1), " ", vbSonder)
Debug.Print "Position " & vbPosition & " : " & vbSatz
vbPosition = InStr(vbPosition + 1, vbSatz, " ")
vbSatz = Replace(vbSatz, vbSonder, " ")
Wend

End Sub
Code:
Sub DurchlaufSonderzeichen()
vbSonder = "#"
vbSatz = "Dies ist ein Satz, in dem ein Sonderzeichen nacheinander alle Leerzeichen durchläuft."

For i = 1 To UBound(Split(vbSatz, " "))
vbPosition = InStr(vbPosition + 1, vbSatz, " ")
Debug.Print i & ". " & Left(vbSatz, vbPosition - 1) & vbSonder & Right(vbSatz, Len(vbSatz) - vbPosition)
Next i

End Sub
Code:
Sub M_snb()
    Debug.Print Join([transpose(substitute("Dies ist ein Satz, in dem ein Sonderzeichen nacheinander alle Leerzeichen durchläuft."," ","#",row(1:11)))], vbLf)
End Sub
Hallo SNB,

weiß zwar noch nicht ganz wie dein Code funktioniert, aber eine Super-Lösung! Dachte bisher immer der Königsweg wäre der von RPP63/Ralf (sicherlich leichter zu verstehen). Sei's drum.
Codealternativen sind immer interessant.
Dann gibt's noch eine Alternative ohne Excel Formel (weil 'substitute' eine Excel Formel ist):


Code:
Sub M_snb()
    sn = Split("Dies ist ein Satz, in dem ein Sonderzeichen nacheinander alle Leerzeichen durchläuft.")

    For j = 1 To UBound(sn)
      sn(j) = "#" & sn(j)
      Debug.Print Replace(Join(sn), " #", "#")
      sn(j) = Mid(sn(j), 2)
    Next
End Sub
Seiten: 1 2