Phil tiene una serie de celdas que contienen texto. Parte del texto es demasiado largo, por lo que debe dividirlo en varias celdas. Por ejemplo, si una celda contiene «el zorro marrón rápido» y necesita dividir el texto para que ninguna parte tenga más de 12 caracteres, Phil puede hacerlo fácilmente. Pero quiere asegurarse de que la división se realice en el espacio antes del 12º carácter, en lugar del 12º carácter exacto. Phil no sabe cómo hacer esto.

Podría pensar que podría usar la herramienta Texto a columnas en Excel, pero no es adecuada para el trabajo. Si configura la herramienta para dividir texto según delimitadores, como un espacio, terminará con una sola palabra en cada celda. Si configura la herramienta para dividir el texto como «ancho fijo», entonces no divide las palabras en espacios; solo se asegura de que cada fragmento sea del tamaño que especifique.

Puede usar una fórmula para obtener los resultados deseados, pero hacerlo daría como resultado fórmulas que son increíblemente largas. Por ejemplo, si el texto demasiado largo está en la celda A3, la siguiente fórmula podría usarse para dividir el primer fragmento de ese texto, en el espacio antes del 12º carácter:

=IF(LEN($A3)>12,IF(ISERROR(FIND(" ",MID($A3,12,1)

&MID($A3,11,1)&MID($A3,10,1)&MID($A3,9,1)&MID($A3,8,1)

&MID($A3,7,1)&MID($A3,6,1)&MID($A3,5,1)&MID($A3,4,1)

&MID($A3,3,1)&MID($A3,2,1))),MID($A3,1,1),MID($A3,1, 13-FIND(" ",MID($A3,12,1)&MID($A3,11,1)&MID($A3,10,1)

&MID($A3,9,1)&MID($A3,8,1)&MID($A3,7,1)&MID($A3,6,1)

&MID($A3,5,1)&MID($A3,4,1)&MID($A3,3,1)&MID($A3,2,1))))

,RIGHT($A3,LEN($A3)))

Recuerde: todo esto es una fórmula única, solo para obtener la primera parte. Las fórmulas para obtener los fragmentos segundo, tercero, cuarto y posteriores son incluso más largas. Claramente, usar una fórmula puede no ser el mejor enfoque.

Esto deja usando una macro. Una macro puede examinar la cadena de texto y cortarla fácilmente en trozos de la longitud deseada. Considere la siguiente función definida por el usuario:

Function SplitMe(sSentence As String, iPos As Integer, Optional iLen = 12)

Dim sSegments() As String     Dim iSegments As Integer     Dim sRest As String     Dim sTemp As String     Dim iSpace As Integer     Dim J As Integer

iSegments = 0     sRest = sSentence     sTemp = Left(sRest, iLen + 1)

Do Until Len(sTemp) <= iLen         iSpace = 0         For J = Len(sTemp) To 1 Step -1             If Mid(sTemp, J, 1) = " " And iSpace = 0 Then iSpace = J         Next J         If iSpace > 0 Then             sTemp = Left(sRest, iSpace - 1)

sRest = Mid(sRest, iSpace + 1)

Else             sRest = Mid(sRest, Len(sTemp) + 1)

End If         iSegments = iSegments + 1         ReDim Preserve sSegments(1 To iSegments)

sSegments(iSegments) = sTemp         sTemp = Left(sRest, iLen + 1)

Loop     iSegments = iSegments + 1     ReDim Preserve sSegments(1 To iSegments)

sSegments(iSegments) = sTemp     If iPos <= iSegments Then         SplitMe = sSegments(iPos)

Else         SplitMe = ""

End If End Function

La función toma dos o tres parámetros. El primer parámetro es la cadena que se dividirá, el segundo es el fragmento que desea de la cadena y el tercer parámetro (y opcional) es la longitud deseada de cada fragmento. Si omite el tercer parámetro, la función asume que desea que cada fragmento tenga un máximo de 12 caracteres. Como ejemplo, asumiendo que el texto está en la celda A5, lo siguiente devolverá el segundo fragmento del texto donde cada fragmento tiene hasta 12 caracteres de largo:

=SplitMe(A5,2)

La función devolverá buenos resultados, siempre que cada palabra de la cadena de texto no sea más larga que la longitud objetivo especificada para cada fragmento. Si es así, obtendrá algunos resultados extraños, incluidos algunos fragmentos que no contienen palabras completas.

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (3899) se aplica a Microsoft Excel 97, 2000, 2002 y 2003.