Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hi, (10.02.2016, 18:59)coemm schrieb: hat sie! ok, dann entschuldige ich mich!
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
10.02.2016, 19:32
(Dieser Beitrag wurde zuletzt bearbeitet: 10.02.2016, 19:32 von RPP63.
Bearbeitungsgrund: Screenshot hinzugefügt
)
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)
Registriert seit: 10.09.2014
Version(en): 2013
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
Registriert seit: 10.09.2014
Version(en): 2013
11.02.2016, 12:23
(Dieser Beitrag wurde zuletzt bearbeitet: 11.02.2016, 12:23 von juliatoll.)
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
Registriert seit: 10.09.2014
Version(en): 2013
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
Registriert seit: 29.09.2015
Version(en): 2030,5
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:1 Nutzer sagt Danke an snb für diesen Beitrag 28
• Schülerin
Registriert seit: 10.09.2014
Version(en): 2013
13.02.2016, 15:25
(Dieser Beitrag wurde zuletzt bearbeitet: 14.02.2016, 18:22 von Rabe.
Bearbeitungsgrund: Name des seitherigen Königsweg-Vorstellers geändert!
)
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.
Registriert seit: 29.09.2015
Version(en): 2030,5
13.02.2016, 16:18
(Dieser Beitrag wurde zuletzt bearbeitet: 13.02.2016, 16:19 von snb.)
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:1 Nutzer sagt Danke an snb für diesen Beitrag 28
• Schülerin
|