Sonderzeichen soll alle Leerzeichen in einem String durchlaufen
#11
Hi,

(10.02.2016, 18:59)coemm schrieb: hat sie!

ok, dann entschuldige ich mich!
Top
#12
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

   

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#13
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
[-] Folgende(r) 1 Nutzer sagt Danke an juliatoll für diesen Beitrag:
  • Schülerin
Top
#14
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
[-] Folgende(r) 1 Nutzer sagt Danke an juliatoll für diesen Beitrag:
  • Schülerin
Top
#15
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
Top
#16
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
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • Schülerin
Top
#17
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.
Top
#18
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
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • Schülerin
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste