Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Navegación de Hojas de Cálculo | Trabajando con datos de Excel
Excel VBA para Automatización Empresarial

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.

Figura 3.2

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

  1. Escribir un Sub que encuentre la última fila usando el método End(xlUp) y la imprima en la Ventana Inmediata.
  2. En el mismo Sub, encontrar la última fila de una segunda manera usando CurrentRegion.Rows.Count, e imprimirla también; confirmar que coinciden.
  3. 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:
Pista
expand arrow

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.Print para mostrar el resultado en la ventana Inmediata (Ctrl+G).

2. Encontrar la última fila de otra manera con CurrentRegion

  • CurrentRegion se expande desde una sola celda inicial (prueba con Range("A1")) hasta el bloque contiguo completo.
  • .Rows.Count en 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 Sub nuevamente.
Solución
expand arrow
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
¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 2

Pregunte a AI

expand

Pregunte a AI

ChatGPT

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.

Figura 3.2

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

  1. Escribir un Sub que encuentre la última fila usando el método End(xlUp) y la imprima en la Ventana Inmediata.
  2. En el mismo Sub, encontrar la última fila de una segunda manera usando CurrentRegion.Rows.Count, e imprimirla también; confirmar que coinciden.
  3. 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:
Pista
expand arrow

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.Print para mostrar el resultado en la ventana Inmediata (Ctrl+G).

2. Encontrar la última fila de otra manera con CurrentRegion

  • CurrentRegion se expande desde una sola celda inicial (prueba con Range("A1")) hasta el bloque contiguo completo.
  • .Rows.Count en 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 Sub nuevamente.
Solución
expand arrow
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
¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 2
some-alt