Seleccionar Celdas y Rangos

Las Selecciones en VBA se manipulan por medio del objeto Selection que hace referencia a la selección actual.

Pero este objeto no crea la selección, sino que representa una selección creada previamente por medio de otras instrucciones.

20-Feb-2017

Seleccionar Celdas y Rangos

Uno de los objetos más utilizados para crear selecciones de celdas o rangos a través de las macros es el objeto Range junto con el método (instrucción) Select, que representa el rango que deseamos seleccionar.

Range(RangoASeleccionar).Select
  • RangoASeleccionar: Representa el rango que deseamos seleccionar. Se especifica encerrado entre dobles comillas y puede ser una referencia a una celda, a un grupo de celdas o a un nombre de rango. En todos estos casos las referencias se toman como absolutas.

Al ejecutar esta instrucción Excel seleccionará todas las celdas que se indiquen en el argumento RangoASeleccionar y ya podremos acceder o trabajar con ellas por medio del objeto Selection que se comentaba al principio.

Range("A1").Select -> Selecciona  la primera celda de la hoja.
Range("A1:B20").Select ->  Selecciona el rango A1:A20.
Range("DATOS_PRODUCCION").Select  -> Selecciona las celdas que forman el rango DATOS_PRODUCCION.

Si deseamos crear selecciones de rangos relativos a partir de una selección,  rango o celda actual, tendremos que utilizar el método Offset que nos permite indicar un desplazamiento de filas y columnas.

Expresión.Offset(NFilas, NColumnas)

Expresión Variable que representa un objeto Range.

  • NFilas: número que representa la cantidad de filas a desplazarse. Si el desplazamiento es hacia arriba el número se indicará en negativo.
  • NColumnas: número que representa la cantidad de columnas a desplazarse. Si el desplazamiento es hacia la izquierda el número se indicará en negativo.

Los desplazamientos hacia abajo o a la derecha se indican con números en positivo y los desplazamientos hacia arriba o a la izquierda con números negativos.

  • Crear una nueva selección con un desplazamiento de NFilas y NColumnas a partir de la selección actual.
Selection.Offset(NFilas, NColumnas).Select
  • Seleccionar la celda situada 2 filas hacia abajo y 5 columnas a la derecha de la selección actual y cambiarle el tipo de letra a ‘Times New Roman’, tamaño 14 y negrita.
Selection.Offset(2,5).Select
With Selection.Font
 .name="Times New Roman"
 .Size=14
 .Bold=True
End With

Crear una nueva selección con un desplazamiento de NFilas y NColumnas a partir de un rango.

Range(RangoASeleccionar).Offset(NFilas, NColumnas).Select
  • Seleccionar la celda situada 3 filas hacia arriba y 2 columnas a la derecha a partir de la celda F10 de la hoja actual.
Range("F10").Offset(-3,2).Select
  • Seleccionar la celda situada 3 filas hacia arriba y 2 columnas a la derecha a partir de la celda F10 de la hoja de nombre ‘Listados’ y escribir una fórmula que sume los números escritos en el rango B3:B30 de la hoja ‘Datos’.
WorkSheets("Listados").Activate
Range("F10").Offset(-3,2).Select
Selection.Formula="=SUM(Datos!B3:B30)"

Crear una nueva selección con un desplazamiento de NFilas y NColumnas a partir de la celda Activa.

ActiveCell.Offset(NFilas, NColumnas).Select
  • Seleccionar la celda situada 1 fila hacia abajo y 2 columnas a la izquierda a partir de la celda activa.
ActiveCell.Offset(1,-2).Select

Una vez seleccionadas, tendremos que hacer uso del objeto Selection para hacer referencia a las celdas que se han seleccionado y sobre ellas ejecutar cualquier orden que se nos ocurra: cambiar formatos, copiar datos, eliminar, introducir datos, escribir fórmulas, utilizarlo como origen para nuevas instrucciones, etc…

Celdas y Selecciones

Obtener la referencia de una celda

Cuando deseemos obtener la referencia de la celda sobre la que se está trabajando en formato absoluto, podremos consultar la propiedad Address de los objetos ActiveCell, Selection o Cells.

