A pesar de haber ya decenas de versiones de funciones que hacen algo similar, os dejo aquí una de mi propia cosecha que he diseñado para evitarme los dolores de cabeza que me daban las demás.
Esta función, devuelve exactamente la última fila de cualquier hoja del libro que contiene algo en ella estemos o no en dicha hoja y sin necesidad de haber guardado los cambios.
Option Explicit
Public Function UltimaFila(Hoja As String) As Integer
On Error GoTo errores
UltimaFila = Sheets(Hoja).UsedRange.Row + Sheets(Hoja).UsedRange.Rows.Count - 1
Exit Function
errores:
UltimaFila = -1
End Function[/CODE]
Curiosamente, tras buscarla en google ya existía, pero tuve que crearla para luego buscarla y darme cuenta. Necesito perfeccionar mis búsquedas antes de reinventar la rueda.
Un saludo!
PD: La formula no es efectiva, la estoy mejorando para que haga lo que dice arriba ya que si se modifica el formato de cualquier fila ya sea tamaño de fila, negritas, o cualquier otra cosa, devuelve la fila de esa celda aun que esta esté vacia.
PD2: Vale, ahora parece que si que funciona mejor:
[CODE]Option Explicit
Public Function UltimaFila(Hoja As String) As Integer
On Error GoTo errores
Dim i As Integer:
Dim ActRow As Integer
Dim p As Range
i = Sheets(Hoja).UsedRange.Rows.Count
ActRow = Sheets(Hoja).UsedRange.Row
For Each p In Sheets(Hoja).UsedRange
If p.Row <> ActRow Then 'No se me ocurria ninguna otra forma de hacer step-1 usando contadores de objetos
ActRow = p.Row
i = i - 2
End If
If p(i).Value <> "" Then
UltimaFila = p(i).Row
Exit Function
End If
Next
Exit Function
errores:
UltimaFila = -1
End Function[/CODE]
Quizas algun romano quiera simplificarla un poco por que tiene que haber alguna manera de hacer step -1 con "for each" y tambien alguna manera de analizar de una tacada todo un rango para ver si tiene algun valor.
Un saludo y edito el primer mensaje con la segunda version.
A pesar de haber ya decenas de versiones de funciones que hacen algo similar, os dejo aquí una de mi propia cosecha que he diseñado para evitarme los dolores de cabeza que me daban las demás.
Esta función, devuelve exactamente la última fila de cualquier hoja del libro que contiene algo en ella estemos o no en dicha hoja y sin necesidad de haber guardado los cambios.
Curiosamente, tras buscarla en google ya existía, pero tuve que crearla para luego buscarla y darme cuenta. Necesito perfeccionar mis búsquedas antes de reinventar la rueda.
Un saludo!
PD: La formula no es efectiva, la estoy mejorando para que haga lo que dice arriba ya que si se modifica el formato de cualquier fila ya sea tamaño de fila, negritas, o cualquier otra cosa, devuelve la fila de esa celda aun que esta esté vacia.
PD2: Vale, ahora parece que si que funciona mejor:
Public Function UltimaFila(Hoja As String) As Integer
On Error GoTo errores
Dim i As Integer:
Dim ActRow As Integer
Dim p As Range
i = Sheets(Hoja).UsedRange.Rows.Count
ActRow = Sheets(Hoja).UsedRange.Row
For Each p In Sheets(Hoja).UsedRange
If p.Row <> ActRow Then 'No se me ocurria ninguna otra forma de hacer step-1 usando contadores de objetos
ActRow = p.Row
i = i - 2
End If
If p(i).Value <> "" Then
UltimaFila = p(i).Row
Exit Function
End If
Next
Exit Function
errores:
UltimaFila = -1
End Function[/CODE]
Quizas algun romano quiera simplificarla un poco por que tiene que haber alguna manera de hacer step -1 con "for each" y tambien alguna manera de analizar de una tacada todo un rango para ver si tiene algun valor.
Un saludo y edito el primer mensaje con la segunda version.
UltimaFila.zip
UltimaFila v2.zip