You are on page 1of 5

Resumen del captulo 3 del libro VBA and Macros Microsoft Excel 2010

Rangos
Tal y como su nombre lo indica, se trata de los rangos, los cuales son objetos de Excel que pueden
ser celdas, filas, columnas o un grupo de cualquiera de estas. Resulta obvio que sea muy usado el
objeto range, puesto que es la manera en la que se puede seccionar una hoja de Excel, en rangos.

El objeto Rango
Nos mencionan que existe una jerarqua, que va de esta manera:
Aplicacin > Libro > Hoja > Rango.
Como un rango es un objeto dentro de una hoja, pertenece a las propiedades de sta, y para
referirnos al rango debemos especificar la hoja tambin (Ejemplo 1)

Sintaxis para referirse a un rango
Hay varias maneras de referirse a un rango, sin embargo la mejor es usando el comando
Range(B4) (por ejemplo) o bien asignando un nombre al rango y usarlo como palabra clave en
Visual Basic. La mayora de los mtodos ms sencillos slo sirve para seleccionar rangos de forma
rectangular, seleccionando las celdas de la esquina superior e inferior.
En el archivo de ejemplos se muestran algunas maneras de seleccionar un rango. (Ejemplos 2 a 4)
Ahora bien se muestra la propiedad Range.Offset cuya funcin es desplazar un rango, pero en
este caso se usa para seleccionar un rango que est conformado por el rectngulo que est entre
la celda seleccionada y dos celdas a la derecha y cinco debajo de sta. (Ejemplo 5)

Rangos con nombre
El siguiente ejemplo es sobre cmo seleccionar un rango definido por el usuario, en este caso se
debe nombrar el rango y en el cdigo se debe especificar el nombre del rango entre comillas,
puesto que si esto no se hace, el programa reconoce este rango como una variable. (Ejemplo 6)
Mtodos abreviados para referirse a rangos
Se pueden usar mtodos abreviados para hacer referencia a un objeto range que consiste en
poner dicho rango entre corchetes, sin ms. (Ejemplo 7)



Referencia a rangos en otras hojas
A continuacin se habla sobre hacer referencia a rangos que se encuentran en otra hoja, esto se
hace especificando la hoja antes del rango, la sintaxis es la siguiente:
Worksheets(Ejemplos2).Range(MyRange).Select (Ejemplo 6, hoja Ejemplos3)
Tambin se puede hacer referencia a objetos en otros libros, es importante que dicho libro est
abierto, para que de esa manera nuestro comando sea vlido. (Ejemplo 8)
Es importante saber que siempre se debe dar a conocer la ubicacin exacta del objeto range sobre
el cual trabaja la funcin, pues si no ocurre un error, tal y como me pas a m
Por ejemplo, si quieres sumar todos los valores que tengan las celdas de un rango (tienen que ser
numricas puramente, pues si no las toma como cero), en teora, se usara la siguiente sintaxis:

WorksheetFunction.Sum(Worksheets(Sheet2).Range(Worksheets(Sheet2). _
Range(A1),Worksheets(Sheet2).Range(A7)))

Sin embargo es incorrecta, puesto que como se refiere a la hoja 2 del libro, se debe especificar la
ubicacin exacta de las celdas del rango, en el libro nos mencionan que la sintaxis correcta debera
ser:
WorksheetFunction.Sum(Worksheets(Sheet2).Range(Worksheets(Sheet2). _
Range(A1),Worksheets(Sheet2).Range(A7)))
(Ejemplo 9)
Pero que sera bastante complejo y tedioso hacerlo de esta manera, por esta razn, es mejor usar
WithEnd With que sirve para indicar que a partir de la lnea With todo lo que hagamos sera
refirindonos a la hoja indicada, la sintaxis sera la siguiente:
With Worksheets(Sheet2)
WorksheetFunction.Sum(.Range(.Range(A1), .Range(A7)))
End With
El punto sin Worksheets(Sheet2) antes de Range significa que la operacin que se realice es con
referencia a esta hoja. (Ejemplo 10)




Referirse a un rango relativo a otro rango
Se refiere a que podemos seleccionar un rango que sera equivalente a un rango que empieza en
la celda A1, por ejemplo:
Range(B5).Range(C3).Select
La celda C3 est a dos lugares de la celda A1, y la lnea de cdigo nos dice que se va a seleccionar
la celda equivalente a la C3, pero tomando ahora como punto de referencia la celda B5, es decir, el
resultado es que se seleccionar la celda D7. (Ejemplo 11)
Otra forma, es seleccionar un rango pero esta vez con referencia a la celda activa, en el Ejemplo 12
se selecciona la celda E4 con respecto a la celda que hayas seleccionado, es decir tres filas abajo y
4 columnas a la derecha.
Y el otro ejemplo cumple con la misma funcin (solo que mueve 4 columnas a la derecha) la
diferencia es que est escrito de la manera en que Excel graba macros.
Usar la propiedad celdas para referirse a un rango
Ahora hablamos de la propiedad celdas que nos puede servir para seleccionar celdas en una hoja,
y, ms especficamente, a seleccionar celdas particulares en un rango.
El primer ejemplo nos sirve para seleccionar todas las celdas de la hoja activa. (Ejemplo 13)
La propiedad por defecto del objeto range es Item, por lo tanto escribir Cells.Item(2,B) equivale
a escribir Cells(2,B) el primer nmero representa las filas, por lo tanto siempre debe ser
numrico, el segundo dato representa a las columnas y puede ser tanto el valor numrico como la
letra correspondiente a la columna.
El poder usar valores numricos para referirnos a un objeto range es muy til para hacer ciclos a
travs de filas o columnas.
FinalRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 to FinalRow
Cells(i,A).Resize(,5).Font.Bold = True
Next i

