Lección 4. Selección de celdas y rangos. Uso de variables y asignación de valores a una celda.

Aprende a programar en Visual Basic

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.

 


10 comentarios

  1. Avatar Ricardo Fajardo dice:

    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.

    • Avatar Fito dice:

      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.

  2. Avatar Leandro dice:

    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

    • Avatar Fito dice:

      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

  3. Avatar Juan Crespo dice:

    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?

  4. Avatar Francisco González López dice:

    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.

    • Avatar Fito dice:

      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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.