Lección 4. Selección de celdas y rangos. Uso de variables y asignación de valores a una celda.
En esta cuarta lección, vas a aprender a seleccionar celdas y rangos, 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:
Cells(4,"B").Select
Para seleccionar un rango de celdas, escribimos:
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:
Range("B4:C5").Select
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. 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
Sub Leccion4_1()
'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
Sub Leccion4_2()
'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:
Range("F4:F5").ClearContents
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.
Aunque en el ejemplo de hoy quería explicarte el funcionamiento de las variables, podíamos haber resuelto este ejercicio sin usar variables de la siguiente manera:
Macro 3
Sub Leccion4_3()
'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.
Si ejecutas la macro, verás que tienes el mismo resultado que con la macro “Leccion4_1”.
Date cuenta que he puesto el símbolo ' delante de los comandos que aparecían en la macro “Leccion4_1” que no quiero que se ejecuten. Los podía haber borrado, pero a veces, es útil colocarle la comilla y deshabilitarlo por si en un futuro nos puede hacer falta o 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. Espero que te esté gustando el curso y que me plantees cualquier duda que te surja. También puedes proponerme macros que te interese desarrollar y las voy incluyendo en el temario, soy todo oídos. Nos vemos en el próximo capítulo.
Deja una respuesta Cancelar la respuesta
Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.
10 comentarios
Hola,
Tengo el siguiente problema, quiero crear una macros para que se puedan copiar columnas de diferentes libros y pegar a un libro madre.
Como los datos a copiar varían en la columna que se encuentran en queda libro, estoy tratando establecer los rangos a copiar y los rango donde pegar como variables, pero se me complica mucho.
Ejemplo:
Rango(«B1:B6»).Select
Lo que trato de hacer: Rango(«Variable A:Variable B»)
Pero al tener que poner comillas las variables dejan de funcionar como ellas y se vuelven en el texto literal.
Gracias por su ayuda,
Saludos.
Hola Ricardo,
Cuando nos referimos a variables dentro del comando Cells, no hay que añadir comillas. Por ejemplo,
Sub Botón1_Haga_clic_en()
a = 2
b = 2
Cells(a, b) = 34
End Sub
Este programita escribirá el número 34 en la celda (2,2)
Espero haberte ayudado.
Saludos.
Hola. Se que esto no funciona:
Sub Consumir_prueba1()
‘ Consumir_prueba1 Macro
Sheets(«Min Bco»).Select
ActiveCell(3, «AC»).Select
Selection.Copy
ActiveCell(indirect(4,»AC»), indirect(4,»AD»).Select
ActiveSheet.Paste
End Sub
Lo que estoy tratando de hacer es que copie el valor de una celda daterminada y lo pegue en una celda cuyas coordenadas están en las celdas AD4 (fila) y AC4 (Columna).
Gracias!!!
Saludos
Hola Leandro, es más sencillo que todo eso. Prueba con este código:
Sub Copiar()
Cells(3, «C»).Copy
a = Cells(4, «C»)
b = Cells(4, «D»)
Cells(a, b).PasteSpecial
End Sub
Hola, yo tengo un problema:
Quiero hacer una macro para insertar gráficas, ya hice un macro para esto pero con celdas contiguas, es decir, con un rango que va de A1:C9 por ejemplo, ahora quiero modificar este código para celdas no contiguas, es decir, que los datos estan separados, por ejemplo, que el nombre de las celdas están en C3:F3 y los datos están en C9:F9.
Creen que podrían ayudarme?
Hola Juan,
Pásame el archivo si quieres y lo vemos detenidamente. Saludos.
Hola,
Lo que preguntaba era lo siguiente; quiero seleccionar celdas o rangos pero en vez de poner los números de filas y columnas, hacerlo con variables previamente declaradas y asignadas el valor que me interese.
gracias por las lecciones aunque no me hayan servido.
Hola Francisco.
Lo que comentas se explica en temas posteriores, para lo cual deberías suscribirte al curso.
De todas maneras, sería tan sencillo como declarar las variables, solicitar la introducción de valores a través una inputbox y realizar la selección,
Dim a As Integer
Dim b As Integer
a = Application.InputBox(«Enter a number»)
b = Application.InputBox(«Enter a number»)
Cells(a, b).Select
Saludos.
PREGUNTO:
YO PUEDO ESTAR EN CUALQUIER CELDA. POR EJEMPLO PUEDO APLICAR EL MACRO EN LA CELDA EN LA QUE YO ESTOY ?
Hola Victor,
Claro, sin ningún problema. Cuéntame qué es lo que necesitas exactamente e intentaré ayudarte. Saludos.