Navigazione tra i Fogli di Lavoro
Scorri per mostrare il menu
I dati reali non hanno un'etichetta che indica dove finiscono. Hardcodare Range("A1:I5") smette di funzionare il giorno in cui viene aggiunto un sesto ordine — quindi è necessario chiedere al foglio dove finiscono i suoi dati.
Trovare l'ultima riga
La riga di codice più utilizzata in tutto questo corso:
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Leggi da destra a sinistra: parti dal fondo della colonna A (ws.Rows.Count), sali (End(xlUp)) fino a raggiungere la prima cella occupata e restituisci il suo numero di riga. Funziona indipendentemente dal numero di ordini presenti.
Trovare l'ultima colonna
Funziona allo stesso modo, ma in orizzontale:
Dim lastCol As Long
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
UsedRange
Riporta l'intera area rettangolare del foglio che ha mai contenuto dati — utile per un controllo rapido, ma da usare con cautela: ricorda le celle che in passato contenevano dati anche dopo che ne hai cancellato il contenuto, quindi può sovrastimare l'effettivo intervallo di dati.
Debug.Print ws.UsedRange.Address ' e.g. $A$1:$I$6
Debug.Print ws.UsedRange.Rows.Count ' 6
CurrentRegion
Di solito lo strumento migliore: si espande da una singola cella fino al blocco contiguo di dati circostante, fermandosi alla prima riga o colonna vuota — corrisponde esattamente a una tabella pulita come 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
Attività
- Scrivere una
Subche trovi l'ultima riga usando il metodoEnd(xlUp)e la stampi nella Finestra Immediata. - Nella stessa
Sub, trovare l'ultima riga in un secondo modo usandoCurrentRegion.Rows.Counte stampare anche questo valore — confermare che coincidano. - Aggiungere manualmente un sesto ordine alla riga 7 del foglio, rieseguire la macro e confermare che entrambi i metodi ora riportano 7 senza modifiche al codice:
1. Trovare l'ultima riga con End(xlUp)
- Partenza dall'ultima cella in basso della colonna A e salto verso l'alto — lo stesso schema descritto nella sezione "Finding the last row" del Capitolo 3.
- Utilizzo di
Debug.Printper visualizzare il risultato nella Finestra Immediata (Ctrl+G).
2. Secondo metodo con CurrentRegion
CurrentRegionsi espande da una singola cella di partenza (ad esempioRange("A1")) fino al blocco contiguo completo..Rows.Countsu questa regione include la riga di intestazione — ricordare la nota del capitolo sulla necessità di sottrarre 1 se si vogliono solo le righe dati. Poiché il compito richiede solo di confrontare i due metodi, stampare prima il conteggio grezzo e ragionare successivamente sull'intestazione.
3. Aggiunta di una sesta riga e riesecuzione
- Nessuna modifica al codice necessaria — basta inserire un nuovo ordine direttamente nella riga 7 del foglio di lavoro, quindi eseguire nuovamente lo stesso
Sub.
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
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Navigazione tra i Fogli di Lavoro
I dati reali non hanno un'etichetta che indica dove finiscono. Hardcodare Range("A1:I5") smette di funzionare il giorno in cui viene aggiunto un sesto ordine — quindi è necessario chiedere al foglio dove finiscono i suoi dati.
Trovare l'ultima riga
La riga di codice più utilizzata in tutto questo corso:
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Leggi da destra a sinistra: parti dal fondo della colonna A (ws.Rows.Count), sali (End(xlUp)) fino a raggiungere la prima cella occupata e restituisci il suo numero di riga. Funziona indipendentemente dal numero di ordini presenti.
Trovare l'ultima colonna
Funziona allo stesso modo, ma in orizzontale:
Dim lastCol As Long
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
UsedRange
Riporta l'intera area rettangolare del foglio che ha mai contenuto dati — utile per un controllo rapido, ma da usare con cautela: ricorda le celle che in passato contenevano dati anche dopo che ne hai cancellato il contenuto, quindi può sovrastimare l'effettivo intervallo di dati.
Debug.Print ws.UsedRange.Address ' e.g. $A$1:$I$6
Debug.Print ws.UsedRange.Rows.Count ' 6
CurrentRegion
Di solito lo strumento migliore: si espande da una singola cella fino al blocco contiguo di dati circostante, fermandosi alla prima riga o colonna vuota — corrisponde esattamente a una tabella pulita come 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
Attività
- Scrivere una
Subche trovi l'ultima riga usando il metodoEnd(xlUp)e la stampi nella Finestra Immediata. - Nella stessa
Sub, trovare l'ultima riga in un secondo modo usandoCurrentRegion.Rows.Counte stampare anche questo valore — confermare che coincidano. - Aggiungere manualmente un sesto ordine alla riga 7 del foglio, rieseguire la macro e confermare che entrambi i metodi ora riportano 7 senza modifiche al codice:
1. Trovare l'ultima riga con End(xlUp)
- Partenza dall'ultima cella in basso della colonna A e salto verso l'alto — lo stesso schema descritto nella sezione "Finding the last row" del Capitolo 3.
- Utilizzo di
Debug.Printper visualizzare il risultato nella Finestra Immediata (Ctrl+G).
2. Secondo metodo con CurrentRegion
CurrentRegionsi espande da una singola cella di partenza (ad esempioRange("A1")) fino al blocco contiguo completo..Rows.Countsu questa regione include la riga di intestazione — ricordare la nota del capitolo sulla necessità di sottrarre 1 se si vogliono solo le righe dati. Poiché il compito richiede solo di confrontare i due metodi, stampare prima il conteggio grezzo e ragionare successivamente sull'intestazione.
3. Aggiunta di una sesta riga e riesecuzione
- Nessuna modifica al codice necessaria — basta inserire un nuovo ordine direttamente nella riga 7 del foglio di lavoro, quindi eseguire nuovamente lo stesso
Sub.
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
Grazie per i tuoi commenti!