Wie schreibe ich ein Makro, das nach einem bestimmten Symbol (in Excel) sucht und es durch einen harten Zeilenumbruch in derselben Zelle ersetzt und dabei die Zellintegrität aufrechterhält?
Ich konvertiere häufig Word-Dokumente in Excel und ersetze vor der Konvertierung alle harten Zeilenumbrüche im Word-Dokument durch Rautezeichen (@@), sodass die Zellintegrität bei der Einfügefunktion im Excel-Dokument gewahrt bleibt (wenn Sie die harten Zeilenumbrüche nicht entfernen, wird bei jedem Zeilenumbruch eine neue Zelle erstellt).
Nach dem Einfügen in Excel muss ich dann die "@@"-Zeichen durch harte Zeilenumbrüche ersetzen und kann den "harten Zeilenumbruch" unter "Ersetzen" nicht als Option finden. Ich glaube, dafür ist ein Makro erforderlich.
Vielen Dank für Ihre Hilfe.
Antwort1
Sie können dies tatsächlich mit der Option „Suchen und Ersetzen“ tun.
Ändern Sie Ihren Zellentext in: „Dies @@ ist @@ Ihr @@ Zellen-@@text“.
Gehen Sie dann zu Suchen und Ersetzen und ersetzen Sie @@ (oder was auch immer Sie ersetzen möchten) durch " & char(10) & ". Dadurch ändert sich Ihre Ausgabe von "dies @@ ist @@ Ihr @@ Zellentext" in "dies ist Ihr Zellentext".
Jetzt müssen Sie die Zellen formatieren, um den Zeilenumbruch zu aktivieren (Rechtsklick > Format > Registerkarte Ausrichtung > Zeilenumbruch aktivieren). Ihre neue Ausgabe sollte lauten :
Dies
ist
Ihr
Zellentext
Antwort2
Für ein kurzes Makro:
Sub DoubleAt()
Cells.Replace What:="@@", Replacement:=Chr(10)
End Sub
Antwort3
Dies war einer der Top-Treffer bei Google, als ich nach „Excel-Makro für harten Textumbruch“ gesucht habe. Hier ist also meine Lösung zum Umbrechen einer Textzelle basierend auf einer Breite:
Function hardwrap(useThis As Range, WrapAt As Integer) As String
Dim i As Integer
Dim Temp As String
Dim retVal As String
i = 0
retVal = useThis.Value
With useThis
If Len(.Value) > WrapAt Then
Temp = retVal
Do
i = i + WrapAt
Do
If Mid(Temp, i, 1) = " " Then
Temp = Left(Temp, i - 1) & Chr(10) & Right(Temp, Len(Temp) - i)
Exit Do
Else
i = i - 1
If i < 0 Then
Exit Do
End If
End If
Loop
Loop While i < Len(Temp) - WrapAt
retVal = Temp
End If
End With
hardwrap = retVal
End Function
Dieser Code basiert stark auf dieser Funktion von Andrew Poulsom, die hier zu finden ist:http://www.mrexcel.com/forum/excel-questions/424309-macro-wrap-text-hard-returns.html#post2097820
Wenn die Zeichenfolge länger als die Variable „Wrap at“ ist, springt es grundsätzlich zum Wrap-Punkt und marschiert rückwärts, um nach Leerzeichen zu suchen. Wenn es eines findet, ersetzt es dieses Leerzeichen durch eine neue Zeile. Dann wiederholt es den Vorgang für den Rest der Zeichenfolge.
Meine Version ist (meiner Meinung nach) etwas allgemeiner.
Beispiel:
A1:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
Antwort:=hardwrap(A1,40)
"Lorem ipsum dolor sit amet,
consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea
commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate
velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa
qui officia deserunt mollit anim id est
laborum."
Hoffentlich hilft das.