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.
Actualización: Power Query nos permite hacer la tarea con más facilidad. Ver este post.
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
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.
ResponderBorrargracias
No me funciona me da #N/A
ResponderBorrarDescargá el cuaderno con el ejemplo y fijate qué es lo que estás haciendo mal.
ResponderBorrarel link del archivo no sirve da error
ResponderBorrarAcabo de corregir el enlace. Estás invitado a descargar el cuaderno.
ResponderBorrarAdemá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
ResponderBorrarEfectivamente, la fórmula supone que que los números y las letras están agrupados, como en ABC123 o 123ABC.
ResponderBorrarJorge, 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?
ResponderBorrarMuchas gracias y que estes bien
En la nota aparece una macro que hace esa tarea. ¿Por qué poner la fórmula en una macro?
ResponderBorrarSin comentario !
ResponderBorrarExcelente 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
ResponderBorrarla 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.
ResponderBorrarPublic 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:
ResponderBorrar1 - 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.
oye me podrias en enviar el codigo ya corregido por favor nuevamente muchas gracias
ResponderBorrarTodo lo que tienes que hacer es copiar el código que aparece en la nota.
ResponderBorrarHola, ¿como puedo extraer solamente numeros de 5 digitos que estan entre caracteres comunes pero en una sola linea de texto?. Y despues colocar estos numeros de 5 digitos en otro contexto en comun, por ejemplo entemedio de hola y chao.
ResponderBorrarEj: abcd89808fghipoijifjdjabcd75009fghirwecbcbjabcd46892fghgfdgdabcd32987fghikllkjfd
extraer todos los numeros de 5 digitos y pasarlos entremedio de todos los hola y chao asi:
hola89808chao
hola75009chao
hola46892chao
hola32987chao
¿Es posible?. De antemano muchas gracias
Buena información!!
ResponderBorrarTengo una caso muy practico, donde deseo extraer las primeras palabras de cada nombre científico:
Cedrela odorata = ceod
Si el texto de las celdas sigue siempre esa estructura (dos palabras separadas por un espacio), podrías usar esta fórmula:
ResponderBorrar=IZQUIERDA(A1;2)&EXTRAE(A1;HALLAR(" ";A1)+1;2)
Rolando,
ResponderBorrarla forma de hacerlo sería usando Vba (macros).
Buenos días. He copiado la formula "ext_num_let" en mi caso de la siguiente manera: =ext_num_let(D2,1) la hago matricial y nada, no funciona, me sale el error #¿NOMBRE? Tengo Excel 2010, ¿qué estaré haciendo mal? Muchas gracias. juanrgarces25@gmail.com
ResponderBorrarTienes que copiar el código de la función en un módulo del cuaderno que estás usando o del Personal. La función "ext_num_let" es una UDF (función definida por el usuario) y no se usa en forma matricial.
ResponderBorrarLa que se usa en forma matricial es la fórmula que aparece en la primer parte de la nota.
También te recomiendo no poner tu mail en estos comentarios, excepto que te guste ver tu casilla de correo invadida de spam.
Llevo semanas intentando hacer ésto con fórmulas, para unos códigos alfanuméricos medio complicados de mi empresa. Nunca se me ocurrió usar una función definida por el usuario! Mis respetos por tus conocimientos y un millón de gracias por tu aporte!!!!
ResponderBorrarCOMO PUEDO SACAR SOLAMENTE LOS NUMEROS DE UNA CELDA EJEMPLO 1236.21 USD
ResponderBorrarUsando alguna de las técnicas que muestro en esta nota.
ResponderBorrarSi quiero extraer una agrupación de 10 números dentro de una linea me sirve? pero solo la primer agrupación de 10 números, si llega a tener mas no,
ResponderBorrarEjemplo:
DEPOSITO VENTAS NETAS DE TAR POR PRONAD Referencia Nœmerica: 0001049191 Autorizaci—n: 00029725
Si esa fuera la linea quiero extraer solamente los primeros que aparecen: 0001049191
Gracias !! por toda su ayuda !!
Jessica, en tu caso me parece que sería más fácil y practico usar Texto en Columnas, suponiendo que cada línea tiene la misma estructura. Tambien podrías usar Texto en Columnas usando el espacio como separador y eliminando las columnas innecesarias.
ResponderBorrarHola, quisiera saber cómo poder extraer el último caracter numérico contado de izquierda a derecha de una cadena alfanumérica de una celda, cuya longitud de texto es variable, por ejemplo:
ResponderBorrarEn la serie AA-001-AA, el último carácter numérico contado de izquierda a derecha corresponde al número uno (1).
En la serie 2-AA-001A, el último carácter numérico contado de izquierda a derecha corresponde al número uno (1).
En la serie 02-AAA-01, el último carácter numérico contado de izquierda a derecha corresponde al número uno (1).
En la serie AAA-001-A, el último carácter numérico contado de izquierda a derecha corresponde al número uno (1).
En la serie A-001-AA, el último carácter numérico contado de izquierda a derecha corresponde al número uno (1).
En la serie A-2A-01, el último carácter numérico contado de izquierda a derecha corresponde al número uno (1).
En la serie 02-AA-1, el último carácter numérico contado de izquierda a derecha corresponde al número uno (1).
En la serie A-01-AAA, el último carácter numérico contado de izquierda a derecha corresponde al número uno (1).
Hola
ResponderBorrarpodrías adaptar la UDF que aparece en el post de esta manera
Function ext_num_let(celda As Range)
Dim iX As Integer, resultado As String, temp As String
For iX = 1 To Len(celda)
temp = Mid(celda, iX, 1)
If IsNumeric(temp) Then
resultado = resultado & temp
End If
Next iX
If Len(resultado) = 0 Then
ext_num_let = ""
Else
ext_num_let = CDec(Right(resultado, 1))
End If
End Function
Gran aporte con esa UDF.enhorabuena por su labor!
ResponderBorrarHola Jorge, lo que requiero es extraer de una cantidad determinada de celdas de una columna en un libro de Excel un grupo determinado de valores alfanumericos, luego estos valores que cumplirian con una condicion determinada, una vez extraidos de las celdas en la matriz colocarlos en una nueva columna, identificada con un encabezado, a los valores de esta columna nueva, si cumplen con una condicion, asignarles una descripcion alfanumerica, y luego si cumplen con esta descrpcion alfanumerica, asignarles un codigo numerico que se asignaria a estos ultimos valores, si cumplen con una condicion dada.
ResponderBorrarSe podria hacer esto con este codigo, o pordrias darme un codigo similar para poder lograr esto ?
Gracias de antemano.
Hola Félix,
ResponderBorrarpor favor fijate en lo que pongo en el enlcae Ayuda (en la parte superior del blog).
Hola, Jorge, primero muchas felicidades por tu blog. Es un pozo infinito de sabiduría!
ResponderBorrarA ver que idea se podría usar para extraer los números que están entre paréntesis, como este caso: L1AM2N1P1(2)/L1AM2N3P1(4)/LBM1N4P5(6)
Seguramente será muy fácil, pero yo soy muy torpe!
Gracias, de antemano.
Si nos abstenemos de usar Vba, la solución sería usar Texto en columnas, primero usando ( como separador, para eliminar la primera parte de la cadena de texto y luego usar ) para ir extrayendo los números.
ResponderBorrarhola esta es mi consulta.
ResponderBorrarEjemplo:
- hugdtrfs2017jhjfgjl
- 1475896352017458
- jolyhg2017jryi35,
entonces yo quiero solo sacar e otro solo los numeros que digan 2017, pero tengo una lista inmensa...dado el ejemplo
Por favor, reescribe la frase: "entonces yo quiero solo sacar e otro solo los numeros que digan 2017".
ResponderBorrarNo logro entender lo que consultas.
Hola Jorge
ResponderBorrar¿Cómo puedo extarer solo las consonantes de una palabra o palabras en una celda?
Hola, Excel no tiene una función (o Vba un método) para reconocer consonantes. Por eso no veo ninguna forma práctica de hacerlo. Podrías tal vez adaptar el código de la UDF usando los códigos ASCII de las consonantes.
ResponderBorrarHola, y como se pueden extrarer digitos NO consecutivos de una celda de excel?
ResponderBorrarMID o EXTRAE me devuelven una selección de dígitos de la celda pero solo si son consecutivos. Ejemplo CELDA 2934, necesito que me devuelva los dígitos 1o, 2o y 4o. Hasta ahora lo que hago es LEFT para obtener 29, RIGHT para obtener 4 y a posteriori CONCATENAR los dos resultado hasta obtener 294.
Me sería de mucha utilidad.
GRACIAS
La celda ¿contiene sólo números o números y letras?
ResponderBorrarSi contiene sólo números, tu solución es correcta. Podrías combinar todo en una única fórmula.
Si las celdas contienen números y letras lo mejor sería usar una macro. La macro evaluaría cada símbolo en la celda; si no es número lo ignoraría; si es número lo pondría en la cadena a condición que sea el primero, el segundo o el cuarto que encuentra.
Solo contiene números, puedo entonces conseguir lo que necessito con una sola fórmula? Cual sería?
ResponderBorrarComo decía, combinando todo en una fórmula. En tu caso:
ResponderBorrar=LEFT(celda,2)&MID(celda,4,1)
y para convertirlo eb valor
=VALUE(LEFT(celda,2)&MID(celda,4,1))
Muchísimas gracias Jorge!!! No sabía q había la posibilidad d hacer esto! Sencillo y d gran ayuda, seguro lo usaré en otras fórmulas. Mil gracias y feliz miércoles.
ResponderBorrarcomo hago para obtener lo siguiente:
ResponderBorrarcelda 1 19:00 PM
celda 2 03:00 AM
resultado esperado 7 horas
Resultado mostrado 4 PM
Hola, como no se trata de extraer números o letras de una cadena de texto te sugiero que veas este post sobre manejo de fechas y horas en Excel.
ResponderBorrar¿Por qué el resultado esperado es 7 horas? La diferencia de tiempo entre 01:19 PM y 02:03 AM (que es el día siguiente) es 12 horas y 44 minutos. Para calcularlo tienes que usar la función RESIDUO como muestro en este post.
Hola, como podria extraer el numero telefonico sin codigo de pais? ejemplo:
ResponderBorrar+51 987654321 solo quiero extraer el 987654321
Gracias
Si el patrón de los datos es constante, es decir, siempre hay un espacio entre el código de país y el número puedes usar sencillamente "Texto en columnas" en Datos-Herramientas de datos.
ResponderBorrarHola Jorge;
ResponderBorrarNecesito sacar el texto de largos diferentes, como lo puedo hacer?, cuál sería la fórmula?
CAMINOACASA4
IPERSAN3
RELAX49
MENSHERITAGE32
COLGATE77
SURKANA6
COOLKIDS12
Façonnable55
LNTHINGS22
HCONCEPT1
CORTEFIEL20
MULTIBRAND9
MMILANO1
ILLYCAFE15
OD_ALCORTA1
JSIMORRA21
SELENE21
Gracias
Fijate en esta nota donde muestro como usar Power Query para hacerlo.
BorrarTambién la técnica que muestro en esta otra nota.
Maravilloso, me funciono perfectamente!!! Muchas gracias
ResponderBorrar