Marty tiene una hoja de trabajo con una larga serie de números de pieza en la columna A.

Estos consisten en letras y números, como A123BC, AB123C, etc. Marty quiere dividir los datos en tres columnas, de modo que el texto antes de los números esté en una columna, los números en la segunda columna y el texto después de los números en el tercero.

El factor que complica la división del número de pieza en segmentos es que no hay una longitud establecida para cada componente del número de pieza combinado. Si los componentes fueran de longitud estándar, entonces podría usar la función Texto a columnas en Excel. Dado que no lo son, y no hay un delimitador entre los componentes, esa vía potencial para una solución está cerrada.

Si desea utilizar fórmulas para separar los números de pieza, necesitará tres de ellos, uno para cada componente que desee extraer.

Suponiendo que los números de parte siguen el patrón indicado (texto, dígitos, texto) y que el primer número de parte está en la celda A1, puede usar lo siguiente en la celda B1:

=LEFT(A1,MATCH(FALSE,ISERROR(1*MID(A1,ROW(INDIRECT("1:100")),1)),0)-1)

Esto debe ingresarse como una fórmula de matriz, lo que significa que debe ingresar usando Ctrl + Shift + Enter. La fórmula encuentra el primer dígito numérico en el número de pieza y luego devuelve todo antes de ese dígito.

Funcionará con cualquier número de pieza que no tenga más de 100 caracteres.

Para extraer el segundo componente del número de pieza, puede poner la siguiente fórmula en la celda C1:

=MID(A1,MATCH(FALSE,ISERROR(1MID(A1,ROW(INDIRECT("1:100")), 1)),0),COUNT(1MID(A1,ROW(INDIRECT("1:100")),1)))

Nuevamente, esta es una fórmula única y debe ingresarse como una fórmula de matriz (Ctrl + Shift + Enter) para que pueda funcionar en cada carácter en el número de pieza original. Examina el número de pieza y determina el punto de inicio de los dígitos, y luego extrae todos esos dígitos. Devuelve una cadena de texto, aunque esa cadena se compone de dígitos. Si desea que se trate realmente como un número (lo que eliminaría los ceros iniciales, por supuesto), debe encerrar la fórmula completa en una función de valor, como se muestra aquí:

=VALUE(MID(A1,MATCH(FALSE,ISERROR(1MID(A1,ROW(INDIRECT("1:100")), 1)),0),COUNT(1MID(A1,ROW(INDIRECT("1:100")),1))))

Para obtener el último componente del número de pieza, debe usar la siguiente fórmula, nuevamente ingresada como una fórmula de matriz:

=MID(A1,MATCH(FALSE,ISERROR(1MID(A1,ROW(INDIRECT("1:100")), 1)),0)+COUNT(1MID(A1,ROW(INDIRECT("1:100")),1)),100)

Si bien este enfoque funciona muy bien, las fórmulas de matriz son notoriamente intensivas en cálculos, especialmente cuando tiene muchas de las fórmulas en su hoja de trabajo. Si necesita separar mil números de pieza, eso significa que terminará con 3000 fórmulas de matriz, que pueden ser muy, muy lentas para volver a calcular.

Si se encuentra en esta situación, es posible que desee utilizar una macro para separar los números de pieza. La siguiente macro debería funcionar con números de pieza que sigan el patrón de texto, dígitos, texto, como ya se describió.

Sub Split1()

Dim C As Range     Dim sNew As New     Dim i As Integer          For Each C In Selection         sNew = ""

i = 1

' Get first part, which is text         Do While IsNumeric(Mid(C, i, 1)) = False             sNew = sNew & Mid(C, i, 1)



i = i + 1             If i > Len(C) Then Exit Do         Loop         C.Offset(0, 1).Value = sNew

' Pull next part, which should be digits         sNew = ""

Do While IsNumeric(Mid(C, i, 1)) = True             sNew = sNew & Mid(C, i, 1)



i = i + 1             If i > Len(C) Then Exit Do         Loop         C.Offset(0, 2).Value = sNew

' Use rest of original cell         sNew = Mid(C, i, Len(C))

C.Offset(0, 3).Value = sNew     Next C End Sub

Para usar la macro, simplemente haga una selección de números de pieza y ejecútela. La macro utiliza el concepto de buscar cambios entre valores numéricos / no numéricos en una cadena de caracteres en la celda. Cuando se alcanza uno de estos límites, la parte de la cadena original antes del límite se rellena en una nueva celda. Este concepto se puede abreviar un poco, como se hace en el siguiente ejemplo.

Sub Split2()

Dim C As Range     Dim j As Integer     Dim k As Integer

For Each C In Selection         j = 1         Do While Not (IsNumeric(Mid(C.Value, j, 1))) And j <= Len(C)

j = j + 1         Loop         k = j

Do While IsNumeric(Mid(C.Value, k, 1)) And k <= Len(C)

k = k + 1         Loop

C.Offset(0, 1) = Left(C, j - 1)

C.Offset(0, 2) = Mid(C, j, k - j)

C.Offset(0, 3) = Mid(C, k, Len(C) - (k - 1))

Next C End Sub

La diferencia entre esta versión de la macro y la anterior, por supuesto, es que esta versión recorre la celda original y determina los límites de una vez. Cuando se conocen, los componentes del número de pieza original se introducen en las celdas.

Un enfoque interesante para separar los números de pieza es utilizar un par de funciones breves definidas por el usuario que determinan dónde están los límites entre los componentes. Considere las siguientes dos funciones:

Function pNumber(X)

i = 1     Do Until Mid(X, i, 1) Like "#": i = i + 1: Loop     pNumber = i End Function
Function pAlpha(X)

X = UCase(X)

i = pNumber(X)

Do Until Mid(X, i, 1) Like "[A-Z]": i = i + 1: Loop     pAlpha = i End Function

Estos son mucho más cortos que las macros anteriores, y todo lo que hacen es devolver el límite donde comienzan los números (en el caso de pNumber) y el límite donde comienza el segundo grupo de texto (en el caso de pAlpha). Para usar las funciones, use las siguientes tres fórmulas para devolver, respectivamente, el primer, segundo y tercer componente del número de pieza original:

=MID(A1,1,pNumber(A1)-1)

=MID(A1,pNumber(A1),pAlpha(A1)-pNumber(A1))

=MID(A1,pAlpha(A1),LEN(A1)-pAlpha(A1)+1)

_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 (10369) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365. Puede encontrar una versión de este consejo para la interfaz de menú anterior de Excel aquí:

link: / excel-Breaking_Up_Variable-Length_Part_Numbers [Rompiendo números de pieza de longitud variable].