Lección 4: Seleccionar celdas y rangos en una macro. Usar variables y asignar valores a una celda.

Escrito por Administrador

22 de septiembre de 2021

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:

Cells(4,"B").Select

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:

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, 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.

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. Borrar determinadas celdas.

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.

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.

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.

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

  1. Avatar

    Enhorabuena por la web. Información muy útil. Ya he hecho varias consultas y siempre consigues resolver mis dudas. Gracias!

    Responder
    • Avatar

      Gracias por tus palabras Rocío. Por aquí ando si tienes cualquier duda.

      Responder
      • Avatar

        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.

        Responder
        • Avatar

          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.

          Responder
          • Avatar

            Muchas gracias, así se hará.

Enviar un comentario

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.

« L3. Función ScreenUpdate en una macro.

L5. Operaciones matemáticas en macros. »

Categorías

marzo 2024
LMXJVSD
 123
45678910
11121314151617
18192021222324
25262728293031

Debates en el foro

Avatar
Formularios con ADO

Contacto