Expresión.Address

Expresión Variable que representa un objeto Range.

ActiveCell.Address -> Obtener la referencia absoluta de la celda activa
Selection.Address -> Obtener la referencia absoluta de la selección creada previamente
Cells(5,5).Address -> Obtener la referencia absoluta de la celda 5,5 ($E$5)

Obtener el valor de una celda

Cuando necesitemos obtener o establecer el valor de alguna celda de la hoja, utilizaremos la propiedad Value del objeto ActiveCell o Selection. También podemos obtener el valor de una celda utilizando la colección Cells de la hoja de cálculo.

Expresión.Value

Expresión Variable que representa un objeto Range (Range, ActiveCell, Selection, Cells).

En el caso de utilizar los objetos ActiveCell o Selection, primero tendremos que crear una selección con el objeto Range.

Si deseamos utilizar posteriormente ese dato para algún cálculo será necesario almacenarlo en una variable de trabajo.

  • Obtener el contenido de la celda activa y mostrárselo al usuario
MsgBox(ActiveCell.Value)
  • Obtener el contenido de una celda de la hoja y almacenarlo en una variable.
Dim Datos as Variant
Datos=Cells(10,5).Value

Range("E10").Select Datos=Selection.Value

Podemos obtener directamente el contenido de la celda utilizando la colección Cells o creando primero una selección para obtener después el contenido de la selección creada.

  • Establecer el valor de una celda de la hoja
' Establecemos como valor de la celda  E5 de la hoja activa el número 10
' y mostramos su valor (contenido de  la celda)
'-----------------------------------------
    
Cells(5, 5).Value = 10
MsgBox(Cells(5,5).Value)
  • Establecer el valor de una celda con el contenido de otra celda
' Seleccionamos la celda E10 de la  hoja activa,
' establecemos como valor el contenido  de la celda E5 de la hoja activa
' y mostramos su contenido
'-----------------------------------------

Range("E10").Select
Selection.Value = Cells(5, 5).Value
MsgBox (Selection.Value)
  • Obtener el contenido de una celda de alguna de las hojas del libro actual
' Mostramos el contenido de la celda  B4 de la hoja "Listados" del libro activo
'-----------------------------------------------------------------------------
MsgBox(Worksheets("Listados";).Cells(4, 2).Value)

' Seleccionamos la hoja  "Listados" del libro activo
' Seleccionamos la celda B4
' Mostramos su contenido utilizando el  objeto Selection creado
'----------------------------------------------------------------------
Worksheets("Listados").Activate
Range("B4").Select
MsgBox(Selection.Value)
  • Obtener el contenido de una celda de una hoja de alguno de los libros abiertos.
' Seleccionamos el libro  "Libro2.xlsx" de la colección de libros abiertos
' Seleccionamos la hoja  "Datos" del libro que hemos activado
' Seleccionamos la primera celda de la  hoja
' Establecemos como contenido de la  celda la frase "Primera Celda"
'-----------------------------------------
    
Workbooks("Libro2.xlsx").Activate
Worksheets("Datos").Select
Range("A1").Select
Selection.Value = "Primera  Celda"

Escribir fórmulas en las celdas

Para escribir fórmulas ya sean cálculos o funciones en las celdas de la hoja utilizaremos la propiedad Formula del objeto ActiveCell o Selection. También podemos escribir directamente fórmulas en una celda utilizando la colección Cells de la hoja de cálculo.

Expresión.Formula

Expresión Variable que representa un objeto Range.

En el caso de utilizar los objetos ActiveCell o Selection, primero tendremos que crear una selección con el objeto Range.

  • Escribir una fórmula en la celda activa
ActiveCell.Formula="=A1*B1"
  • Escribir una fórmula que contiene una función en la celda A2 de la hoja activa
Range("A2").Select
Selection.Formula="=SUM(B1:B20)"

Si se define la fórmula para un rango de varias celdas, se rellenan todas las celdas del rango con la fórmula.

  • Escribir el valor 10 en todas las celdas del rango B10:F30 de la hoja activa
Range("B10:F30").Select
Selection.Formula="10"