macro para reemplazar texto con retornos duros en Excel

macro para reemplazar texto con retornos duros en Excel

¿Cómo escribiría una macro que buscaría un símbolo específico (en Excel) y lo reemplazaría con un retorno forzado en la misma celda y mantendría la integridad de la celda?

A menudo convierto documentos de Word a Excel y, antes de realizar la conversión, reemplazo todos los retornos físicos del documento de Word con signos de libra (@@) para que la integridad de la celda se mantenga en la función de pegar en el documento de Excel (si no lo hace). eliminar las devoluciones impresas, se crea una nueva celda en cada devolución).

Después de pegar en Excel, necesito reemplazar los signos "@@" con devoluciones forzadas y no puedo encontrar "devolución forzada" como opción en "reemplazar". Creo que se necesita una macro para hacer esto.

Gracias por cualquier ayuda que usted puede dar.

Respuesta1

De hecho, puedes hacer esto con la opción buscar y reemplazar.
Cambie el texto de su celda a: ="este @@ es @@ su @@ texto de celda @@".

Luego vaya a buscar y reemplazar y reemplazar @@ (o lo que quiera reemplazar) con " & char(10) & ". Esto cambiará su salida de "este @@ es @@ su @@ texto de celda @@" a "este es el texto de su celda".

Ahora necesita formatear las celdas para habilitar el ajuste de texto (haga clic derecho > formato > pestaña de alineación > verificar ajuste de texto). Su nuevo resultado debería ser:
Este
es el texto
de su
celda

Respuesta2

Para una macro breve:

Sub DoubleAt()
    Cells.Replace What:="@@", Replacement:=Chr(10)
End Sub

Respuesta3

Este fue uno de los principales resultados en Google cuando busqué "macro de Excel de texto ajustado"... así que aquí está mi solución para ajustar una celda de texto según un ancho:

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

Este código se basa en gran medida en esta función de Andrew Poulsom que se encuentra aquí:http://www.mrexcel.com/forum/excel-questions/424309-macro-wrap-text-hard-returns.html#post2097820

Básicamente, si la cadena es más larga que el ajuste en la variable, salta hacia adelante hasta el punto de ajuste y avanza hacia atrás buscando espacios. Cuando encuentra uno, reemplaza ese espacio con una nueva línea. Luego se repite para el resto de la cuerda.

Mi versión es un poco más genérica (en mi humilde opinión).

Ejemplo:

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."

A2:=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."

Espero que ayude.

información relacionada