lunedì 1 marzo 2010

Estrazione di testo da una cella

Tempo fa mi è stato chiesto se possiamo separare il contenuto di una cella distribuendolo nelle celle adiacenti, un carattere alla volta. Per esempio: in A1 c'è scritto: P16379. Voglio avere in A2: P, in B2: 1; in C2: 6; in D2: 3; in E2: 7 e in F2: 9. Solitamente si risolve il problema con codice Visual Basic. Ma ora troviamo una soluzione più semplice, che ci consente di imparare due funzioni, una delle quali appartiene a quelle che così da sole non servono a nulla, ma in questo caso...
Allora, avete messo in A1 il testo da elaborare? Ok.
Come possiamo avere in A2 il primo carattere contenuto nella cella A1? Ci servono due funzioni: STRINGA.ESTRAI e RIF.COLONNA(). Con la prima posso estrarre un certo numero di caratteri a partire da una determinata posizione. Nel nostro caso devo per cominciare estrarre un solo carattere nella prima posizione. quindi in A2 scriverò: =STRINGA.ESTRAI(A1;1;1), cioè dico a Excel di estrarre un solo carattere dal testo contenuto in A1 a partire dal primo carattere. In pratica ottengo P. Poi in B2 scriverò: =STRINGA.ESTRAI(A1;2;1) e otterrò 1. Poi in C2 scriverò: =STRINGA.ESTRAI(A1;3;1) e otterrò 6 e così via. Mmm. c'è un modo migliore? Certo. Avete notato che il numero da cui comincio a estrarre corrisponde alla colonna in cui mi trovo? Osservate il secondo argomento. In A2 parto dalla colonna 1 (e la colonna A è la PRIMA colonna); in B2 parto dalla colonna 2 (e la colonna B è la SECONDA colonna) è così via. E dunque? E allora posso usare una funzione che mi dica in quale colonna mi trovo, così "generalizzo" la mia funzione: una sola funzione andrà bene per tutte le colonne. RIF.COLONNA() mi restituisce il numero della colonna in cui sono. Attenzione che questa funzione non ha argomenti, ma sono necessarie le due parentesi. Per esempio, se vado in D4 e digito: =RIF.COLONNA() ottengo 4. Perché? Ma perché la colonna D è la quarta (A,B,C,D). La formula che ho usato in A2 perciò potrebbe essere:
=STRINGA.ESTRAI(A1;RIF.COLONNA();1).
Quando Excel la elabora, la risolve un pezzo alla volta e sostituisce RIF.COLONNA() con 1, perché siamo nella colonna A. Perciò questa formula può andare bene per tutte le colonne, purché usiamo un riferimento assoluto, così possiamo ricopiare la cella, trascinandola dal quadratino in basso a destra. La formula finale sarà in A2:=STRINGA.ESTRAI($A$1;RIF.COLONNA();1)
Possiamo trascinarla a destra di quanto ci serve e otterremo la suddivisione del testo contenuto in A1, un carattere alla volta nelle celle adiacenti.

Il punto fondamentale è questo: usando Excel bisogna cercare di generalizzare le formule che scriviamo, in modo tale da evitare errori e ridurre il numero delle formule.
Emanuele

Nessun commento: