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.
¡¡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
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
Hola:
Tienes que programar un primer bucle que anide a todo, un for next y procesar así el rango que establezcas.
Saludos.