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.
![](https://i0.wp.com/excelsignum.com/wp-content/uploads/2021/02/EXTRAER-DATOS-ESPECIFICOS-DE-UNA-CADENA-DE-TEXTO-CON-VBA.jpg?resize=1024%2C472&ssl=1)
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.
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
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.