Navegación de Hojas de Cálculo
Desliza para mostrar el menú
Los datos reales no vienen con una etiqueta que indique dónde terminan. Codificar de forma fija Range("A1:I5") deja de funcionar el día que alguien añade un sexto pedido; por eso, necesitas preguntarle a la hoja dónde terminan sus datos.
Encontrar la última fila
La línea de código más utilizada en todo este curso:
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Lee esto de derecha a izquierda: comienza en la parte inferior de la columna A (ws.Rows.Count), sube (End(xlUp)) hasta encontrar la primera celda ocupada y devuelve su número de fila. Funciona sin importar cuántos pedidos existan.
Encontrar la última columna
Funciona de la misma manera, pero en sentido horizontal:
Dim lastCol As Long
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
UsedRange
Informa sobre el área rectangular completa de la hoja que alguna vez ha contenido datos; útil para una verificación rápida, pero úsalo con precaución: recuerda las celdas que solían tener datos incluso después de eliminar su contenido, por lo que puede sobrestimar el rango real de datos.
Debug.Print ws.UsedRange.Address ' e.g. $A$1:$I$6
Debug.Print ws.UsedRange.Rows.Count ' 6
CurrentRegion
Generalmente la mejor herramienta: se expande desde una sola celda hasta el bloque contiguo de datos a su alrededor, deteniéndose en la primera fila o columna en blanco; coincide exactamente con una tabla limpia como Orders:
Dim tableRange As Range
Set tableRange = ws.Range("A1").CurrentRegion
Debug.Print tableRange.Address ' $A$1:$I$6
Debug.Print tableRange.Rows.Count - 1 ' 5 — subtract 1 to exclude the header
Tarea
- Escribir un
Subque encuentre la última fila usando el métodoEnd(xlUp)y la imprima en la Ventana Inmediata. - En el mismo
Sub, encontrar la última fila de una segunda manera usandoCurrentRegion.Rows.Count, e imprimirla también; confirmar que coinciden. - Agregar manualmente una sexta orden en la fila 7 de la hoja, volver a ejecutar la macro y confirmar que ambos métodos ahora reportan 7 sin cambios en el código:
1. Encontrar la última fila con End(xlUp)
- Comenzar desde la parte inferior de la columna A y saltar hacia arriba — el mismo patrón de la sección "Finding the last row" del Capítulo 3.
- Utilizar
Debug.Printpara mostrar el resultado en la ventana Inmediata (Ctrl+G).
2. Encontrar la última fila de otra manera con CurrentRegion
CurrentRegionse expande desde una sola celda inicial (prueba conRange("A1")) hasta el bloque contiguo completo..Rows.Counten esa región incluye la fila de encabezado — recuerda la nota del capítulo sobre restar 1 si solo deseas las filas de datos. Como esta tarea solo pide comparar ambos métodos, imprime primero el conteo bruto y luego razona sobre el encabezado.
3. Agregar una sexta fila y volver a ejecutar
- No se requieren cambios en el código — simplemente escribe un nuevo pedido directamente en la fila 7 de la hoja de cálculo y ejecuta exactamente el mismo
Subnuevamente.
Sub CompareLastRowMethods()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Orders")
Dim lastRowMethod1 As Long
lastRowMethod1 = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Debug.Print "End(xlUp): " & lastRowMethod1
Dim lastRowMethod2 As Long
lastRowMethod2 = ws.Range("A1").CurrentRegion.Rows.Count
Debug.Print "CurrentRegion: " & lastRowMethod2
End Sub
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Navegación de Hojas de Cálculo
Los datos reales no vienen con una etiqueta que indique dónde terminan. Codificar de forma fija Range("A1:I5") deja de funcionar el día que alguien añade un sexto pedido; por eso, necesitas preguntarle a la hoja dónde terminan sus datos.
Encontrar la última fila
La línea de código más utilizada en todo este curso:
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Lee esto de derecha a izquierda: comienza en la parte inferior de la columna A (ws.Rows.Count), sube (End(xlUp)) hasta encontrar la primera celda ocupada y devuelve su número de fila. Funciona sin importar cuántos pedidos existan.
Encontrar la última columna
Funciona de la misma manera, pero en sentido horizontal:
Dim lastCol As Long
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
UsedRange
Informa sobre el área rectangular completa de la hoja que alguna vez ha contenido datos; útil para una verificación rápida, pero úsalo con precaución: recuerda las celdas que solían tener datos incluso después de eliminar su contenido, por lo que puede sobrestimar el rango real de datos.
Debug.Print ws.UsedRange.Address ' e.g. $A$1:$I$6
Debug.Print ws.UsedRange.Rows.Count ' 6
CurrentRegion
Generalmente la mejor herramienta: se expande desde una sola celda hasta el bloque contiguo de datos a su alrededor, deteniéndose en la primera fila o columna en blanco; coincide exactamente con una tabla limpia como Orders:
Dim tableRange As Range
Set tableRange = ws.Range("A1").CurrentRegion
Debug.Print tableRange.Address ' $A$1:$I$6
Debug.Print tableRange.Rows.Count - 1 ' 5 — subtract 1 to exclude the header
Tarea
- Escribir un
Subque encuentre la última fila usando el métodoEnd(xlUp)y la imprima en la Ventana Inmediata. - En el mismo
Sub, encontrar la última fila de una segunda manera usandoCurrentRegion.Rows.Count, e imprimirla también; confirmar que coinciden. - Agregar manualmente una sexta orden en la fila 7 de la hoja, volver a ejecutar la macro y confirmar que ambos métodos ahora reportan 7 sin cambios en el código:
1. Encontrar la última fila con End(xlUp)
- Comenzar desde la parte inferior de la columna A y saltar hacia arriba — el mismo patrón de la sección "Finding the last row" del Capítulo 3.
- Utilizar
Debug.Printpara mostrar el resultado en la ventana Inmediata (Ctrl+G).
2. Encontrar la última fila de otra manera con CurrentRegion
CurrentRegionse expande desde una sola celda inicial (prueba conRange("A1")) hasta el bloque contiguo completo..Rows.Counten esa región incluye la fila de encabezado — recuerda la nota del capítulo sobre restar 1 si solo deseas las filas de datos. Como esta tarea solo pide comparar ambos métodos, imprime primero el conteo bruto y luego razona sobre el encabezado.
3. Agregar una sexta fila y volver a ejecutar
- No se requieren cambios en el código — simplemente escribe un nuevo pedido directamente en la fila 7 de la hoja de cálculo y ejecuta exactamente el mismo
Subnuevamente.
Sub CompareLastRowMethods()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Orders")
Dim lastRowMethod1 As Long
lastRowMethod1 = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Debug.Print "End(xlUp): " & lastRowMethod1
Dim lastRowMethod2 As Long
lastRowMethod2 = ws.Range("A1").CurrentRegion.Rows.Count
Debug.Print "CurrentRegion: " & lastRowMethod2
End Sub
¡Gracias por tus comentarios!