Macro para extraer números de una celda

Algunas semanas atrás publiqué un artículo que utilizaba funciones para extraer números de una celda en Excel. Sin embargo, dicho método tiene ciertas restricciones como el hecho de extraer solo el primer bloque de números encontrado en la cadena.

Hoy haremos una macro para extraer todos los números de una celda sin importar su posición dentro de la cadena y para ello utilizaremos la función IsNumeric la cual nos permite saber si el carácter analizado es un valor numérico.

Función IsNumeric en VBA

La función IsNumeric tiene un funcionamiento muy sencillo ya que tiene un solo argumento y que es el valor que deseamos evaluar.

Macro para extraer números de una celda en Excel

Como resultado obtendremos un valor verdadero (TRUE) en caso de que el argumento sea un valor numérico y un valor falso (FALSE) en caso contrario. Para nuestro ejemplo aplicaremos la función IsNumeric a cada carácter contenido en la celda.

Recorrer la cadena de texto

Para analizar cada carácter en una cadena de texto será necesario utilizar el bucle For Next y colocar como límite el número de caracteres de la cadena que podemos obtener fácilmente con la función Len.

Extraer números de cadenas alfanuméricas en Excel

La instrucción For Next realizará tantos ciclos como números de caracteres haya en la cadena y en cada ciclo la variable i aumentará de valor hasta alcanzar el número máximo de caracteres. Ahora que ya sabemos cómo recorrer la cadena de texto debemos extraer efectivamente cada uno de los caracteres utilizando la función Mid.

Función Mid en VBA

La función Mid en VBA nos permite extraer una subcadena indicando su posición de inicio y la longitud. Esta función tiene 3 argumentos, el primero de ellos es la cadena original, el segundo la posición donde iniciará la extracción y el tercer argumento es la cantidad de caracteres a extraer.

Extraer solo números de una celda en Excel

Para nuestro ejemplo utilizaremos la función Mid para extraer un solo carácter a la vez por lo que estará dentro de nuestro bucle For Next explicado en la sección anterior. A continuación presento el código completo que nos ayudará a extraer números de una celda en Excel utilizando una macro.

Función VBA para extraer números en Excel

Si has leído con detenimiento las secciones anteriores encontrarás muy fácil entender el siguiente código:

Function EXTRAENUM(cadena As String)

'Variable numeros contendrá solo números de la cadena
Dim numeros As String
numeros = ""

'Recorrer la cadena
For i = 1 To Len(cadena)
    
    'Evaluar SI el carácter actual es un número
    If IsNumeric(Mid(cadena, i, 1)) Then
        
        'Concatenar valor numérico a la variable numeros
        numeros = numeros & Mid(cadena, i, 1)
    
    End If
Next

'Devolver los números encontrados
EXTRAENUM = numeros

End Function

Utilizando esta nueva función podremos analizar el valor de una celda carácter por carácter y extraer todos los valores numéricos contenidos en ella. En la siguiente imagen puedes observar algunos ejemplos de uso de la función recién creada:

Función VBA para extraer números de una celda

Es importante mencionar que el resultado de nuestra nueva función es una cadena de texto y por eso en la imagen anterior vemos el valor de las celdas de la columna B alineados a la izquierda. Si queremos convertir inmediatamente en número el resultado de la función EXTRAENUM, entonces podemos multiplicarlo por uno.

Extraer de una celda todos los valores numéricos

Puedes notar la diferencia con el resultado anterior porque en este caso los valores están alineados a la derecha indicando que Excel los ha reconocido como valores numéricos y están listos para realizar cualquier cálculo con ellos.

Puedes descargar el libro de Excel que he utilizado en la creación de la nueva función para extraer números en Excel y probarla con tus propios datos. Si quieres leer un poco más sobre cómo extraer datos de una celda utilizando funciones de Excel te recomiendo leer el artículo Extraer contenido de una celda en Excel.

