lunes, 27 de abril de 2015

Trucos con VBA: Obtener el valor de una celda y usando rangos


Desde hace varios años, he desarrollado macros en Excel, desde formularios muy sencillos, hay herramientas complejas que evalúan mensualmente mas de 10 millones de datos, con conexiones SQL a bases de datos externas.
Ante esto, pues he venido aprendiendo varios tips y trucos en VBA, y me decidí compartirlo poco a poco, o como diría Jack el destripador: por partes...

Empezaré con cosas muy sencillas y poco a poco iré complicándolo:

Obtener valor de una celda

Cells(4,5)=23
x = Cells(4,5)+1
Este ejemplo inserta el valor 23 en la celda de la fila 4 y columna 5.  Luego la variable x toma ese valor y le suma 1.  Cabe añadir que cada vez que llamamos una celda, una cantidad muy grande de código de Excel es invocada, de modo que si piensas trabajar con muchas celdas o muchas veces con la misma celda, es mejor que pases los valores a variables, en lugar de llamar a la celda en sí misma.
Cells(2,3).Select
Selection.HorizontalAlignment = xlCenter
Selection.VerticalAlignment = xlCenter
En este ejemplo, la celda de la fila 2 columna 3 es seleccionada, y la selección luego es objeto de centrado vertical y horizontal usando Selection.

Usando rangos

Pasar de la notación de fila y columna a la de celdas suele ser un poco incómodo.  Normalmente para seleccionar un rango usaríamos algo como esto:
Range("A5:B8").Select
Como has visto, lo que está procesando la función Range() entre comillas es una hilera de caracteres. Para efectos de escribir código, podemos usar esta expresión equivalente:
Range(Cells(5,1),Cells(8,2)).Select
Espero que les sirva.
Saludos

Ing. Enrique Neciosup Morales