domenica 21 settembre 2014

Funzione per la delimitazione di un range con successiva denominazione.

Bene.
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 Function
Ed ecco come l'ho testata:
Sub Denomina()
    Names.Add Name:="CampoDiCelle", RefersTo:="=" & misuraRange(1, 1, 2, "").Address(True, True)
    Range("CampoDiCelle").Select
End Sub
Mettendo 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 Function
Ed 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 Function
e 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
Okay!

Nessun commento:

Posta un commento