¿En qué nos ayudaría identificar la última fila en uso?
Usualmente las bases de datos en Excel tienen mucha información; por eso, perderíamos tiempo buscando el último dato con la barra de desplazamiento.
Sin embargo, esto se puede solucionar, haciendo uso de las macros.
¿Qué código podemos usar para buscar la última fila?
Sub BuscarUltimaFila()
Dim ult As Integer
ult = Cells(Rows.Count, 1).End(xlUp).Row
MsgBox ult
End Sub
Ahora entendamos el código:
Cells(Rows.Count,1) = Al usar Rows.Count estamos contando todas las filas disponibles en excel cuyo valor seria 1048576. Como lo usamos en un Cells, estaremos seleccionando la fila 1048576. El "1" indica la columna en la cuál se esta trabajando ("A") .
End(xlUp) = Estamos indicando que desde la fila indicada (1048576), "suba" hasta que encuentre un valor.
Row = Indicamos que grabe el número de la fila ocupada encontrada.
MsgBox ult = Mostramos ese valor en un cuadro de texto.
Seleccionar la última fila en VBA
Ahora, si queremos seleccionar esa celda podemos agregar el siguiente código:
Sub BuscarUltimaFila()
Dim n As Long
countult = Cells(Rows.Count, 1).End(xlUp).Row
MsgBox countult
Cells(Rows.Count, 1).End(xlUp).Select
End Sub
Como podemos observar, en vez de .Row , le ponemos .Select
Última fila libre en VBA
Alternativamente, si queremos buscar la última fila libre, haremos uso del Offset:
Sub BuscarUltimaFila()
Dim n As Long
countult = Cells(Rows.Count, 1).End(xlUp).Offset(1,0).Row
MsgBox countult
Cells(Rows.Count, 1).End(xlUp).Offset(1,0).Select
End Sub
Con Offset(1,0) , al encontrar la última fila en uso, saltamos 1 fila más la cual sería la última fila libre.
Descargar ejemplos de identificación de última fila
------------------
Elaborado por: Daniel Eduardo Espinoza Rodriguez
06/06/2016 a las 11:31 pm
Excelente, me ayudo mucho
04/09/2016 a las 12:52 pm
Espero su apoyo porfavor quisiera saber como ocupar una celda determina
en este codigo ya que si me lista pero desde la ultima celda activa y yo necesito que este en la celda A22 para abajo
conta = 0
Set a = Sheets("REQUERIMIENTO")
filaedit = a.Range("A" & Rows.Count).End(xlUp).Row + 1
For x = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(x) = True Then
conta = conta + 1
End If
Next x
If conta 0 Then
For x = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(x) = True Then
'fila = Me.ListBox1.ListIndex.SelectedItem
a.Cells(filaedit, "A") = ListBox1.List(x, 0)
a.Cells(filaedit, "B") = ListBox1.List(x, 1)
a.Cells(filaedit, "C") = ListBox1.List(x, 2)
a.Cells(filaedit, "E") = ListBox1.List(x, 4)
a.Cells(filaedit, "F") = ListBox1.List(x, 3)
Me.ListBox1.Selected(x) = False
filaedit = filaedit + 1
conta = conta + 1
End If
Next x
End If
End Sub
13/09/2016 a las 6:47 pm
Muchas gracias, me fue de mucha utilidad esta publicacion
13/01/2017 a las 11:48 am
Que bueno el código, necesito determinar la ultima fila de una litado, a cual deberá ser evaluada y si cumple una condición toda la fila será copiada a la ultima fila libre de otra hoja. p.e. listado de nombres, edades, ciudad. si el dato ingresado es de una edad determinada, esta fila deberá ser copiada a la hoja 2, en la fila disponible siguiente a la ultima fila ocupada. esto al momento de ingresar la edad. gracias por su ayuda.
01/03/2017 a las 1:38 pm
Buenas días, tengo una macro que realiza la copia de datos desde otro libro pero siguiendo una condición especifica, el problema que tengo es ¿como puedo determinar la ultima fila en ese libro sin abrirlo?.
El libro de trabajo no tiene dato por lo que el código me arroja el valor de la ultima fila en 1 siendo la ultima fila desde el libro a copiar 10562.
Sub Importar()
Dim LibroDatos As Variant
Dim UltimaFila As Integer
LibroDatos = Application.GetOpenFilename("Hoja Excel, *.xls*", _
, Title:="Seleccionar Archivo para Copiar Datos.")
UltimaFila = Cells(Rows.Count, 1).End(xlUp).Offset(1)
End Sub
¿Podrían Ayudarme Por Favor?
03/05/2017 a las 1:33 am
Hola JavierM,
¡No se puede determinar la última fila sin abrir el archivo!….Excel requiere que los libros estén abiertos y sus hojas visibles, es independiente del método que utilices, siempre terminaras abriendo los archivos para poder copiar su información.
El método GettOpenFilename , solo te servirá si lo acompañas del método Workbooks.Open ..…..ok
Así mismo la instrucción.
UltimaFila = Cells(Rows.Count, 1).End(xlUp).Row
Carece de significado, si el libro “NO ESTÁ ABIERTO”……así son las reglas de VBA….solo hay que utilizarlas a nuestro favor…. ok
Saludos.
30/04/2020 a las 6:07 pm
Javier...Interesante, pero el comando UltimaFila = Cells(Rows.Count, 1).End(xlUp).Offset(1), sobre escribe mas no me busca la ultima fila libre...
21/07/2017 a las 12:19 pm
Hola buenas tardes, necesito necesito Concatenar A segun nombres de columna B esto debe ir en columna D segun los nombres de los clientes de columna D .
Debe ser con VBA porque son alrededor de 300 filas de nombres y unos 200 clientes
A B C D
Numeros Nombres Clientes Numeros
567 juan juan 567-44-789-2379
45 roberto roberto 45-555-211
555 roberto jose 343-123-14
44 juan
jose
789 juan
343 jose
juan
123 jose
2379 juan
14 jose
roberto
211 roberto
21/04/2018 a las 2:54 pm
Hola recién veo este post y seguro que ya lo has hecho pero por las dudas debes hacer lo siguiente:
Seleccionas toda la tabla y vas a datos y seleccionas crear tabla. Le das un nombre a la tabla y seleccionas la opción de "contiene encabezado" y aceptas todo.
Una vez echo esto te vas a la primera celda de la columna D y colocas lo siguiente: =A2&"-"&B2
Al colocar está fórmula en la primera celda se pega en toda la tabla de esa celda. Evitando así de colocar la fórmula celda por celda.
28/08/2017 a las 2:37 pm
Buenas tardes, Excelente aporte, pero necesito que la macro me identifique la ultima fila con texto en otra hoja llamada "BASE" y traerlo a la hoja "Generador" en la celda A4.
Muchas gracias.
27/02/2018 a las 5:39 pm
GRAN APORTACION!
ME SIRVIO PARA UN TRABAJO QUE ESTOY DESARROLLANDO
05/08/2018 a las 9:13 pm
como puedo corregir un error 1004 en esta linea
contfila = hoja.Cells(Rows.Count, 1).End(x1up).Offset(1, 0).Row
15/08/2018 a las 1:30 pm
contfila = Cells(Rows.Count, 1).End(xlUp).Row
contfila = Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
contfila = Worksheets("ventas").Cells(Rows.Count, 1).End(xlUp).Row
(revisar x1up por xlup)
17/02/2019 a las 9:55 am
Hola estoy haciendo un formulario de ingreso de datos de postulantes me guarda todo correcto y también he probado con macros el orden de mérito de las notas pero cuando lo.quiero adaptar en mi proyecto no me calcula como lo deseo me pueden ayudar
07/08/2019 a las 1:23 pm
Así es como se debe de explicar VBA, cada código. El mejor de los aportes que he visto
30/09/2019 a las 12:02 pm
buenos dias, estoy armando un formulario en excel y tome como ejemplo un vídeo de programación que me agrega una fila pero se me enciman los datos, el formulario que arme ocupa de forma variable entre 3 y 4 filas por solicitud y necesito que cuando agrego un dato nuevo comience desde la ultima. les muestro como lo escribí.
Private Sub AGREGAR_Click()
Worksheets("Planilla").Range("a2").EntireRow.Insert
Range("B2") = SOLICITUD.Value
Range("H2") = FECHAVENTA.Value
Range("K2") = VENDEDOR.Value
Range("M2") = MEDIO.Value
Range("N2") = TEMISORA.Value
Range("O2") = NTARJETA.Value
Range("R2") = NCBU.Value
Range("B3") = SOLICITUD.Value
Range("E3") = DNITITU.Value
Range("G3") = APELLIDOTITU.Value
Range("H3") = NOMBRETITU.Value
Range("I3") = NACTITU.Value
Range("J3") = SEXOTITU.Value
Range("L3") = CALLE.Value
Range("M3") = NUMERO.Value
Range("N3") = PISO.Value
Range("O3") = DTO.Value
Range("P3") = LOCALIDAD.Value
Range("Q3") = CP.Value
Range("R3") = PROV.Value
Range("S3") = TELEFONO.Value
Range("V3") = EMAIL.Value
Range("E4") = DNI1.Value
Range("F4") = PAREN1.Value
Range("G4") = APELLIDO1.Value
Range("H4") = NOMBRE1.Value
Range("I4") = NAC1.Value
Range("J4") = SEXO1.Value
Range("E5") = DNI2.Value
Range("F5") = PAREN2.Value
Range("G5") = APELLIDO2.Value
Range("H5") = NOMBRE2.Value
Range("I5") = NAC2.Value
Range("J5") = SEXO2.Value
Range("E6") = DNI3.Value
Range("F6") = PAREN3.Value
Range("G6") = APELLIDO3.Value
Range("H6") = NOMBRE3.Value
Range("I6") = NAC3.Value
Range("J6") = SEXO3.Value
Range("E7") = DNI4.Value
Range("F7") = PAREN4.Value
Range("G7") = APELLIDO4.Value
Range("H7") = NOMBRE4.Value
Range("I7") = NAC4.Value
Range("J7") = SEXO4.Value
Range("E8") = DNI5.Value
Range("F8") = PAREN5.Value
Range("G8") = APELLIDO5.Value
Range("H8") = NOMBRE5.Value
Range("I8") = NAC5.Value
Range("J8") = SEXO5.Value
FECHAVENTA = Empty
VENDEDOR = Empty
SOLICITUD = Empty
IDUSUARIO = Empty
DNITITU = Empty
NOMBRETITU = Empty
APELLIDOTITU = Empty
SEXOTITU = Empty
NACTITU = Empty
PAREN1 = Empty
NOMBRE1 = Empty
APELLIDO1 = Empty
DNI1 = Empty
SEXO1 = Empty
NAC1 = Empty
PAREN2 = Empty
NOMBRE2 = Empty
APELLIDO2 = Empty
DNI2 = Empty
SEXO2 = Empty
NAC2 = Empty
PAREN3 = Empty
NOMBRE3 = Empty
APELLIDO3 = Empty
DNI3 = Empty
SEXO3 = Empty
NAC3 = Empty
PAREN4 = Empty
NOMBRE4 = Empty
APELLIDO4 = Empty
DNI4 = Empty
SEXO4 = Empty
NAC4 = Empty
PAREN5 = Empty
NOMBRE5 = Empty
APELLIDO5 = Empty
DNI5 = Empty
SEXO5 = Empty
NAC5 = Empty
TELEFONO = Empty
EMAIL = Empty
CALLE = Empty
NUMERO = Empty
PISO = Empty
DTO = Empty
LOCALIDAD = Empty
CP = Empty
PROV = Empty
MEDIO = Empty
TEMISORA = Empty
NTARJETA = Empty
NCBU = Empty
FECHAVENTA.SetFocus
End Sub
les agradeceria mucho si me dan una mano, mil gracias
12/11/2019 a las 12:28 am
Hola escribo el mismo código y sin embargo marca error, pero cuando copio y pego el código que bajo de tu archivo (que es exactamente igual al que nos compartes, únicamente que el nombre de la variable cambia) ese si corre. A que se deberá????
31/01/2020 a las 10:58 pm
Excelente
mil Gracias
29/03/2020 a las 6:19 am
Buenas.
Tengo un problema. Si la tabla tiene hasta 32.667 registros me lo hace perfectamente. Pero con más celdas, el procedimiento me casca en la línea:
UltFilaTC = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
UltFilaTC está declarado como INTEGER, por ahí no hay problema.Asi que entiendo que no puede devolver un entero, sino un SHORT
Gracias de antemano.
07/04/2020 a las 5:02 am
Si UltFilaTC está declarado como INTEGER, solo puede almacenar valores entre -32768 y 32767. Deberías convertirlo en LONG (-2,147,483,648 a 2,147,483,647)
07/04/2020 a las 2:08 pm
Buenas tardes, tengo una duda y quisiera ver si me pueden ayudar.
Tengo una tabla de la cual me interesa copiar los datos vacíos a otra hoja y no se como hacerlo, la macro que hice me copia las celdas que comtienen datos y quiero copiar las que no tengan datos.
Les adjunto las lineas de la macro:
Sub validardatoscompletos()
Dim ultimafilaEEE As Long
Dim ultimafilaDC As Long
Dim RSV, ID_NOMBRE, F_SALIDA, V_SALIDA, F_REGRESO, CLASE_REGRESO, COMENTARIOS, PRECIO, COMP, FECHA As String
Dim cont As Long
ultimafilaEEE = Sheets("EEE").Cells(Rows.Count, 4).End(xlUp).Row
ultimafilaDC = Sheets("DATOS_COMPLETOS").Cells(Rows.Count, 4).End(xlUp).Row
For cont = 7 To ultimafilaEEE
RSV = Trim(Sheets("EEE").Cells(cont, 4))
ID_NOMBRE = Trim(Sheets("EEE").Cells(cont, 5))
F_SALIDA = Trim(Sheets("EEE").Cells(cont, 6))
V_SALIDA = Trim(Sheets("EEE").Cells(cont, 7))
F_REGRESO = Trim(Sheets("EEE").Cells(cont, 8))
CLASE_REGRESO = Trim(Sheets("EEE").Cells(cont, 9))
COMENTARIOS = Trim(Sheets("EEE").Cells(cont, 10))
PRECIO = Trim(Sheets("EEE").Cells(cont, 11))
COMP = Trim(Sheets("EEE").Cells(cont, 12))
FECHA = Trim(Sheets("EEE").Cells(cont, 13))
If Len(RSV) > 0 And Len(ID_NOMBRE) > 0 And Len(F_SALIDA) > 0 And Len(V_SALIDA) > 0 And Len(F_REGRESO) > o And Len(CLASE_REGRESO) > 0 And Len(COMENTARIOS) > 0 And Len(PRECIO) > 0 And Len(COMP) > 0 And Len(FECHA) > 0 Then
ultimafilaDC = ultimafilaDC + 1
Sheets("DATOS_COMPLETOS").Cells(ultimafilaDC, 4) = RSV
Sheets("DATOS_COMPLETOS").Cells(ultimafilaDC, 5) = ID_NOMBRE
Sheets("DATOS_COMPLETOS").Cells(ultimafilaDC, 6) = F_SALIDA
Sheets("DATOS_COMPLETOS").Cells(ultimafilaDC, 7) = V_SALIDA
Sheets("DATOS_COMPLETOS").Cells(ultimafilaDC, 8) = F_REGRESO
Sheets("DATOS_COMPLETOS").Cells(ultimafilaDC, 9) = CLASE_REGRESO
Sheets("DATOS_COMPLETOS").Cells(ultimafilaDC, 10) = COMENTARIOS
Sheets("DATOS_COMPLETOS").Cells(ultimafilaDC, 11) = PRECIO
Sheets("DATOS_COMPLETOS").Cells(ultimafilaDC, 12) = COMP
Sheets("DATOS_COMPLETOS").Cells(ultimafilaDC, 13) = FECHA
Sheets("EEE").Cells(cont, 14) = "SI"
Else
Sheets("EEE").Cells(cont, 14) = "NO"
End If
Next cont
MsgBox "Proceso de copiado terminado exitosamente!", vbInformation, "Resultado"
End Sub
03/05/2021 a las 10:39 am
Buen dia, me podria ayudar
Tengo una tabla deseo encontrar la primera celda vacia, que este dentro de la tabla, que no necesariamente sea la ultima.
cual seria el codigo?