Maiuscole - Minuscole - impostarle sul foglio di lavoro. - dal 07/09/04 pagina vista: volte

Un semplice esercizio per ottenere che le celle che contengono testo, trasformino in automatico il contenuto in tutti caratteri maiuscoli (UCase) oppure tutti in minuscolo (LCase). E' possibile comunque, con una variante, determinare che solo la prima lettera di una parola sia trasformata in maiuscola.

Il ragionamento è semplice : può essere trasformato in maiuscolo o minuscolo solo il testo, per i numeri non esiste maiuscolo o minuscolo, come pure per le date, mentre per evitare possibili modifiche alle formule contenute nelle celle, escluderemo dall'operazione tali celle, identificandole attraverso la proprietà HasFormula (proprietà dell'"Insieme Range").

Poichè potremmo aver bisogno di maiuscole o minuscole solo in alcune aree dei nostri fogli, dovremo necessariamente identificare queste aree, inserendo i loro riferimenti nelle istruzioni; va da se che se volessimo applicare le modifiche ai contenuti dell'intero foglio attivo, basterebbe usare la sintassi : ActiveSheet, ma vediamo alcune possibili soluzioni:

  • usare Selection per identificare l'intervallo dell'area; basterà selezionare tutto l'intervallo su cui ci interessa agire, e poi premere il pulsante al quale avremo assegnato la nostra macro, questa:

  • Sub ConvertiMaiuscole()
    Dim CL As Range  
    For Each CL In Selection.Cells
    If CL.HasFormula = False Then
    CL.Value = UCase(CL.Value)
    End If
    Next CL
    End Sub

cosa abbiamo fatto? abbiamo dichiarato la variabile "CL" di tipo "Range", poi iniziamo un ciclo For Each.., cioè : per ogni CL (cella), nelle celle selezionate (Selection.Cells), controlliamo con If che la cella in quel momento "letta" non contenga una formula (HasFormula = False): se la cella non contiene una formula, allora (Then) rendiamo il contenuto della cella letta uguale allo stesso contenuto ma trasformato tutto in Maiuscole (UCase), e passiamo con Next CL alla cella successiva -  Se anzichè tutto maiuscolo, volessimo tutto minuscolo, basterà sostituire Ucase con LCase, e verrà modificato tutto in minuscolo. Il vantaggio di aver usato Selection ci consente di agire di volta in volta sulle aree che vogliamo, compreso una singola cella, senza bisogno di creare istruzioni con intervalli preimpostati nelle istruzioni.

  • se invece vorremo agire su un'area fissa, per esempio sulla colonna B, dalla riga 3 alla riga 100, basterà modificare l'istruzione:

  • For Each CL In Selection.Cells      con:

  • For Each CL In ActiveSheet.Range("B3:B100")  -  chiaramente potrete modificare liberamente i riferimenti secondo le vostre esigenze.

  • oppure per eseguire la modifica sull'intero foglio, con :

  • For Each CL In ActiveSheet.Cells   -  (tenendo presente che su un foglio ci sono oltre 16 milioni di celle, e se fossero tutte occupate, pazienterete un pochino....).

  • o meglio ancora, riferirsi all' UsedRange del foglio attivo, che comprenderà tutte le celle occupate del foglio, così

  • For Each CL In ActiveSheet.UsedRange

Ora vediamo invece come fare per rendere maiuscola solo la prima lettera di testo contenuto in una cella. Anche in questo caso dovremo sempre definire l'intervallo su cui agire, (e valgono le cose appena dette), ma dovremo compiere anche altre cose, vediamo la macro:

  • Sub InizialeMaiuscola()
    Dim CL As Range
    For Each CL In Selection.Cells
    If CL.HasFormula = False Then
    Trimma = Trim(CL.Value)
    Iniziale = Left(Trimma, 1)
    Resto = Mid(Trimma, 2)
    CL.Value = UCase(Iniziale) & Resto
    End If
    Next CL
    End Sub

anche qui escluderemo le celle contenenti formule (CL.HasFormula = False), poi dovremo isolare la lettera iniziale dal testo contenuto nella cella (CL) in quel momento letta, e per farlo in tutta tranquillità, usiamo una variabile "Trimma" che sarà uguale al contenuto della cella ma senza eventuali spazi vuoti iniziali (e finali) tramite la funzione Trim; questo ci assicura che la prima lettera che andremo a considerare con la variabile "Iniziale", sia sicuramente la prima da sinistra (Left(Trimma, 1)); identificata l'iniziale, alla quale applicheremo UCase, usiamo una terza variabile "Resto" che ci consente di reperire, partendo dalla seconda posizione di tutta la parola (o stringa), tramite l'istruzione Mid, tutto il rimanente della parola (o stringa) contenuta nella cella. A questo punto concateniamo ( & ) l'iniziale resa maiuscola (UCase(Iniziale)) con il rimanente della parola (Resto) e lo sostituiamo al contenuto della cella in quel momento letta (CL.Value = ...).

I più volenterosi sapranno sfruttare le routines sopra viste per l'inserimento nell'evento WorkSheet_Change, per ottenere in automatico l'esecuzione delle istruzioni. Ricordo solo di usare il metodo Intersect in questo caso (vedi articolo in questa sezione), per limitare l'azione da compiere solo sulle aree che interessano.

 

Buon lavoro a tutti.

prelevato sul sito www.ennius.altervista.org