Separar cadena de texto en Filas según el número de caracteres

Necesito separar una cadena de texto(palabras) en Filas, ¿en cuántas? Dependiendo del número de caracteres, si es menos o igual a 75 caracteres en una sola (queda igual) si tiene por ejemplo 100 caracteres entonces en dos filas pero con las palabras enteras, no cortadas. Por ejemplo digamos que este texto tiene 225 caracteres: "Hola este es un ejemplo sencillo de separación de textos" entonces que el resultado sea: primera fila: Hola este es un. Segunda fila: ejemplo sencillo de. Tercera fila: separación de textos. Y listo, digamos cada cadena tenía no más de 75 caracteres pero de dividió por palabras completas.

2 Respuestas

Respuesta
1

¿En qué celda tienes el texto? ¿Y en que celdas quieres el resultado? ¿Solamente tienes un texto? O tienes varios textos en una columna y quieres que todos sean separados, si es así, también dime en donde quieres los resultados.

En la columna A de la Hoja1 están los textos hacia abajo, y quiero los resultado en la Columna A de la Hoja2. Muchas muchas gracias

Para que me quede claro, en la hoja1 en la celda a1 tienes un texto con 3 renglones, cada renglon va en la hoja2 en a1, ¿a2 y a3? ¿Luego tienes otro texto en la hoja1 en la celda a2 con 2 renglones y los quieres en la hoja2 en las celdas a4 y a5?

No, a ver, en la celda A1 de la Hoja1 tengo un texto x de digamos 92 caracteres. Por ejemplo este texto: "Necesito separar una cadena de texto(palabras) en Filas, ¿en cuantas? Dependiendo del número" ok, y quiero que si ese texto es mayor a 75 caracteres como en este caso, se divida en dos filas pero que no se corten las palabras, en la Hoja2, Celda A1; entonces que en la celda A1 de la Hoja2 resulte: "Necesito separar una cadena de texto(palabras) en Filas, ¿en cuantas?"; y en la celda A2 resulte: " Dependiendo del número". Ahora,  código que programé y añadí arriba hace eso pero en la misma hoja, pero no me funciona con textos cortos, como de 90 caracteres por ejemplo; es decir, no me genera las dos cadejas de texto sino solo una. Pruébalo para que veas lo que quiero más o menos. Importante mencionar que en la Hoja1 Celda A2, A3, A4, A5...para abajo, podrían haber más cadenas de texto y quiero que cuando se separen se acomoden debajo de las últimas en la Hoja2; o sea, que si la primera cadena se dividió en tres ocuparía las Celdas A1, A2, A3 de la Hoja2 y cuando se separe la segunda cadena (Hoja1 Celda A2) se ubique a partir de A4 de la Hoja2. Espero haber sido clara para finalizar esto. muchísimas gracias ;)

Lo de separar en cadenas de 75 caracteres me queda claro.

Lo que quería saber es en dónde pongo el resultado de las cadenas.

Así se expresa gráficamente

Hoja1

                          A

1 Texto con más de 75 caracteres ... etcétera

2 Otro texto con muchos caracteres ... más caracteres ... más datos

Resultado

Hoja2

                               A

1 Texto con más de 75 caracteres

2 etcétera

3 Otro texto con muchos caracteres

4 más caracteres

5 más datos

Eso fue lo que pregunté ahora creo que estamos claros, ¿correcto?

Exacto exacto amigo, eso es, disculpa, es que no te caché la ves anterior. Pero sí, así es : )

Esta es la macro, cambia en la macro en esta parte por el nombre de tus hojas:

Set h1 = Sheets("Hoja1") ' hoja con textos
Set h2 = Sheets("Hoja2") ' hoja de resultados

En esta línea de la macro pon la cantidad de caracteres que quieres por cada cadena.

k = 75

Sub separar()
'Por.DAM
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    '
    h2.Columns("A").Clear
    '
    k = 75
    j = 1
    For i = 1 To h1.Range("A" & Rows.Count).End(xlUp).Row
        If Len(h1.Cells(i, "A").Text) > k Then
            nva = h1.Cells(i, "A")
            Do While Len(nva) > k
                n = InStrRev(nva, " ", k + 1)
                If n > 0 Then
                    h2.Cells(j, "A") = RTrim(Left(nva, n))
                    nva = Mid(Mid(nva, 2), n)
                Else
                    n = InStr(1, nva, " ")
                    If n = 0 Then n = Len(nva)
                    h2.Cells(j, "A") = RTrim(Left(nva, n))
                    nva = Mid(nva, n)
                End If
                j = j + 1
            Loop
            If Len(nva) > 0 Then
                h2.Cells(j, "A") = nva
                j = j + 1
            End If
        Else
            h2.Cells(j, "A") = h1.Cells(i, "A")
            j = j + 1
        End If
    Next
    h2.Select
    MsgBox "Separación terminada", vbInformation
End Sub
Respuesta
1

En el siguiente enlace te dejo un ejemplo ya programado

http://share.myflare.com/NZCt2C 

No olvides valorar la respuesta

Me podrías enviar el libro al correo por favor ;)

Dime cual es tu mail

Ya te lo he enviado por mail

Recuerda valorar

Me parece este mensaje en el correo: This message cannot be displayed because of the way it is formatted. Ask the sender to send it again using a different format or email program. multipart/mixed

Te lo he vuelto a reenviar

Disculpa Luis, ya pude ver el archivo. quedó excelente. muchas gracias Luis

Solo que estoy notando que de las filas generadas algunas miden más de 75 caracteres y no es correcto, deben medir igual o menos a 75. algunas miden 81, 80, 83 caracteres y eso no es correcto. gracias de antemano Luis

Te lo he vuelto ha enviar modificado

Ya me cuentas

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas