Descarga el Diccionario de funciones ¡Gratis! Suscribirme

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.