Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
UsedRange es una propiedad del objeto Worksheet y nos devuelve el rango de celdas utilizadas en
una hoja. Por ejemplo, en la siguiente imagen, el rango utilizado es A1:C3.
Una vez que tenemos identificado el rango utilizado, podemos recurrir al método SpecialCells que
nos devolverá aquellas celdas que cumplen con determinado criterio. En nuestro ejemplo nos
interesa obtener la última celda en uso y por lo tanto utilizaremos la constante xlCellTypeLastCell
como el criterio para el método SpecialCells:
ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell)
Lo último que debemos hacer es obtener la fila de esa última celda utilizando la propiedad Row. De
esta manera, nuestra macro para obtener la última fila con datos será la siguiente:
Sub UltimaFila_1()
1
2
MsgBox
3
ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
4
5
End Sub
La siguiente imagen muestra el resultado después de ejecutar esta macro sobre los datos de ejemplo.
Observa que el resultado es la fila 7.
Puedes encontrar problemas cuando tienes algún valor que se encuentre por debajo de las filas de
datos ya que eso ocasionará que la macro devuelva una fila mayor a la esperada. Por ejemplo, la
siguiente imagen muestra un caso donde las celdas F9 y G9 tienen un valor y por lo tanto la macro
devolverá la fila 9 la cual es mayor que la última fila en el rango de datos.
Si te encuentras en esta situación, entonces debes considerar la alternativa con la propiedad End la
cual revisaremos a continuación.
La propiedad End y la última celda con datos
Este método comienza por obtener una referencia a la última celda de una columna utilizando una
instrucción como la siguiente:
ActiveSheet.Cells(Rows.Count, "A")
La instrucción Rows.Count nos devuelve el total de filas de la hoja y por lo tanto obtendremos la
última celda de la columna A. En seguida utilizaré la propiedad End, que me ayudará a simular el
atajo de teclado Fin + Flecha arriba, y con eso puedo “subir” a la última celda con datos de la
columna.
ActiveSheet.Cells(Rows.Count, "A").End(xlUp)
Una vez que estamos ubicados en la última celda con datos, podemos obtener su fila con la
propiedad Row. El código de nuestra macro es el siguiente:
1 Sub UltimaFila_2()
2
3 MsgBox ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
4
5 End Sub
La siguiente imagen muestra el resultado de ejecutar esta macro sobre los datos de ejemplo.
Observa que la macro nos devuelve el valor 10 que es la última fila que tiene un valor.
La única condición para que este método funcione correctamente es elegir la columna adecuada que
nos ayudará a determinar la última fila en los datos.
La única ocasión en la que este método no devolverá el resultado correcto será cuando exista un
valor en la última fila de una columna. Pero la probabilidad de que tengas un valor en la fila
1,048,576 es casi inexistente, y por esa razón este método es ampliamente utilizado.
Si combinamos este método con alguna columna de nuestros datos, tendremos el código necesario
para obtener la última fila en uso.
1 Sub UltimaFila_3()
2
3 On Error Resume Next
4 MsgBox ActiveSheet.Columns("A").Find("*", _
5 searchorder:=xlByRows, searchdirection:=xlPrevious).Row
6
7 End Sub
La siguiente imagen muestra el resultado al ejecutar esta macro sobre los datos de ejemplo.
Considera que existen filas vacías entre los datos y aun así la macro devuelve la última fila
correctamente.
En esta macro he agregado la línea On Error Resume Next porque si la columna está vacía, entonces
el método Find devolverá un objeto vacío y por lo tanto causará un error. Es necesario agregar más
código en caso de querer manejar adecuadamente dicho error, pero eso será tarea para otra
publicación.