Saltar al contenido
PROGRAMAR EN VBA MACROS DE EXCEL

Como recorrer una cadena de caracteres


.

En varios post se ha apelado a los bucles para recorrer filas en busca de datos o para escribir datos en celdas, ya sea con la estructura For … Next; While … WendDo … Loop; For Each … Next todas las anteriores estructuras permiten realizar un bucle para recorrer datos u objetos.

En esta oportunidad voy a mostrar como recorrer una cadena de texto o string; una cadena de texto o string se puede definir como un conjunto de letras, espacios, símbolos; es decir por ejemplo si en la celda A1 tengo el siguiente dato «En programarexcel.com podrás descargar cientos de macros gratis»; todo lo encerrado entre comillas se puede denominar una cadena de texto o string en este caso es una frase compuesta por varias palabra y dichas palabras por varios caracteres y espacios, la macro permite recorrer la cadena de caracteres o string, es decir cada uno de las letras, número o espacios que forman la cadena o string.

Antes de seguir recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  
Es necesario descargar el archivo de ejemplo para poder entender en forma más sencilla lo que aquí se explica, es gratis y no tiene ninguna restricción, con dicho ejemplo podrás como dice el post recorrer una cadena de caracteres mediante una macro, ello en pos de buscar algún carácter en especial o encontrar una subcadena de caracteres en el string principal.

En el libro de ejemplo se podrá observar un la columna B un listado de Compañias Aseguradoras, cuyo nombre se encuentra en MAYÚSCULA; el objeto del ejemplo es recorrer la cadena de caracteres de cada una de las filas donde se encuentra el nombre de la compañia aseguradora, hasta la última fila con datos; determinando la macro al recorrer la cadena o string si el carácter coincide con la letra «A» Mayúscula; en caso de coincidir el carácter, que el bucle recorre en ese momento, con la letra mencionada la cambia por «a» MINÚSCULA.

En otras palabras la macro recorrerá el nombre de todas las compañías aseguradoras que están en la columna B, cambiando la letra «A» mayúscula por la letra «a» minúscula, en el ejemplo se podrá aprender como determinar el largo de una cadena con el siguiente código:

Lar = Len(Tex)

Como extraer caracteres de una cadena y asignarlos a una variable como por ejemplo:

Car = Mid(Tex, i, 1)

Como reemplazar texto son la siguiente función de VBA:

a.Range(«B» & x) = Replace(Tex1, Car, «a»)

Como cambiar un texto a Mayúscula, en este ejemplo no figura, pero cambiar a minúscula se usa LCase en vez de Ucase:

Range(«B» & x) = UCase(Range(«B» & x))

Aunque en este ejemplo no se usa es necesario cuando se trabaja con cadena de textos saber ciertas funciones que permitirán trabajar con cadenas de texto o string, si quieres profundizar visita el link que mostrará un tutorial sobre cadenas de texto o string.

Para lograr  cambiar la letra «A» mayúscula por la «a» minúscula, se realiza un bucle con la estructura For … Next, determinando el largo de la cadena de texto y recorriendo del primer al último carácter determinado por la función Len que cuenta la cantidad de caracteres que tiene la cadena.

El bucle se hace de la siguiente manera.

For i = 1 To Lar
Car = Mid(Tex, i, 1)
Tex1 = Mid(Tex, 1, i)
If Car = «A» Then
‘forma más fácil de reemplazar todos los caracteres en la cadena de texto
‘a.Range(«B» & x) = Replace(Tex, «A», «a»)
a.Range(«B» & x) = Replace(Tex1, Car, «a»)
End If
Next i
Next x

El bucle al recorre de la primer a la última carácter de la cadena de texto en la variable Car se asigna el carácter que se va recorriendo en ese momento para ello con la función Mid se va extrayendo el carácter que recorre el bucle en ese momento; la variable Text1 va acumulando todos los caracteres recorridos hasta el momento; posteriormente con If se determina si el carácter que está en la variable Car es = a «A» en caso positivo reemplaza en la cadena Text1 (que acumula todos los caracteres recorridos por el buce), la letra «A» por «a»; luego sigue haciendo lo mismo hasta el último carácter y hasta la última fila con datos, recomiendo bajar archivo y ver vídeo tutorial sobre el ejemplo presentado.

El vídeo que sigue muestra una explicación más detallada y gráfica de la macro presentada, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como  por ejemplo Recorre fila buscando y comparando datos de dos columnas en hojas distintasbuscar en listbox mientras escribes en textbox, como crear una factura o sale invoice y grabar guardar PDF XLS y enviar por mailconectar Excel con Access y muchos ejemplos más.


if (payload.eventType == ‘subscribe’) {
// Add code to handle subscribe event.
} else if (payload.eventType == ‘unsubscribe’) {
// Add code to handle unsubscribe event.
}
if (window.console) { // for debugging only
window.console.log(‘YT event: ‘, payload);
}
}

Otros vídeos que pueden ser de interés:

   

Código que se inserta en un módulo
Sub RecorreCaracteres()
Dim Tex As Variant, Car As Variant, Lar As Integer
Application.ScreenUpdating = False
On Error Resume Next
Set a = Sheets(«Hoja1»)
uf = a.Range(«A» & Rows.Count).End(xlUp).Row
For x = 2 To uf
Tex = a.Range(«B» & x)
Lar = Len(Tex)

For i = 1 To Lar
Car = Mid(Tex, i, 1)
Tex1 = Mid(Tex, 1, i)
If Car = «A» Then
‘forma más fácil de reemplazar todos los caracteres en la cadena de texto
‘a.Range(«B» & x) = Replace(Tex, «A», «a»)
a.Range(«B» & x) = Replace(Tex1, Car, «a»)
End If
Next i
Next x
Application.ScreenUpdating = True
End Sub

Sub mayus()
uf = Range(«A» & Rows.Count).End(xlUp).Row
For x = 2 To uf
Range(«B» & x) = UCase(Range(«B» & x))
Next x
End Sub

Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


.

If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.

Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends