Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Navigazione tra i Fogli di Lavoro | Lavorare con i dati di Excel
Excel VBA per l'Automazione Aziendale

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.

Figura 3.2

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à

  1. Scrivere una Sub che trovi l'ultima riga usando il metodo End(xlUp) e la stampi nella Finestra Immediata.
  2. Nella stessa Sub, trovare l'ultima riga in un secondo modo usando CurrentRegion.Rows.Count e stampare anche questo valore — confermare che coincidano.
  3. 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:
Suggerimento
expand arrow

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.Print per visualizzare il risultato nella Finestra Immediata (Ctrl+G).

2. Secondo metodo con CurrentRegion

  • CurrentRegion si espande da una singola cella di partenza (ad esempio Range("A1")) fino al blocco contiguo completo.
  • .Rows.Count su 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.
Soluzione
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
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 2

Chieda ad AI

expand

Chieda ad AI

ChatGPT

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.

Figura 3.2

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à

  1. Scrivere una Sub che trovi l'ultima riga usando il metodo End(xlUp) e la stampi nella Finestra Immediata.
  2. Nella stessa Sub, trovare l'ultima riga in un secondo modo usando CurrentRegion.Rows.Count e stampare anche questo valore — confermare che coincidano.
  3. 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:
Suggerimento
expand arrow

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.Print per visualizzare il risultato nella Finestra Immediata (Ctrl+G).

2. Secondo metodo con CurrentRegion

  • CurrentRegion si espande da una singola cella di partenza (ad esempio Range("A1")) fino al blocco contiguo completo.
  • .Rows.Count su 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.
Soluzione
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
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 2
some-alt