41 pensamientos en “Macro para extraer números de una celda

  1. Heraclio Cabiedes

    Cuando se sabe, las cosas se vuelven fáciles… Su información nos permite ir descubriendo y haciendo fácil, lo difícil… Gracias…

    Responder
  2. Eduardo

    Genial Master!!!, gracias por este gran aporte.

    Saludos cordiales.

    Responder
  3. MARCOS

    muchas gracias por tus enseñanzas

    Responder
  4. SERGIO

    nuevamente mis felicitaciones por tus acertadas aportaciones

    Responder
  5. Paulina

    No puedo localizar la función de EXTRAENUM en la versión en inglés de mi office… ¿me ayudas? ¿tiene algún otro nombre?

    Responder
    1. Moisés Ortíz Autor

      Hola Paulina, EXTRAENUM no es una función propia de Excel, es una función que yo desarrollé y su código es el que está mostrado en este artículo. Por lo tanto no existe ninguna equivalencia.
      Para poder utilizar esta función debes tener algunos conocimiento de VBA ya que es necesario copiar el código dentro de un Módulo del proyecto VBA de tu archivo Excel.

      Responder
  6. Victor

    Gracias por la información, me será de mucha utilidad.

    Responder
  7. Juan Hernandez Diaz

    Muy interesante esta duplicación para extraer números de una celda,

    Gracias por su aporte

    Responder
  8. Horacio Carmona

    Exelente Moy, simplemente exelente, gracias!!!

    Responder
  9. Eduin

    Me parece excelente esta función, ya que muchas veces nos rompimos el coco pensando y buscando cómo extraer un numero único de una celda.
    Gracias por su amable aporte

    Responder
  10. Inocencio Mtz

    Excelente método. Pero desconozco los términos para porder programar con VBA y aprovechar adecuadamente estas funciones.
    Gracias y saludos.

    Responder
  11. erick flores

    admiro mucho tu trabajo y te mando muchas felicitaciones por todo lo que haces
    tengo una observacion veo que en este ejemplo mandas a llamar a la funcion =EXTRAENUM(A3) * 1 , me imagino que lo multiplicas por 1 para que el valor se haga numerico
    que inconveniente tendria si al declarar la funcion la pones que devuelva enteros
    Function EXTRAENUM(cadena As String) As Integer

    saludos

    Responder
    1. Moisés Ortíz Autor

      Hola Erick, no hay ningún inconveniente y sería muy buena mejora. Saludos.

      Responder
  12. kilder

    muy buen aporte, esperamos tener mas informacion al respecto

    Responder
  13. Reyes Dominguez

    No cabe duda, me sacaste de un apuro, Gracias y Saludos.

    Responder
  14. Adan Garcia

    Exelente metodo es importante saber esta funcion como extraer un numero de una celda muy buena
    Muchas gracias por su ayuda

    Responder
  15. luis proudinat

    excelente muchas gracias sus aportes me han ayudado de manera increíble

    Responder
  16. Robert Abad

    Cada vez que veo esos ejemplos me doy cuenta que no se nada

    Responder
  17. oscar chang

    excelente información, saludos cordiales. muchas gracias.

    Responder
  18. lita22

    Muy interesante y practico. les agradezco mucho por su aporte

    Responder
  19. Inocente a

    Excelente, quisiera conocer sobre las tablas dinámicas

    Responder
  20. ezequiel

    exelente gracias por compartir

    Responder
  21. Carlos Gomez

    Excelente aporte, muchas gracias!

    Responder
  22. Luis Hector

    Muchas gracias por compartir tus conocimientos!

    Responder
  23. jessika

    Excelente Gracias, esperando otra publicacion

    Responder
  24. Velvet

    Cuál es el macro para convertir un valor en letras, por ejemplo, tenemos $385.00 y necesito que en otra casilla diga “trescientos ochenta y cinco dolares exactos”.
    Gracias!

    Responder
  25. Xavier

    Excelente aportación por sencilla y util y de nivel avanzado en Excel pero básico en VBA. Me encaja perfectamente.
    Espero con interés nuevas aportaciones.
    Muchas gracias.

    Responder
  26. Marcelo Liascovich

    gracias por linda macro y fácil de entender

    Responder
  27. Antonio Castan

    Muy buena explicación, Gracias.

    Responder
  28. Jesús

    Muy buen artículo.

    Solo me surge una duda con la macro, si yo tengo 0547 canada y solo quiero que me traiga 547 como le indico a la macro que el cero solo al inicio es no es número. Para que si tengo 1203 eu si me traiga el 1203.

    Gracias

    Saludos

    Responder
    1. Moisés Ortíz Autor

      Hola Jesús, la macro utiliza la función ISNUMERIC para saber si el carácter es un número así que no podríamos modificar su comportamiento. Lo mejor será que una vez que se han extraído los números evalúes el primer carácter y en caso de ser un 0 entonces removerlo.

      Puedes hacer el cambio dentro de la macro o fuera de ella con una fórmula de Excel como la siguiente:
      =SI(IZQUIERDA(A1,1) = “0″, DERECHA(A1,LARGO(A1)-1), A1)

      Responder
  29. Carlos

    Muchas gracias por compartir tus conocimientos que son de gran ayuda.

    Responder
  30. strauss

    muchas gracias por estos estupendos tutoriales en excel, en verdad sin fantásticos!!!!!! en verdad, muchas, muchas gracias

    Responder
  31. Ivan

    Muy buen aporte, muchas gracias por facilitarnos su conocimiento.

    Responder
  32. Jaime Martinez

    Muy bueno, gracias por todos sus aportes.

    Responder
  33. CHRISTIAN MEDINA

    Muchas Gracias por el aporte me ha sacado de un apuro…….

    Responder
  34. Fernando

    Muchas Gracias, me fue de mucha ayuda esta información.

    Responder
  35. LUIS

    MUY BUEN APORTE ME SIRVE MUCHO ES LO QUE NECESITO GRACIAS

    Responder
  36. Ernesto

    Muy bueno, gracias por compartir.

    Responder
  37. Javier Ortiz Quintero

    Excelente aporte!! Gracias

    Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>