Una de las actividades más comunes en Excel/VBA es escribir datos sobre una hoja de cálculos. Para ello, muchas veces deberás saber cual es la última celda con datos en la hoja de Excel y desplazarte una casilla en la hoja de cálculo (en dirección vertical u horizontal según lo requieras) para encontrar la primera celda disponible, por lo que estamos seguros de que este Tip será de gran utilidad para ti.
Identificación por Loop
Aunque no es la forma más práctica ni eficiente, por el tiempo de cómputo que esta conlleva, la secuencia por loop en VBA puede ser usada para encontrar la última celda ocupada. Esta se pasea por todas las celdas de un rango (por una columna o fila) y evalúa en cada caso si cumple la condición de celda vacía. El código podría ser como se indica en el siguiente ejemplo, en el cual se escribe en la primera celda disponible luego de encontrar la última fila con datos en el libro Excel:
Sub getLastRow()
i = 1
Do
If IsEmpty(Cells(i, 1)) = True Then Exit Do
i = i + 1
Loop
lastRow = i - 1
Cells(lastRow + 1, 1) = "First available cell"
End Sub
También es posible hacer el Loop avanzando en columnas en la hoja de trabajo, para conocer la última columna ocupada y escribir en la primera columna disponible, como se muestra a continuación:
Sub getLastColumn()
j = 1
Do
If IsEmpty(Cells(1, j)) = True Then Exit Do
j = j + 1
Loop
lastColumn=j - 1
Cells(1, lastColumn + 1) = "First available cell"
End Sub
Búsqueda directa
Por ser la forma más rápida y de menor costo computacional esta es nuestra SmartCode Recomendation. Consiste en aplicar los comandos VBA descritos a continuación para encontrar la última celda ocupada en una columna específica de la hoja Excel, o la última celda ocupada en una fila específica. Para encontrar la última celda ocupada en una columna puedes utilizar los comandos que describen a continuación:
Variable= celda(Rows.Count, “Referencia de Columna«).End(xlUp).Row
Ejemplo:
Sub getLastRow() lastRow = Cells(Rows.Count, "A").End(xlUp).Row Cells(lastRow + 1, 1) = "First available cell" End Sub
Similarmente, para encontrar la última celda ocupada en una una fila los comandos serian:
Variable = Cells(Índice de fila, Columns.Count).End(xlToLeft).Column
Ejemplo:
Sub getLastColumn()
lastColumn = Cells(1, Columns.Count).End(xlToLeft).Column
Cells(1, lastColumn + 1) = "First available cell"
End Sub
Quieres saber más? Contáctanos…