En esta cuarta lección, vas a aprender a seleccionar celdas y rangos en una macro, a usar distintos tipos de variables y a asignarle valores a las mismas. Comenzamos!
Para seleccionar una sola celda, la manera más sencilla es utilizando el comando:
Cells(x,y).Select
Donde x e y son las coordenadas de la celda hacia donde queremos apuntar. Por ejemplo, si queremos seleccionar la celda B4, escribiremos:
Cells(4,2).Select
O también:
Una vez que ya sabemos seleccionar celdas en una macro, vamos a aprender como seleccionar un rango de celdas.
Range(Cells(a,b),Cells(c,d)).Select
Donde a y b son las coordenadas de la primera celda del rango, y c y d las coordenadas de la última celda del rango. Por ejemplo, si queremos seleccionar el rango desde B4 hasta C5, escribiremos:
Range(Cells(4,2),Cells(5,3)).Select
O también:
El primer método es más complejo y lo usaremos para rangos de celdas variables. La última forma es más sencilla y la usaremos para rangos fijos, pero tranquilo que lo veremos más adelante, todo a su debido tiempo.
Por otro lado, te voy a enseñar los dos tipos de variables más utilizados, integer y string.
Las variables integer son de tipo entero y se utilizan para almacenar números, mientras que las string son de tipo cadena de texto y se usan para almacenar texto.
Vamos a digerir todo esto con un ejemplo.
En primer lugar, crea un libro nuevo de Excel, abre el editor VBA, inserta un módulo y escribe lo siguiente:
Macro 1. Copiar el contenido entre celdas usando variables.
'Macro que copia el contenido de las celdas A1 y A2, en F4 y F5
Application.ScreenUpdating = False
Dim numero As Integer
Dim texto As String
numero = Cells(1, 1).Value
texto = Cells(2, 1).Value
Cells(4, 6).Value = numero
Cells(5, 6).Value = texto
Application.ScreenUpdating = True
End Sub
Lo primero que hemos hecho en esta macro es desactivar la actualización de la pantalla como vimos en la lección anterior.
A continuación, declaramos las variables. Esto se hace de la siguiente manera:
Dim nombredelavariable as tipovariable
En nuestro caso, declaramos la variable numero como entero y la variable texto como cadena de caracteres.
Dim numero as integer
Dim texto as string
En las dos siguientes líneas, asignamos el valor de las celdas A1 y A2 a las dos variables que acabamos de declarar.
numero = Cells(1, 1).Value
texto = Cells(2, 1).Value
Estos valores almacenados en las variables los vamos a traspasar a las celdas F4 y F5:
Cells(4, 6).Value = numero
Cells(5, 6).Value = texto
Por último, volvemos a activar el refresco de pantalla.
Vamos a crear una segunda macro para borrar las celdas F4 y F5. Inserta un nuevo módulo y escribe lo siguiente:
Macro 2. Borrar determinadas celdas.
'Macro para borrar las celdas F4 y F5
Range("F4:F5").ClearContents
End Sub
Para borrar el contenido de una celda, usamos la característica ClearContents junto con la selección del rango:
Ahora vamos a cerrar el editor VBA y creamos dos botones, uno con el nombre “Trasladar” asociado a la macro “Leccion4_1” y otro con el nombre “Borrar F4 y F5” asociado a la macro “Leccion4_2”.
Escribe en la celda A1 el número 8 y en A2 la palabra “perro”. Debería quedarte algo así.
Si pulsas el botón “Trasladar” verás como el contenido de A1 y A2 se copia en F4 y F5 utilizando las variables “numero” y “texto” que hemos creado.
Si pulsas el botón “Borrar F4 y F5” se borra el contenido de estas dos celdas y volvemos a la situación inicial.
En el ejemplo de hoy quería explicarte el funcionamiento de las variables, pero también podíamos haber resuelto este ejercicio sin usar variables de la siguiente manera:
Macro 3. Copiar el contenido entre celdas sin usar variables.
'Macro que copia el contenido de las celdas A1 y A2, en F4 y F5 (sin usar variables)
Application.ScreenUpdating = False
'Dim numero As Integer
'Dim texto As String
'numero = Cells(1, 1).Value
'texto = Cells(2, 1).Value
Cells(4, 6).Value = Cells(1, 1).Value
Cells(5, 6).Value = Cells(2, 1).Value
Application.ScreenUpdating = True
End Sub
Aquí asignamos el valor de la celda A1 directamente a la celda F4, y de la A2 a la F5 sin usar variables intermedias.
Sin embargo, si ejecutas la macro, verás que tienes el mismo resultado que con la macro “Leccion4_1”.
Finalmente, recalcar que he puesto el símbolo ' delante de los comandos que no quiero que se ejecuten en la macro “Leccion4_1” . Los podía haber borrado, pero a veces, es útil colocarle la comilla y deshabilitarlo por si en un futuro nos puede hacer falta. Sobre todo si estamos depurando fallos de una macro, para ir aislando el código para poder identificar la parte del código que está mal.
Con esto llegamos al final de la cuarta lección, donde has aprendido a seleccionar celdas y rangos en una macro, y a asignar variables a una celda. Espero que te esté gustando el curso.
Por último, quiero invitarte a compartir tus dudas en los comentarios o en el foro. Intentaré ayudarte en todo lo que pueda, y así aprenderemos todos.
Nos vemos en el próximo capítulo.
Si te ha servido y quieres donar
Descarga el archivo del ejemplo
5 Comentarios
Enviar un comentario
« L3. Función ScreenUpdate en una macro.
L5. Operaciones matemáticas en macros. »
Enhorabuena por la web. Información muy útil. Ya he hecho varias consultas y siempre consigues resolver mis dudas. Gracias!
Gracias por tus palabras Rocío. Por aquí ando si tienes cualquier duda.
Muy buenas tardes.
Lo felicito por el contenido y la didáctica utilizada. Es de muy fácil comprensión.
Quiero hacerle un consulta y espero que ésta vía sea la adecuada.
Necesito crear un gráfico (tipo dispersión), donde los valores X e Y son rangos con nombres definidos que variaran según ciertas condicionales que se establezcan en la hoja. Es decir suponiendo que tengo 4 rangos para usarlos en el eje X llamados Ax, Bx, Cx y Dx y sus respectivos rangos para Y llamados Ay, By, Cy y Dy. Se desea que cuando se presente una condición A, se grafique Ax vs Ay, en cambio si se pasa a la condición B, grafique Bx vs By, y asi sucesivamente.
La idea era usar en combinación con macros, los contenidos de 2 celdas mediante la función indirecto() que contuvieran los nombres de los rangos X y Y, pero los gráficos no me aceptan ni nombres de rangos y mucho menos la función indirecto().
Espero no haber usado el medio inadecuado para ésta consulta y agradezco la ayuda que pueda brindar.
Hola Gustavo,
Claro que se puede realizar lo que tienes pensado mediante VBA. Si te parece, crea un hilo en el foro y añade un ejemplo sencillo para trabajar sobre él. Estaré encantado de ayudarte.
Saludos.
Muchas gracias, así se hará.