Este cdigo hace un ciclo entre las filas de la columna A a la E y modifica sus propiedades para que
el texto tenga formato en negritas. (Ejemplo 14)

Usar la propiedad celdas en la propiedad rango

Se puede usar la propiedad celdas para delimitar un rango, esto se hace escribiendo lo siguiente}

Range(Cells(1, 1), Cells(5, 5)) (Ejemplo 15)




Tambin se puede usar la propiedad offset con las celdas, usando la siguiente sintaxis:
Range(A1).Offset(4,5) la cual hace que se seleccione la celda F5 la cual est 5 columnas a la
derecha y 4 debajo de la celda A1 (Ejemplo 16).
Si se requiere hacer lo mismo, pero con la celda activa, solo se sustituye Range(A1) por
ActiveCell, (Ejemplo 17).

Los parmetros de offset son opcionales, por lo que si no se especifica uno, simplemente se
permanece en la misma fila o columna.

Para subir, o bien avanzar a la izquierda usando la propiedad offset, simplemente se usan nmeros
negativos. (Obviamente la celda esperada debe existir)




Luego est el siguiente cdigo (Ejemplo X)

Sub MyOffset()
With Range("B1:B16")
Set Rng = .Find(What:="0", LookAt:=xlWhole, LookIn:=xlValues)
If Not Rng Is Nothing Then
firstAddress = Rng.Address
Do
Rng.Offset(, 1).Value = "LOW"
Set Rng = .FindNext(Rng)
Loop While Not Rng Is Nothing And Rng.Address <> firstAddress
End If
End With
End Sub

Lo que hace es reconocer en que celdas de un rango hay nmeros 0, y escribe En la celda a la
derecha de stos la palabra LOW, es una implementacin de del WithEnd With, as como del
Offset, entre otras cosas, pero esas dos son las que hemos estado viendo en este tercer captulo.
Tambin podemos ver un mtodo Range.Find, cuyo nico parmetro obligatorio es Decir qu se
quiere encontrar, sin embargo se ha definido que se revisar el rango completo y que se
analizarn nicamente valores.



Ahora bien, el offset no se tiene que usar exclusivamente con celdas, tambin funciona con
rangos, as como es comprobado en el Ejemplo 18

Usar la propiedad de cambio de tamao para modificar el tamao de un
rango

La propiedad Resize sirve para modificar el tamao de un rango basndonos en la localizacin de
la celda activa usando la siguiente sintaxis: Range.Resize(RowSize, ColumnSize)
Es parecido al offset, solo que en vez de simplemente seleccionar, crea, aumenta o disminuye un
rango. (Ejemplo 19) Las reglas para seleccionar el tamao de celdas y columnas son las mismas
que se siguen para hacer el offset. Al cambiar de tamao, lo que vara es la esquina inferior
derecha del rango, la superior izquierda deber permanecer igual.

Usar las propiedades de las filas y las columnas para hacer referencia a
rangos

Ahora se explica una parte de un cdigo utilizado anteriormente, dicha lnea es la siguiente:

FinalRow = Cells(Rows.Count, 1).End(xlUp).Row

Lo que hace es reconocer cul es la ltima fila de la primera columna que contiene datos dentro
de un rango, y puede ser til cuando necesitas hacer uso de un ciclo fila por fila.

Usar el mtodo unin para unir varios rangos

Para unir varios rangos se usa la funcin Union() y dentro de sta se especifican los rangos a
evaluar. (Ejemplo 20)


Usar el mtodo de interseccin para encontrar en dnde se cruzan rangos
superpuestos.
Para ver en donde se intersectan dos rangos existe un funcin llamada Intersect(), los parmetros
se definen igual que en la funcin Unin, pero obviamente la funcin es la ya explicada (Ejemplo
21)

Usar la funcin ISEMPTY para revisar si una celda u objeto rango est
vaca(o).

La funcin IsEmpty() nos sirve para evaluar si una celda est vaca, nos devuelve un valor
booleano, verdadero si la celda en efecto est vaca, falso en caso contrario.
(Ejemplo 22)

El ejemplo 23 analiza qu celdas antes del ltimo dato de la columna A estn vacas, y, las que lo
estn son rellenadas, as como los tres siguientes datos de la misma fila, de color negro.

Usar la propiedad de Regin actual para seleccionar un rango de datos

En este caso selecciona toda la regin rectangular que comienza con la celda que nosotros
asignemos de manera que son seleccionadas las filas y columnas que tienen por lo menos un dato
(siempre y cuando no haya una fila o columna vaca entre esta celda y la regin principal).

You might also like