Come selezionare celle/intervalli usando le procedure di Visual Basic in Excel

Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia di qualsiasi tipo, sia espressa che implicita, ivi incluse, senza limitazioni, le garanzie implicite di commerciabilità o idoneità per uno scopo particolare. In questo articolo si presuppone che l'utente conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug delle procedure. Gli esperti Microsoft sono autorizzati a fornire spiegazioni in merito alla funzionalità di una particolare routine, ma in nessun caso a modificare questi esempi per fornire funzionalità aggiuntive o a creare routine atte a soddisfare specifiche esigenze. Negli esempi di questo articolo vengono usati i metodi di Visual Basic elencati nella tabella seguente.

Method             Arguments
------------------------------------------
Activate           none
Cells              rowIndex, columnIndex
Application.Goto   reference, scroll
Offset             rowOffset, columnOffset
Range              cell1
                   cell1, cell2
Resize             rowSize, columnSize
Select             none
Sheets             index (or sheetName)
Workbooks          index (or bookName)
End                direction
CurrentRegion      none

Negli esempi di questo articolo vengono utilizzate le proprietà della tabella seguente.

Property         Use
---------------------------------------------------------------------
ActiveSheet      to specify the active sheet
ActiveWorkbook   to specify the active workbook
Columns.Count    to count the number of columns in the specified item
Rows.Count       to count the number of rows in the specified item
Selection        to refer to the currently selected range

Come selezionare una cella nel foglio di lavoro attivo

Per selezionare la cella D5 nel foglio di lavoro attivo, è possibile utilizzare uno degli esempi seguenti:

ActiveSheet.Cells(5, 4).Select
-or-
ActiveSheet.Range("D5").Select

Come selezionare una cella in un altro foglio di lavoro nella stessa cartella di lavoro

Per selezionare la cella E6 in un altro foglio di lavoro nella stessa cartella di lavoro, è possibile usare uno degli esempi seguenti:

Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(6, 5)
   -or-
Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6"))

In alternativa, è possibile attivare il foglio di lavoro e quindi usare il metodo 1 precedente per selezionare la cella:

Sheets("Sheet2").Activate
ActiveSheet.Cells(6, 5).Select

Come selezionare una cella in un foglio di lavoro in una cartella di lavoro diversa

Per selezionare la cella F7 in un foglio di lavoro in una cartella di lavoro diversa, è possibile usare uno degli esempi seguenti:

Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Cells(7, 6)
-or-
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("F7")

In alternativa, è possibile attivare il foglio di lavoro e quindi usare il metodo 1 precedente per selezionare la cella:

Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
ActiveSheet.Cells(7, 6).Select

Come selezionare un intervallo di celle nel foglio di lavoro attivo

Per selezionare l'intervallo C2:D10 nel foglio di lavoro attivo, è possibile usare uno degli esempi seguenti:

ActiveSheet.Range(Cells(2, 3), Cells(10, 4)).Select
ActiveSheet.Range("C2:D10").Select
ActiveSheet.Range("C2", "D10").Select

or

ActiveSheet.Range(ActiveSheet.Cells(2, 3), ActiveSheet.Cells(10, 4)).Select

or, alternatively, it could be simplified to this:

Range(Cells(2, 3), Cells(10, 4)).Select

Come selezionare un intervallo di celle in un altro foglio di lavoro nella stessa cartella di lavoro

Per selezionare l'intervallo D3:E11 in un altro foglio di lavoro nella stessa cartella di lavoro, è possibile usare uno degli esempi seguenti:

Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3:E11")
Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3", "E11")

In alternativa, è possibile attivare il foglio di lavoro e quindi usare il metodo 4 precedente per selezionare l'intervallo:

Sheets("Sheet3").Activate
ActiveSheet.Range(Cells(3, 4), Cells(11, 5)).Select

Come selezionare un intervallo di celle in un foglio di lavoro in una cartella di lavoro diversa

Per selezionare l'intervallo E4:F12 in un foglio di lavoro in una cartella di lavoro diversa, è possibile usare uno degli esempi seguenti:

Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4:F12")
Application.Goto _
      Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4", "F12")

In alternativa, è possibile attivare il foglio di lavoro e quindi usare il metodo 4 precedente per selezionare l'intervallo:

Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
   ActiveSheet.Range(Cells(4, 5), Cells(12, 6)).Select

Come selezionare un intervallo denominato nel foglio di lavoro attivo

Per selezionare l'intervallo denominato "Test" nel foglio di lavoro attivo, è possibile usare uno degli esempi seguenti:

Range("Test").Select
Application.Goto "Test"

Come selezionare un intervallo denominato in un altro foglio di lavoro nella stessa cartella di lavoro

Per selezionare l'intervallo denominato "Test" in un altro foglio di lavoro nella stessa cartella di lavoro, è possibile usare l'esempio seguente:

Application.Goto Sheets("Sheet1").Range("Test")

In alternativa, è possibile attivare il foglio di lavoro e quindi usare il metodo 7 precedente per selezionare l'intervallo denominato:

Sheets("Sheet1").Activate
Range("Test").Select

Come selezionare un intervallo denominato in un foglio di lavoro in una cartella di lavoro diversa

Per selezionare l'intervallo denominato "Test" in un foglio di lavoro in una cartella di lavoro diversa, è possibile usare l'esempio seguente:

Application.Goto _
   Workbooks("BOOK2.XLS").Sheets("Sheet2").Range("Test")

In alternativa, è possibile attivare il foglio di lavoro e quindi usare il metodo 7 precedente per selezionare l'intervallo denominato:

Workbooks("BOOK2.XLS").Sheets("Sheet2").Activate
Range("Test").Select

Come selezionare una cella relativa alla cella attiva

Per selezionare una cella di cinque righe sotto e quattro colonne a sinistra della cella attiva, è possibile usare l'esempio seguente:

ActiveCell.Offset(5, -4).Select

Per selezionare una cella con due righe sopra e tre colonne a destra della cella attiva, è possibile usare l'esempio seguente:

ActiveCell.Offset(-2, 3).Select

Nota

Si verificherà un errore se si tenta di selezionare una cella "fuori dal foglio di lavoro". Il primo esempio illustrato in precedenza restituirà un errore se la cella attiva si trova nelle colonne da A a D, poiché lo spostamento di quattro colonne a sinistra porta la cella attiva a un indirizzo di cella non valido.

Come selezionare una cella relativa a un'altra cella (non attiva)

Per selezionare una cella di cinque righe e quattro colonne a destra della cella C7, è possibile utilizzare uno degli esempi seguenti:

ActiveSheet.Cells(7, 3).Offset(5, 4).Select
ActiveSheet.Range("C7").Offset(5, 4).Select

Come selezionare un intervallo di celle scostamento da un intervallo specificato

Per selezionare un intervallo di celle della stessa dimensione dell'intervallo denominato "Test", ma che viene spostato quattro righe verso il basso e tre colonne a destra, è possibile usare l'esempio seguente:

ActiveSheet.Range("Test").Offset(4, 3).Select

Se l'intervallo denominato si trova in un altro foglio di lavoro (non attivo), attivare prima il foglio di lavoro e quindi selezionare l'intervallo usando l'esempio seguente:

Sheets("Sheet3").Activate
ActiveSheet.Range("Test").Offset(4, 3).Select

Come selezionare un intervallo specificato e ridimensionare la selezione

Per selezionare l'intervallo denominato "Database" e quindi estendere la selezione di cinque righe, è possibile usare l'esempio seguente:

Range("Database").Select
Selection.Resize(Selection.Rows.Count + 5, _
   Selection.Columns.Count).Select

Come selezionare un intervallo specificato, sfalsarlo e quindi ridimensionarlo

Per selezionare un intervallo di quattro righe e tre colonne a destra dell'intervallo denominato "Database" e includere due righe e una colonna in più rispetto all'intervallo denominato, è possibile usare l'esempio seguente:

Range("Database").Select
Selection.Offset(4, 3).Resize(Selection.Rows.Count + 2, _
   Selection.Columns.Count + 1).Select

Come selezionare l'unione di due o più intervalli specificati

Per selezionare l'unione (ovvero l'area combinata) dei due intervalli denominati "Test" e "Sample", è possibile usare l'esempio seguente:

Application.Union(Range("Test"), Range("Sample")).Select

Nota

che entrambi gli intervalli devono trovarsi nello stesso foglio di lavoro affinché l'esempio funzioni. Si noti inoltre che il metodo Union non funziona tra i fogli. Ad esempio, questa riga funziona bene.

Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet1!C3:D4"))

ma questa linea

Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet2!C3:D4"))

restituisce il messaggio di errore:

Metodo Union della classe dell'applicazione non riuscito

Come selezionare l'intersezione di due o più intervalli specificati

Per selezionare l'intersezione dei due intervalli denominati "Test" e "Sample", è possibile usare l'esempio seguente:

Application.Intersect(Range("Test"), Range("Sample")).Select

Si noti che entrambi gli intervalli devono trovarsi nello stesso foglio di lavoro affinché questo esempio funzioni.

Gli esempi 17-21 di questo articolo fanno riferimento al set di dati di esempio seguente. Ogni esempio indica l'intervallo di celle nei dati di esempio che verranno selezionati.

A1: Name    B1: Sales    C1: Quantity
A2: a       B2: $10      C2: 5
A3: b       B3:          C3: 10
A4: c       B4: $10      C4: 5
A5:         B5:          C5:
A6: Total   B6: $20      C6: 20

Come selezionare l'ultima cella di una colonna di dati contigui

Per selezionare l'ultima cella in una colonna contigua, usare l'esempio seguente:

ActiveSheet.Range("a1").End(xlDown).Select

Quando questo codice viene usato con la tabella di esempio, verrà selezionata la cella A4.

Come selezionare la cella vuota nella parte inferiore di una colonna di dati contigui

Per selezionare la cella sotto un intervallo di celle contigue, usare l'esempio seguente:

ActiveSheet.Range("a1").End(xlDown).Offset(1,0).Select

Quando questo codice viene usato con la tabella di esempio, verrà selezionata la cella A5.

Come selezionare un intero intervallo di celle contigue in una colonna

Per selezionare un intervallo di celle contigue in una colonna, usare uno degli esempi seguenti:

ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown)).Select
   -or-
ActiveSheet.Range("a1:" & ActiveSheet.Range("a1"). _
      End(xlDown).Address).Select

Quando questo codice viene usato con la tabella di esempio, verranno selezionate le celle da A1 a A4.

Come selezionare un intero intervallo di celle non contigue in una colonna

Per selezionare un intervallo di celle non contigue, usare uno degli esempi seguenti:

ActiveSheet.Range("a1",ActiveSheet.Range("a" & ActiveSheet.Rows.Count).End(xlUp)).Select
   -or-
ActiveSheet.Range("a1:" & ActiveSheet.Range("a" & ActiveSheet.Rows.Count). _
   End(xlUp).Address).Select

Quando questo codice viene usato con la tabella di esempio, selezionerà le celle da A1 a A6.

Come selezionare un intervallo rettangolare di celle

Per selezionare un intervallo rettangolare di celle intorno a una cella, utilizzare il metodo CurrentRegion. L'intervallo selezionato dal metodo CurrentRegion è un'area delimitata da qualsiasi combinazione di righe vuote e colonne vuote. Di seguito è riportato un esempio di come utilizzare il metodo CurrentRegion:

ActiveSheet.Range("a1").CurrentRegion.Select

Questo codice selezionerà le celle da A1 a C4. Di seguito sono elencati altri esempi per selezionare lo stesso intervallo di celle:

ActiveSheet.Range("a1", _
   ActiveSheet.Range("a1").End(xlDown).End(xlToRight)).Select
   -or-
ActiveSheet.Range("a1:" & _
   ActiveSheet.Range("a1").End(xlDown).End(xlToRight).Address).Select

In alcuni casi, è possibile selezionare le celle da A1 a C6. In questo esempio, il metodo CurrentRegion non funzionerà a causa della riga vuota nella riga 5. Gli esempi seguenti selezioneranno tutte le celle:

lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, lastCol).End(xlUp).Row
ActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select
    -or-
lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, lastCol).End(xlUp).Row
ActiveSheet.Range("a1:" & _
   ActiveSheet.Cells(lastRow, lastCol).Address).Select

Come selezionare più colonne non contigue di lunghezza variabile

Per selezionare più colonne non contigue di lunghezza variabile, usare la tabella di esempio e l'esempio di macro seguenti:

A1: 1  B1: 1  C1: 1  D1: 1
A2: 2  B2: 2  C2: 2  D2: 2
A3: 3  B3: 3  C3: 3  D3: 3
A4:    B4: 4  C4: 4  D4: 4
A5:    B5: 5  C5: 5  D5:
A6:    B6:    C6: 6  D6:
StartRange = "A1"
EndRange = "C1"
Set a = Range(StartRange, Range(StartRange).End(xlDown))
Set b = Range(EndRange, Range(EndRange).End(xlDown))
Union(a,b).Select

Quando questo codice viene usato con la tabella di esempio, verranno selezionate le celle A1:A3 e C1:C6.

Note sugli esempi

La proprietà ActiveSheet può in genere essere omessa, perché è implicita se un foglio specifico non è denominato. Ad esempio, invece di

ActiveSheet.Range("D5").Select

è possibile usare:

Range("D5").Select

La proprietà ActiveWorkbook può anche essere in genere omessa. A meno che non venga denominata una cartella di lavoro specifica, la cartella di lavoro attiva è implicita.

Quando si utilizza il metodo Application.Goto, se si desidera utilizzare due metodi Cells all'interno del metodo Range quando l'intervallo specificato si trova in un altro foglio di lavoro (non attivo), è necessario includere ogni volta l'oggetto Sheets. Ad esempio:

    With ActiveWorkbook.Sheets("Sheet1")
        Application.Goto .Range(.Cells(2, 3), .Cells(4, 5))
    End With

Per qualsiasi elemento tra virgolette (ad esempio, l'intervallo denominato "Test"), è anche possibile usare una variabile il cui valore è una stringa di testo. Ad esempio, invece di

ActiveWorkbook.Sheets("Sheet1").Activate

è possibile usare

ActiveWorkbook.Sheets(myVar).Activate

dove il valore di myVar è "Sheet1".