Manipular celdas de Excel
Objetivos del capítulo
Objeto elemental de Excel, las celdas serán su primer paso en la programación VBA de objetos de Excel.
Sin recorrer todas las acciones posibles con las celdas en VBA, este capítulo le permitirá conocer las principales propiedades y métodos de los objetos elementales que son las celdas y los rangos de celdas en Excel.
A continuación, verá ejemplos de los códigos más frecuente antes de terminar validando sus nuevos conocimientos mediante ejercicios.
Objeto y variable Range
Cuando creó su primera macro usando la grabadora de macros en el capítulo La grabadora de macros, ya había conocido el objeto Range.
Objeto Range
El tipo de datos Range es el primero que se descubre en el estuche de objetos VBA de Excel.
Este objeto puede representar una sola celda, un rango de celdas o una serie de celdas no contiguas. Al utilizar este objeto, la sintaxis general es la siguiente:
Range(Dirección)
Ejemplo 1: sintaxis general del objeto Range
Dependiendo de sus necesidades, la dirección que se pasa como una cadena puede representar la celda o celdas que desee manipular:
Range("A1")
Range("C2:D5")
Range("A1,B2,G3")
Range("NombreDeLaCelda")
Ejemplo 2: posibilidades de sintaxis para el objeto Range
Variable de tipo Range
Al igual que ha hecho con las cadenas, los valores numéricos o los booleanos, usted puede trabajar con el objeto Range a través de una variable. Esta sección le indica cómo declarar, asignar y luego manipular este objeto.
Declaración
La declaración de una variable Range es similar a las vistas hasta ahora.
Dim SuCelda As Range
Ejemplo 3: declaración de una variable de tipo Range
Es diferente para la asignación de valores.
Asignación
Contrariamente a los tipos de datos básicos, como las cadenas o los valores numéricos, la asignación para el tipo de datos...
Objeto Cells
Existe un objeto aún más pequeño que el objeto Range, que también le permite manipular celdas; se trata del objeto Cells. Es más pequeño porque, mientras que el objeto Range permite gestionar un rango de celdas, el objeto Cells se limita a una sola celda. Por ejemplo, no puede referirse al rango de celdas A1:D3 con un objeto Cells.
Para utilizar el objeto Cells, existen dos sintaxis posibles, cada una de las cuales proporciona al objeto Cells una fila y una columna, es decir, las coordenadas de la celda.
'Sintaxis general
Cells(indiceFila, indiceColumna)
'Sintaxis con valores numéricos solamente
Debug.Print Cells(3,4) ' muestra el contenido de la celda D3
'Sintaxis con un valor numérico para la fila y una cadena
para la columna
Debug.Print Cells(5, "F") 'muestra el contenido de la celda F5
Ejemplo 5: diferentes sintaxis con el objeto Cells
El objeto Cells puede utilizarse con una variable de tipo Range.
Dim o As Range
Set o = Cells(1,3)
Ejemplo 6: usar una variable de tipo Range para el objeto Cells
Los tipos de datos Range y Cells compartirán propiedades y métodos comunes.
Algunas celdas particulares: ActiveCell, Selection y Target
Cuando se utiliza la grabadora de macros, también pueden aparecer algunas palabras clave específicas para definir una celda o un rango de celdas. Esta breve sección tiene como objetivo explicarle los puntos principales.
Celda activa: ActiveCell
Cuando hace clic en una celda, se dice que la está activando. Esta celda activa está representada por un objeto nativo en VBA: ActiveCell. Este objeto, de tipo Range, representa la celda activa en su libro de trabajo.
A continuación, se muestra un ejemplo de celda activa:
![images/cap13_img_03.png](https://www.eni-training.com/download/8085119a-0c84-4016-9951-8b65c868e345/images/cap13_img_03.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Cuando se selecciona un rango de celdas, la celda desde la que se efectúa la selección es la celda activa.
![images/cap13_img_04.png](https://www.eni-training.com/download/8085119a-0c84-4016-9951-8b65c868e345/images/cap13_img_04.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Por último, si realiza una serie de selecciones de celdas no adyacentes, la última celda activada será la activa.
![images/cap13_img_05.png](https://www.eni-training.com/download/8085119a-0c84-4016-9951-8b65c868e345/images/cap13_img_05.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Puede ver la palabra clave ActiveCell en el siguiente ejemplo:
Sub LlenarCelda()
ActiveCell.FormulaR1C1 = "Buenos días"
End Sub
Ejemplo 7: la palabra clave ActiveCell aparece desde la grabadora de macros.
Selección activa: Selection
Cuando trabaja en Excel y selecciona una o varias celdas, VBA utiliza un objeto específico: Selection. Este objeto, de tipo Range, como ActiveCell, cubre un espectro de funcionalidad similar a este. Esta palabra clave puede aparecer cuando utilice la grabadora de macros.
Cuando se trabaja con una sola celda, el objeto...
Propiedades de las celdas
En primer lugar, veremos lo que se llama una propiedad y luego veremos las principales propiedades que se pueden utilizar con las celdas.
Definir una propiedad
En informática, las propiedades de un objeto son sus características, lo que lo define. Tomemos el ejemplo de un coche. Tendrá entre sus propiedades su marca, modelo, color, año de lanzamiento. Las propiedades pueden ser de cualquier tipo, (numérico, fecha, cadena). Algunas propiedades podrán modificase; otras, solo leerse.
Durante la programación, puede reconocer una propiedad por el icono de la mano que señala:
![images/cap13_img_06.png](https://www.eni-training.com/download/8085119a-0c84-4016-9951-8b65c868e345/images/cap13_img_06.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Contenido de una celda: Value, Value2
Cuando empiece a programar con Excel, lo primero que le interesará de una celda será el valor que contiene. En esta sección encontrará algunas de las líneas de código que descubrirá con la grabadora de macros.
El valor contenido en una celda se obtiene gracias a la propiedad Value. VBA considera esta propiedad como la predefinida.
La sintaxis general es la siguiente:
Debug.Print Range("A1").Value 'Muestra el valor contenido en la celda A1.
Ejemplo 10: sintaxis general de la propiedad Value de un objeto Range
Esta propiedad puede ser tanto leída como modificada por su programa.
Range("A1").Value = 3 ' Asigna el valor 3 a la celda A1
MsgBox Range("A1").Value 'Muestra el valor de la celda A1
Ejemplo 11: usar la propiedad Value
Dependiendo del tipo de valor contenido en la celda, el tipo de datos devueltos por la propiedad Value será adaptado automáticamente por VBA. Por lo tanto, es conveniente utilizar los tipos de datos correctos para sus variables, ya que de lo contrario su programa podría malinterpretar los valores.
En el caso de que tenga los siguientes datos en las celdas:
![images/cap13_img_07.png](https://www.eni-training.com/download/8085119a-0c84-4016-9951-8b65c868e345/images/cap13_img_07.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
el siguiente código recuperará cada uno de los valores con el tipo de datos correcto:
Dim iNumerico As Integer, sTexto As String, dtFecha As Date
iNumerico = Range("A1").Value '123
sTexto = Range("B1").Value '"ejemplo de texto"
dtFecha = Range("C1").Value '2022-08-17
Ejemplo 12: recuperar los valores a través de la propiedad Value
Del mismo modo, se pueden escribir valores en las celdas a partir de variables:
Dim strTexto As String
strTexto = "Buenos días" ...
Métodos aplicados a las celdas
En esta sección verá la otra cara de lo que se puede hacer con una celda. Verá lo que es un método en programación, y luego descubrirá algunos métodos que le permiten realizar manipulaciones comunes con las celdas de Excel.
Definición de un método
Al igual que abordó las propiedades de los objetos, los métodos corresponden a las acciones que puede realizar con estos objetos. Si retoma el ejemplo del coche, puede, por ejemplo, desbloquearlo, sentarse al volante, arrancar el motor, acelerar o frenar.
En la programación VBA, los métodos se identifican con el icono de bloque de color verde, como se muestra en la siguiente imagen:
![images/cap13_img_09.png](https://www.eni-training.com/download/8085119a-0c84-4016-9951-8b65c868e345/images/cap13_img_09.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Activar y seleccionar una celda
Como habrá aprendido en la sección Algunas celdas particulares: ActiveCell, Selection y Target, existe una diferencia entre una celda activa y una celda seleccionada. Entre los métodos de objeto comenzará, por tanto, con los que activan y seleccionan las celdas.
Activar una celda: Activate
Uno de los primeros métodos que puede ver con una celda es su activación. Esto le permite simular hacer clic en una celda. El método Activate le permite realizar esta acción. Este método no necesita ningún parámetro; se pueden activar varias celdas, simplemente especificándolo dentro del objeto Range. Su sintaxis...
Ejercicios
En esta serie de ejercicios, cree una hoja en su libro de trabajo llamada Ejercicios_ManipulacionesCeldas.
Antes de ejecutar las macros, asegúrese de que la hoja Ejercicios_ManipulacionesCeldas está activa.
Las funciones, procedimientos y macros pueden escribirse directamente en la hoja Ejercicios_ManipulacionesCeldas.
Puede ayudarse con la grabadora de macros si encuentra dificultades.
Valor en una celda
Con activación
Cree la macro ActivarCeldaA1YBuenosDiasEnCeldaActiva.
Esta macro activará la celda A1 y luego pondrá el valor Buenos días en dicha celda.
Ejecute la macro ActivarCeldaA1YBuenosDiasEnCeldaActiva.
Sin activación
Cree la macro EscribirEnCeldaA2.
Esta macro escribirá el valor Manipulación correcta directamente en la celda A2, sin activarla primero.
Ejecute la macro EscribirEnCeldaA2.
Un poco de color
Cree la macro ColorearCeldaDeAmarillo.
Esta macro le pedirá al usuario que introduzca la dirección de una celda (hará lo necesario para garantizar que la dirección sea válida).
Una vez conocida la dirección de la celda, la coloreará de amarillo (constante vbYellow)
Ejecute la macro ColorearCeldaDeAmarillo.
Copiar y pegar celdas
Con el método Copy
Cree la macro EscribirEnB1YCopiarEnB2.
Esta macro deberá escribir primero el valor 3A en la celda B1 y luego, utilizando...