6 febrero, 2025

EXTRAER DATOS ESPECÍFICOS DE UNA CADENA DE TEXTO CON VBA

Hola a todos,

Este post servirá como respuesta a una consulta que me llegó ayer y que dice así:

Deseo extraer datos específicos de una cadena de números, por ejemplo si solo deseo los códigos postales que empiezan con 91 y los que empiezan con 31, de tal forma que durante la búsqueda busque este inicio y cuente la longitud de 5 caracteres y lo extraiga, así mismo haga una revisión de toda la cadena. Saludos

85546468851431050847946431115865489565917296545461691780374845691860

Pues bien, como podéis leer se trata de extraer datos de una cadena de texto, en este caso detectar números que comiencen por 91 y 31 y añadir 5 posiciones a partir de del primer número.

Pues bien, os propongo esta solución en VBA (que es el formato que me piden):

Sub OBTENER_CADENA()
    Dim MiCelda     As String, i As Long, nItem
    Dim MiCadena As String, miArray As Variant, Matriz As Variant, cod As String
    MiCelda = Cells(2, 1)
    'buscamos números en la cadena
    For i = 1 To Len(MiCelda) Step 1
        nItem = Mid(MiCelda, i, 1) & Mid(MiCelda, i + 1, 1)
        'Si los hallamos añadimos siguientes números.
        If nItem = "31" Or nItem = "91" Then
            cod = Mid(MiCelda, i, 5)
            MiCadena = Trim(MiCadena & " " & cod)
            Matriz = Split(MiCadena, " ")
            ReDim miArray(0 To UBound(Matriz))
            For j = 0 To UBound(Matriz)
                Cells(2, j + 2) = Matriz(j)
            Next j
        End If
    Next
End Sub

Como podéis observar es un código muy sencillo que con apenas unas funciones tenemos los datos que estamos buscando, en este ejemplo este sería el resultado.

Solo tenemos que pulsar el botón y se mostrará la información en las columnas de la derecha. Obviamente si queremos modificar el número de caracteres a extraer y el número por el que comenzar a buscar, lo haremos modificando el código de la rutina.

Sé que es un ejemplo muy genérico y específico, pero me gusta compartir mi solución con todos vosotros por si os resulta de interés o utilidad.

Puedes descargar el archivo pulsando aquí: EXTRAER DATOS ESPECÍFICOS DE UNA CADENA DE TEXTO CON VBA

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Comparte este post

4 comentarios en «EXTRAER DATOS ESPECÍFICOS DE UNA CADENA DE TEXTO CON VBA»

  1. Hola, de antemano te agradezco el tiempo que dedicas a estos comentarios y solicitudes, me ha servido muchísimo el código que escribiste, solo tengo una duda y me pudieras ayudar, si deseo procesar un rango de registros que están en la columna «A» y hasta la fila 350, como podría ir la sentencia.
    Saludos

  2. como se solucionaría el siguiente caso : la cadena es así: 310591031678104697431546 si el código real es 31059 también extraerá 91031, compartiendo ambos el 9 (algo así como siameses ) espero que me halla dado a entender

    1. No entiendo el problema, la macro está programada para extraer números que empiecen por 91 o 31. La rutina y en la petición no se indica que no puedan estar dentro de los 5 dígitos. Habría que modificar la macro para ese cometido, cuando tenga un momento intento hacerlo.

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies