Categorie
Automazione Excel

Problema della individuazione automatica dell’ ultima riga e dell’ ultima colonna con dati in un file Excel

In un foglio di calcolo il problema della individuazione dell’ ultima riga e dell’ ultima colonna in foglio di calcolo consiste nel determinare la posizione dell’ ultima riga e dell’ ultima colonna in cui sono presenti dei valori.

Nelle automazioni dei file Excel è fondamentale conoscere queste coordinate per poter effettuare ricerche, elaborazioni e scrivere nelle opportune celle senza rischiare di persedere dati andando a sovrascriverli.

In particolare, se si vuole individuare la riga finale, bisogna considerare tutte le righe del foglio di calcolo e contarle. La riga finale sarà quella contenente il numero più alto. Analogamente, per individuare la colonna finale, bisogna considerare tutte le colonne del foglio di calcolo e contarle. La colonna finale sarà quella contenente il numero più basso.

Se per le righe va bene individuare il numero più alto, per le colonne non basta individuare il numero per riferirsi correttamente alle coordinate della colonna perchè queste sono espresse in lettere.

Sarà necessario convertire il numero in lettere. E’ questa la parte più complessa: Excel può utilizzare un massimo di 16.384 colonne, a cui ci si riferisce con lettere partendo dalla A alla Z per le prime 26 colonne, continuando dalla AA alla AZ per le successive 26 colonne, proseguendo ancora dalla BA alla BZ per altre 26 colonne e così via fino alla colonna 16348 che verrà espressa dalla sequenza di lettere XFD

Vediamo con una macro di esempio come gestire questo problema.

In figura una base dati di 21 righe e 3 colonne che riportano id, regione e popolazione. La riga 21 contiene gli ultimi dati e la colonna C è l’ultima colonna con dati. Quindi in questo esempio bisogna recuperare le informazioni 21 per l’ ultima riga e ‘C’ per l’ultima colonna.

‘Variabili
Dim DatiSheet As Worksheet
Dim DatiRange As Range
Dim LastRow, LastCol As Long
Dim LastColLetter As String

Supponendo che i dati si trovino nel ‘Foglio1’ del file Excel ecco come calcolare il valore numerico della ultima riga e della ultima colonna valorizzati

‘Foglio dati
Set DatiSheet = Worksheets(“Foglio2”)’Calcolo ultima riga e ultima colonna con dati
LastRow = DatiSheet.UsedRange.Rows.Count
LastCol = DatiSheet.UsedRange.Columns.Count

A questo punto la variabile LastRow contiene il valore 21 cioè l’ultima riga con dati mentre LastCol contiene il valore 3 che deve essere convertito in lettera.
Scriviamo la seguente funzione di conversione da numero a sequenza di lettere

Function NumCol2Letter(nCol As Long) As StringDim i As Long

i = nCol
NumCol2Letter = “”

Do While nCol > 0
i = Int((nCol – 1) / 26)
NumCol2Letter = Chr(((nCol – 1) Mod 26) + 65) & NumCol2Letter
nCol = i
Loop

End Function

Quindi a questo punto possiamo riferirci all’ ultima colonna con dati richiamando la funzione appena scritta passandogli come argomento il numero colonna LastCol, come di seguito ad esempio

MsgBox NumCol2Letter(LastCol)

Ecco la subroutine che recupera e mostra a video LastRow e LastCol

Sub AggiornaGrafico()Dim DatiSheet As Worksheet

Dim LastRow, LastCol As Long
Dim LastColLetter As String

‘Foglio dati
Set DatiSheet = Worksheets(“Foglio2”)

‘Calcolo ultima riga e ultima colonna con dati
LastRow = DatiSheet.UsedRange.Rows.Count
LastCol = DatiSheet.UsedRange.Columns.Count

MsgBox LastRow
MsgBox NumCol2Letter(LastCol)

End Sub