Para poder acceder a las celdas con VBA se pueden usar Range, Cells y Offset, veamos como se utilizan estas instrucciones.
Recordemos que la mayor parte del trabajo que se realiza en Visual Basic Aplicaciones involucra a celdas y rangos de una hoja de cálculo. Además, un objeto Range está contenido en un objeto Worksheet y se compone de una sola celda o rango de celdas en una sola hoja de cálculo.
Las instrucciones a emplear son:
Range: objeto de clase Worksheet o Range.
Cells: es un objeto Worksheet.
Offset: es un objeto Range.
¿Cómo usar Range?
Asignar un valor usando Range
La instrucción que sigue simplemente introduce un valor en una celda especificada.
En este caso, coloca un 1 en la celda A1 de la Hoja1 del libro de trabajo activo:
Worksheets("Hoja1").Range("A1").Value = 1
Asignar un valor usando Range, y nombre de celda
La propiedad Range también reconoce nombres definidos en los libros. Por consiguiente, si una celda tiene un nombre "MiCelda" se puede usar la siguiente instrucción para introducir un valor en dicha celda con nombre:
Worksheets("Hoja1").Range("MiCelda").Value = 1
Asignar un valor en varias celdas
El siguiente ejemplo se coloca el mismo valor en un rango de 20 celdas de la hoja activa:
ActiveSheet.Range("A1:B10").Value = 100
A continuación se presenta un ejemplo que produce exactamente el mismo resultado
que el ejemplo anterior.
Range("A1","B10") = 100
Con esta sintaxis, el primer argumento es la celda de la parte superior izquierda del rango y el
segundo es la celda de la parte inferior derecha del rango.
Sin embargo, la referencia a la hoja se ha omitido, por lo que se asume que la hoja es
la activa. La propiedad de valor también se ha omitido, por lo que se asume como propiedad predeterminada "Value".
¿Cómo usar Range en una intersección?
A continuación se muestra un ejemplo que usa el operador intersección de rango de
Excel (un espacio) para volver a la intersección de dos rangos. En este caso, la
intersección es una sola celda: C6. Por consiguiente, esta instrucción introduce el valor 100 en la
celda C6:
Range("C1:C10 A6:E6") =100
¿Cómo usar Range para varias celdas?
Si, en el siguiente ejemplo introduce el valor 100 en cinco celdas, es decir, un
rango no contiguo. La coma sirve como operador de unión.
Range("A1,A3,A5,A7,A9") = 100
¿Cómo usar Cells en VBA?
Otro modo de referenciar un rango es usar Cells. Al igual que la propiedad Range se puede usar la propiedad Cells en objetos Worksheet y objetos Range.
La sintaxis es:
objecto.Cells(rowindex, columnlndex)
Para asignar un valor podemos usar
Worksheets("Hoja1").Cells(1,1) = 200
En este caso en la Celda A1 de la Hoja1 se está colocando el valor 200
Para colocar un valor en la hoja activa se puede usar:
ActiveSheet.Cells(3, 4) = 7
Cells(3, 4) = 7
¿Cómo usar Offset en VBA?
La propiedad Offset (igual que las propiedades Cells y Range) también devuelve un objeto Range. Pero al contrario de los otros dos métodos vistos anteriormente, la propiedad Offset sólo se aplica a un objeto Range y no a otra clase. Su sintaxis es la siguiente:
object.Offset (rowOffset, columnOffset)
La propiedad Offset toma dos argumentos que corresponden a la posición relativa de la celda superior izquierda de un objeto Range. Los argumentos pueden ser positivos (abajo o derecha), negativos (arriba o izquierda) o cero.
El ejemplo que sigue introduce un valor 300 en la celda inmediatamente inferior a la celda activa:
ActiveCell.Offset (1, 0).Value = 300
El siguiente ejemplo introduce el valor 300 en la celda inmediatamente superior de la celda activa:
ActiveCell.Offset (-1, 0).Value = 300
A propósito, si la celda activa está en la fila 1, la propiedad Offset del ejemplo anterior genera un error porque no puede devolver un objeto Range que no existe.
Ejemplo de uso de offset:
Sub Macro400()
ActiveCell = 7
ActiveCelf.Offset(l, 0) = 2
ActiveCell.Offset(2, 0) = 3
End Sub