Extraer números o letras de códigos alfanuméricos en Excel
martes, abril 24, 2007
En esta nota veremos cómo extraer con Excel los números, o las letras, de códigos alfanuméricos.
Muchas empresas usan códigos alfanuméricos, por ejemplo, para los números de catálogo, como por ejemplo 123ABC. A veces se presenta la necesidad de aislar la parte numérica o las letras de estos códigos.
En la primera parte de esta nota veremos una solución con fórmulas Excel, útil para los casos en los que las cifras y las letras están agrupadas.
En la segunda parte veremos una solución con una UDF (función definida por el usuario) para los casos en los que no hay agrupación de cifras y letras (por ejemplo, 12A3BC).
Solución con fórmulas (cifras y letras agrupadas)
Fuente: Extracting numbers from alphanumeric strings
Supongamos que en la celda A1 de nuestra hoja de Excel tenemos el código ABC123. Nuestra tarea es extraer, con fórmulas Excel, la parte numérica, es decir, 123.
Como los números y las letras están agrupados, nuestra fórmula deberá hacer lo siguiente:
1 – descomponer el código en sus componentes
Esto lo hacemos combinando las funciones EXTRAER y FILA de la siguiente manera
=EXTRAE(A1;FILA($1:$7);1)
Esta fórmula descompone el codigo ABC123 y pone cada uno de sus componentes en una matriz virtual definida por la función FILA. En este ejemplo FILA define 7 filas, pero podemos agregar más en caso de ser necesario.
2- determinar si hay un número en el código
Para esto combinamos la función ESNUMERO en la fórmula anterior
=ESNUMERO(1*EXTRAE(A1;FILA($1:$7);1))
Esta fórmula genera una matriz de valores VERDADERO y FALSO.
Al usar EXTRAE los números son convertidos en texto, por lo tanto tenemos que multiplicar la expresión por 1 para forzar la conversión nuevamente a números.
3 – encontrar la posición del primer número (dígito) en el código
Para esto usamos la función COINCIDIR de la siguiente manera:
=COINCIDIR(VERDADERO;ESNUMERO(1*EXTRAE(A1;FILA($1:$7);1));0)
Ésta es una función matricial y debe ser introducida pulsando simultáneamente Ctrl+Mayúsculas+Enter
4 – contar cuántos números hay en el código
Finalmente necesitamos contar cuantas cifras componen la parte numérica del código, lo que hacemos con la función CONTAR
={CONTAR(1*EXTRAE(A1;FILA($1:$8);1))}
Ahora combinamos todo junto en esta fórmula matricial
=EXTRAE(A1;COINCIDIR(VERDADERO;ESNUMERO(1*EXTRAE(A1;FILA($1:$8);1));0);CONTAR(1*EXTRAE(A1;FILA($1:$8);1)))
Si queremos extraer las letras tenemos que modificar la fórmula
- cambiando el argumento VERDADERO en la fórmula a FALSO
- agregando la función LARGO para calcular la cantidad de letras a extraer, reatando de ella la función CONTAR
=EXTRAE(A1;COINCIDIR(FALSO;ESNUMERO(1*EXTRAE(A1;FILA($1:$9);1));0);LARGO(A1)-CONTAR(1*EXTRAE(A1;FILA($1:$9);1)))
En hoja 1 del cuaderno con el ejemplo podemos ver los distintos casos.
Solución con UDF (función definida por el usuario)
Cuando las letras y las cifras no están agrupadas en el código, el resultado de las fórmulas es incorrecto. Para esos casos, podemos escribir una función definida por el usuario.
En un módulo del editor de Vba escribimos este código
Function ext_num_let(celda As Range, tipo As Boolean)
Dim iX As Integer, resultado As String, temp As String
Select Case tipo
Case 1
For iX = 1 To Len(celda)
temp = Mid(celda, iX, 1)
If IsNumeric(temp) Then
resultado = resultado & temp
End If
Next iX
Case Else
For iX = 1 To Len(celda)
temp = Mid(celda, iX, 1)
If Not IsNumeric(temp) Then
resultado = resultado & temp
End If
Next iX
End Select
ext_num_let = resultado
End Function
Esta función usa dos argumentos:
- Celda: la celda que contiene el código
- Tipo: 1 para extraer cifras, 0 para extraer letras
Technorati Tags: MS Excel





13 comments:
excelente trabajo !!! mil gracias por compartir la información, me salvaste la vida con algo para el trabajo, justo estan todos de vacaciones y necesitaba hacer justo esto para mañana.
gracias
No me funciona me da #N/A
Descargá el cuaderno con el ejemplo y fijate qué es lo que estás haciendo mal.
el link del archivo no sirve da error
Acabo de corregir el enlace. Estás invitado a descargar el cuaderno.
Además, asegurate de introducir la fórmula como fórmula matricial (apretando simultáneamente Ctrl+Mayúsculas+Enter).
LA MACRO SI FUNCIONA PERO LA FORMULA NO FUNCIONA CON DATOS COMO ESTE A1C123
Efectivamente, la fórmula supone que que los números y las letras están agrupados, como en ABC123 o 123ABC.
Jorge, como estas, estoy ocupando la formula para extraer numeros, pero al momento de querer automatizarla en una macro no funciona, por lo que ¿como codifico en VB el Ctrl+Mayúsculas+Enter (matricial) para la formula?
Muchas gracias y que estes bien
En la nota aparece una macro que hace esa tarea. ¿Por qué poner la fórmula en una macro?
Sin comentario !
Excelente trabajo, me ha ahorrado meses de estudio y me sirve para mi trabajo.
GRACIAS NUEVAMENTE
Parece que por error he eliminao un comentario que decía
la verdad que muy buena la formula... pero en el caso de que no se encuentre ordenado el codigo? por ejemplo: 12ab34cd
O que se tengan codigos mas complicados como ser: AB.1234_list_01_90x90_SPA.FLV ??
La respuesta es usar la función UDF que aparece al final de la nota.
Meter en un módulo esta función y usar la funcion.
Public Function GetNum(Valor As String) As Integer
Dim T As String
Dim Ch As String
For f = 1 To Len(Valor)
Ch = Mid(Valor, f, 1)
If IsNumeric(Ch) Then
T = T & Ch
End If
Next
GetNum = Val(T)
End Function
Hola Makuki, gracias por colaborar pero tengo que hacer dos observaciones:
1 - en el código falta declarar la variable "f", por lo que la función falla al intentar usarla (basta con agregar Dim f as ...);
2 - la función sólo extrae valores numéricos.
Publicar un comentario