Feroz tiene una serie de valores de texto en la columna A. Estos valores están formateados con dos colores de fuente diferentes en cada celda. (La primera parte del texto es de un color y la segunda parte es de un color diferente). Le gustaría dividir estos valores de texto en las columnas B y C, de modo que todo lo que tenga el primer color esté en la columna B y todo lo que tenga el segundo color sea en la columna C. Señala que la herramienta Texto a columnas no manejará esto, por lo que se pregunta si se puede hacer.

Sí, se puede hacer. Una forma es utilizar la capacidad Flash Fill incorporada de Excel. (Esta herramienta solo está disponible en Excel 2013 o versiones posteriores). Supongamos que está comenzando con datos que se ven así:

(Ver figura 1)

image

Figura 1. Sus datos multicolores.

Tenga en cuenta que mis datos de prueba incluyen, en la columna E, algunas características de los datos en la columna A. En este punto, todo lo que necesita hacer es darle a Flash Fill algo con lo que pueda trabajar. Hago esto separando manualmente el texto en las filas 2 y 3, como se muestra aquí: (Ver Figura 2.)

image

Figura 2. Configuración de los ejemplos.

Es importante que los ejemplos que cree en B2: C3 sean exactos; deben incluir todo lo que sea de cualquier color (incluidos los espacios iniciales o finales) y tanto la ortografía como las mayúsculas deben ser correctas.

Ahora seleccione la celda B4 y presione Ctrl + E. Esto hace que Flash Fill entre en acción, y verá que el texto aparece en el resto de la columna B. Haga lo mismo en la columna C: seleccione la celda C4 y presione Ctrl + E. Sus resultados deberían ser similares a los siguientes: (Ver Figura 3.)

image

Figura 3. Después de usar Flash Fill en ambas columnas.

Debo señalar que su éxito con Flash Fill dependerá, en gran parte, de las características de los datos en la columna A. En la mayoría de los casos, hará la mayor parte del trabajo y puede completar la tarea enormemente. Puede haber algunos casos extraños en los que Flash Fill no pueda discernir cómo debe separar sus datos. Puede ver esto en la figura anterior donde las celdas A7, A9 y A11 no se separaron correctamente. Querrá verificar sus resultados cuidadosamente para asegurarse de que tengan sentido.

Si Flash Fill no funciona para usted, entonces querrá crear una macro para hacer el trabajo. Es posible crear una macro que funcione en todas las celdas de la columna A y colocar el texto en las columnas B y C (como necesita Feroz), pero es más flexible crear una función definida por el usuario que devuelva lo que sea se quiere desde la celda. Aquí tienes un ejemplo:

Function SplitColors(r As Range, Optional iWanted As Integer = 1) _   As String     Dim sTemp As String     Dim J As Integer     Dim K As Integer     Dim iColors(9) As Integer

sTemp = ""

If r.Cells.Count = 1 Then         For J = 1 To 9             iColors(J) = 0         Next J

' Determine where colors change         ' Remember there will always be at least one color         K = 1         iColors(K) = 1         For J = 2 To Len(r.Text)

If r.Characters(J,1).Font.Color <> _               r.Characters(J-1,1).Font.Color Then                 K = K + 1                 iColors(K) = J             End If         Next J

' Check if wanted color is less than total colors         If iWanted <= K Then             J = iColors(iWanted + 1)

If J = 0 Then J = Len(r.Text) + 1             J = J - iColors(iWanted)

sTemp = Mid(r.Text, iColors(iWanted), J)

End If     End If     SplitColors = sTemp End Function

La función SplitColors requiere un parámetro (un rango sobre el que actuar)

y un segundo parámetro opcional (qué color del rango desea).

La función verifica, primero, para ver si se pasó una sola celda. Si es así, determina cuántos colores hay en esa celda y los números de caracteres donde ocurren los cambios de color. Luego, si el color deseado (pasado en el segundo parámetro opcional) es menor que el número de colores en la celda, se devuelven los caracteres que usan ese color.

Entonces, por ejemplo, si desea devolver las celdas usando el primer color en la celda A2, puede usar cualquiera de los siguientes en su hoja de trabajo:

=SplitColors(A2, 1)

=SplitColors(A2)

La segunda invocación funciona porque el segundo parámetro es opcional. Si no lo incluye, la función asume que desea trabajar con el primer color. Si desea devolver el texto usando el segundo color en la celda, entonces funcionará lo siguiente:

=SplitColors(A2, 2)

La función SplitColors funcionará con hasta 9 colores en cualquier celda que esté revisando. Si especifica un segundo parámetro de 9 o mayor, terminará con un error.

_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 (13605) se aplica a Microsoft Excel 2013, 2016, 2019 y Excel en Office 365.