Excel - Pregunta para JuanC Ultima Fila

   
Vista:

Pregunta para JuanC Ultima Fila

Publicado por frany (58 intervenciones) el 15/11/2009 21:31:22
Hola JuanC
He visto tu código de búsqueda de la ultima celda vacía buscando con el buscador.
dicho código no lo probé cuando lo publicaste, lo acabo de hacer hace 20 minutos y como dije en el otro post es ENDIABLADAMENTE RAPIDO.
No es que este no me valga, la verdad es que es estupendo.
Tan solo me gustaría saber si tienes algo para buscar la ultima fila con datos, es decir no tener que especificar la columna a la hora de pasar el dato a la función.

Un saludo.

Sub test()
'Autor:Juan C
'busca la ultima celda con datos
MsgBox UltimaCeldaConDatos([A2])
End Sub

Function UltimaCeldaConDatos(rngPivot As Range) As String
'Autor:Juan C
Dim rng As Range
Dim i&, lCount&
On Error Resume Next
Set rng = rngPivot.Columns(1).EntireColumn
Set rng = Intersect(rng.Parent.UsedRange, rng)
lCount = rng.Count

For i = lCount To 1 Step -1
If Not IsEmpty(rng(i)) Then
If rng(i).Row <> Cells.Rows.Count Then
UltimaCeldaConDatos = rng(i).Offset(1, 0).Address
Else
UltimaCeldaConDatos = "Todo lleno"
End If
Exit Function
End If
Next i

UltimaCeldaConDatos = rngPivot.Address

Set rng = Nothing
End Function
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Pregunta para JuanC Ultima Fila

Publicado por frany (58 intervenciones) el 15/11/2009 21:33:37
Bueno he pegado el código con algo de modificación puesto que mi ultima fila era la 65536 espero no te molestes.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JuanC

RE:Pregunta para JuanC Ultima Fila

Publicado por JuanC (1052 intervenciones) el 16/11/2009 16:46:30
Option Explicit
Option Private Module

'//By JuanC - Ene. 2009
no me queda del todo claro lo que querés, pero supongo que no debe
ser tan complicado modificar lo ya existente...
te dejo otro código que creo hace lo mismo...

Private Sub test()
Dim rng As Range, i%
Dim nCol%
nCol = 1
On Error Resume Next
For i = 1 To 10
Set rng = Ultima_Celda_Ocupada(nCol)
If Not rng Is Nothing Then
If rng.Row <> Cells.Rows.Count Then
rng.Offset(1).Value = i '//Fila siguiente a la última ocupada
'Else
'MsgBox "La columna está completa!"
End If
Else
Set rng = Cells(1, nCol) '//Primer fila de la columna
If Not rng Is Nothing Then
'MsgBox "La columna está vacía!"
rng.Value = i
Else
'MsgBox "La ref. de columna no corresponde!"
Exit For
End If
End If
Next
End Sub

'//---------------------------------------------------------------------------------
'//Ignora las celdas con espacios en blanco
'//NO si son el resultado de una fórmula
'//---------------------------------------------------------------------------------
Public Function Ultima_Celda_Ocupada(ByVal nColumn As Integer) As Range
Dim c As Range, rng As Range, r1 As Range, r2 As Range
Dim sAdd$
On Error Resume Next
If nColumn < 1 Or nColumn > Cells.Columns.Count Then Exit Function

Set r1 = Cells(Cells.Rows.Count, nColumn).EntireColumn.SpecialCells(xlCellTypeConstants)
Set r2 = Cells(Cells.Rows.Count, nColumn).EntireColumn.SpecialCells(xlCellTypeFormulas)
If Not r1 Is Nothing Then
If Not r2 Is Nothing Then
Set rng = Union(r1, r2)
Else
Set rng = r1
End If
ElseIf Not r2 Is Nothing Then
Set rng = r2
End If
With rng
Set c = .Find(What:="*", SearchDirection:=xlPrevious)
If Not c Is Nothing Then
If Trim(c.Value) = "" And Mid(c.Formula, 1, 1) <> "=" Then
sAdd = c.Address
Do
Set c = .FindPrevious(c)
Loop While Not c Is Nothing And (Trim(c.Value) = "" And Mid(c.Formula, 1, 1) <> "=") And sAdd <> c.Address
End If
If Trim(c.Value) = "" And Mid(c.Formula, 1, 1) <> "=" Then Set c = Nothing
End If
End With
Set Ultima_Celda_Ocupada = c
End Function

Saludos, desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pregunta para JuanC Ultima Fila

Publicado por frany (58 intervenciones) el 18/11/2009 00:21:52
Muchas gracias JuanC.
No te preocupes con la primera rutina me sobra desde luego.
Mas que nada era saber si tenias algo que te indicase si toda la fila estaba vacía.
Finalmente desde el punto de vista de programación no me cuesta nada hacer un bucle para llamar a tu función las veces que sean necesarias.
Gracias de nuevo por tus valiosos códigos.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar