Determinare un Intervallo

 

In VBA è comodo lavorare con gli intervalli denominati piuttosto che sulle celle del foglio di Excel.

Con questo metodo è possibile usare la stessa routine su più intervalli.

Lavorando col metodo tradizionale diverso è il metodo di lavorare sulle due tabelle sottostanti:

  A B C D E F G H I J
1                    
2                    
3                    
4                    
5                    
6                    
7                    
8                    
9                    
10                    
 
  E F G H I J K L M N
16                    
17                    
18                    
19                    
20                    
21                    
22                    
23                    
24                    
25                    

Infatti lavorando con queste tabelle usando i normali riferimenti alle celle troviamo non poche difficoltà per creare riferimenti che vadano bene sia per le celle della tabella sia per altri elementi (per esempio una matrice o un altro intervallo), specialmente lavorando sulla seconda tabella.

 

1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100

In certi casi per eseguire elaborazioni sui dati in esse contenuti, o per creare delle tabelle dobbiamo ricorrere a calcoli abbastanza pesanti e complessi.

Propongo subito un esempio:

creare in una tabella una semplice tabellina.

Per creare una tabellina normalmente è sufficiente la formula: R * C

dove R è il contatore del ciclo che spazzola le righe e C è quello del ciclo che spazzola le colonne.

For R = 1 To 10
For C = 1 To 10
Cells(R, C) = R * C
Next
Next

 

Il lavoro su diverse tabelle disposte sul foglio di lavoro

Con la prima tabella qui sopra mostrata potremmo scrivere qualcosa del genere:

Sub Tabella1()
Dim Colonne, C
Dim Righe, R
Colonne = 10
Righe = 10
For R = 1 To Righe
For C = 1 To Colonne
Cells(R, C) = R * C
Next
Next
End Sub

Con la seconda tabella vedremo complicarsi la formula per scrivere correttamente la nostra tabellina:

Sub Tabella2()
Dim Colonne, C
Dim Righe, R
Colonne = 10
Righe = 10
For R = 16 To 16 + Righe - 1
For C = 5 To 5 + Colonne - 1
Cells(R, C) = (R - 16 + 1) * (C - 5 + 1)
Next
Next
End Sub

Il lavoro con un intervallo predefinito

Se decidiamo di lavorare con gli intervalli denominati nell'una e nell'altra tabella possiamo usare sempre la stessa formula. Basta cambiare inizialmente, solo il riferimento alla cella iniziale. Per riferirci poi a singole celle di un intervallo così denominato possiamo semplicemente usare come riferimenti le coordinate di riga e colonna

Sub TabellaConIntervallo1()
Dim Intervallo As Range
Dim Righe, Colonne, R, C
With Range("A1")
' With Range("E16")
Righe = 10
Colonne = 10
Set Intervallo = .Resize(Righe, Colonne)
End With
For R = 1 To Righe
For C = 1 To Colonne
Intervallo(R, C) = R * C
Next
Next
End Sub

Determinare un intervallo

Abbiamo più di un modo per determinare e creare un intervallo denominato:

Conoscendo già le dimensioni da usare, come nell'esempio di sopra, si può opportunamente ridimensionare un intervallo anche partendo da una sola cella:

With Range("A1")
Righe = 10
Colonne = 10
Set Intervallo = .Resize(Righe, Colonne)
End With

L'intervallo avrà una griglia di 10 righe per 10 colonne.

 

Conoscendo i dati che dovremmo copiare in un intervallo (esempio raccolti in una matrice)

Righe = UBound(Matrice, 1)
Colonne = UBound(Matrice, 2)
With Range("E16")
Set Intervallo = .Resize(Righe, Colonne)
End With
Intervallo = Matrice

 

Non conoscendo le dimensioni, ma il contenuto già esistente:

With Range("E16").CurrentRegion
Righe = .Rows.Count
Colonne = .Columns.Count
Set Intervallo = .Resize(Righe, Colonne)
End With