martes, 19 de mayo de 2015

Cómo hacer referencia a celdas en VBA Excel (I)


Cuando escribimos código Visual Basic for Applications (VBA) en Excel, una de las acciones más recurrentes es el hecho de referirnos a una celda o rango de celdas para hacer algo con ellas.

Por ejemplo, si necesito copiar una celda, primero debo hacer referencia a esa celda y después aplicar el método "Copy". También, si quisiera introducir un valor en esa celda, debería primero hacer referencia a ella y después utilizar la propiedad "Value" seguida del signo igual y del valor a introducir.



En definitiva, hacer referencias a celdas es de lo más frecuente en VBA. Así pues, veamos en este primer artículo de la serie "Cómo hacer referencia a celdas en VBA Excel..." varias formas de hacerlo que tienen en común la utilización de la propiedad "Range".

Utilizando "Range"

Range es uno de los nombres que se utilizan en VBA para referirse a una celda o un grupo de ellas. En los siguientes ejemplos, vamos a suponer que necesitamos seleccionar celdas (utilizaremos la propiedad "Select").


  • Utilizar "Range" con un texto que indica el rango, de la misma forma que se hace con una fórmula en Excel:
    • Range("A1").Select
                          Queda seleccionada la celda A1.
    • Range("A1:A4").Select
                 Queda seleccionado el rango A1:A4.
    • Range("1:1").Select
                 Queda seleccionada la fila 1.
    • Range("2:5").Select
                 Queda seleccionado el rango de filas que va desde la fila 2 hasta la fila 5.
    • Range("A:A").Select
                 Queda seleccionada la columna A.
    • Range("D:F").Select
                 Queda seleccionado el rango de columnas que va desde la columna D hasta la columna F.
    •  Range("A1:A4,B5:B8").Select
                           Véase que las comillas encierran todo lo que se considera un solo texto. El resultado es que quedan
                           seleccionados los rangos A1:A4 y B5:B8. Recordamos que la separación es una coma en VBA.

  • Utilizar "Range" con dos argumentos separados por una coma. El primero de los argumentos es la celda que está situada en el extremo superior izquierdo del rango que deseamos. El segundo argumento es la celda situada en el extremos inferior derecho:
    • Range("A1","C3").Select
                           Véase que las comillas encierran cada uno de los argumentos por separado. El resultado es que queda                               seleccionado el rango de celdas A1 hasta C3. Recordamos que la separación es una coma en VBA.
    • Range(ActiveCell,"C3").Select
                           Cada uno de los dos argumentos no tiene por qué ser una referencia en modo texto entre comillas, sino
                           que puede ser cualquier forma de hacer referencia a una sola celda, como por ejemplo la propiedad
                           "ActiveCell" (celda activa).

  • Utilizar "Range" combinado con la propiedad "Offset". La propiedad "Offset" tiene dos argumentos entre paréntesis. El primero de ellos hace referencia al número de filas que desplazamos el foco hacia abajo. El segundo de ellos hace referencia al número de columnas que desplazamos el foco hacia la derecha:
    • Range("A1").Offset(1,0).Select
                           Queda seleccionada la celda A2 (partiendo de la celda A1, desplazamos el foco una fila hacia abajo y
                           cero columnas hacia la derecha. Por último seleccionamos con la propiedad "Select").
    • Range("C1").Offset(0,-2).Select
                           Como vemos, es posible utilizar argumentos negativos para desplazar el foco hacia arriba o hacia la
                           izquierda.

Utilizando corchetes como forma abreviada: [ ]

          Range("A1").Select                         es igual que....            [A1].Select
          Range("A1:A5").Select                    es igual que....            [A1:A5].Select
          Range("A1:A5, C3:D8").Select        es igual que....            [A1:A5, C3:D8].Select
          Range("C1").Offset(0,-2).Select       es igual que....            [C1].Offset(0,-2).Select


Recordamos...

... que si queremos hacer referencia a rangos que no están en la hoja activa, debemos anteponer a las distintas formas de referencias que hemos visto el nombre de la hoja correcta. Por ejemplo:


          WorkSheets("Hoja1").Range("A1").Select

... o también...

          Hoja1.Range("A1").Select

¡¡Teniendo en cuenta que en esta última forma de expresión, Hoja1 se refiere al "CodeName" (nombre de código) de la hoja. Este "CodeName" lo podremos ver y modificar en la ventana "Propiedades" del editor de VBA.




Si desea llevar a la práctica todo lo que le hemos ofrecido en este artículo, puede asistir a nuestros cursos prácticos de Excel o puede solicitarlos in company:





No hay comentarios:

Publicar un comentario