Ho elaborato su una cartella indipendente una funzione che delimiti un range ricercando in una colonna una "stringa limite", ossia una cella che contenga una determinata stringa, che nella fattispecie è la stringa vuota.
Così facendo una lista può essere tutta compresa in un range, fino alla fine, in quanto la cella successiva conterrà una stringa vuota.
Ecco la funzione:
Function misuraRange(rigaIniziale As Integer, colonnaIniziale As Integer, colonnaFinale As Integer, stringaLimite As String) As Range Dim k As Integer k = rigaIniziale Do While Cells(k, colonnaIniziale).FormulaR1C1 <> stringaLimite k = k + 1 Loop Set misuraRange = Range(Cells(rigaIniziale, colonnaIniziale), Cells(k - 1, colonnaFinale)) End FunctionEd ecco come l'ho testata:
Sub Denomina() Names.Add Name:="CampoDiCelle", RefersTo:="=" & misuraRange(1, 1, 2, "").Address(True, True) Range("CampoDiCelle").Select End SubMettendo una lista di nomi nella colonna 1 (A), la funzione misuraRange mi restituisce il range limitato in basso dalla stringa vuota nella colonna 1. Quindi lo denomino.
Potrei fare in modo che la funzione mi restituisca direttamente la descrizione del range in notazione A1?
Proviamo
Però vorrei denominare meglio questa funzione, perché misuraRange non mi ispira molto.
RangeMisurato forse è un po' meglio.
Function RangeMisurato(rigaIniziale As Integer, colonnaIniziale As Integer, colonnaFinale As Integer, stringaLimite As String) As Range Dim k As Integer k = rigaIniziale Do While Cells(k, colonnaIniziale).FormulaR1C1 <> stringaLimite k = k + 1 Loop Set RangeMisurato = Range(Cells(rigaIniziale, colonnaIniziale), Cells(k - 1, colonnaFinale)) End FunctionEd ecco un'altra funzione che restituisce il nome del range nella giusta notazione:
Function NomeRangeMisurato(rigaIniziale As Integer, colonnaIniziale As Integer, colonnaFinale As Integer, stringaLimite As String) As String Dim k As Integer k = rigaIniziale Do While Cells(k, colonnaIniziale).FormulaR1C1 <> stringaLimite k = k + 1 Loop NomeRangeMisurato = Range(Cells(rigaIniziale, colonnaIniziale), Cells(k - 1, colonnaFinale)).Address(True, True) End Functione funziona con questo codice:
Names.Add Name:="CampoDiCelle", RefersTo:="=" & NomeRangeMisurato(1, 1, 2, "")Le due funzioni accettano come parametri:
- la riga iniziale, che è quella nella quale viene ricercata la stringa limite;
- la colonna iniziale;
- la colonna finale;
- la stringa limite che segna la fine del range in senso verticale
Nessun commento:
Posta un commento