Suddividere il testo di una cella

Iniziamo con l'indicare un elenco di nomi che vogliamo trattare.

COGNOME E NOME COGNOME NOME
Migliavacca Luigi    
Rizzi Carlo    
Liberali Franca    
Di Maggio Mario    
Scicchitano Andrea    
Maggi Massimo    
De Curti Oreste    
Edelvisi Maurizio    
Gerardini Silvano    
Pasotti Alessio    
Calvi Giovanni    
Poggi Giuseppe    

 

Dividere il contenuto di una cella

Questa volta vorrei cimentarmi e farvi cimentare in una operazione opposta: dividere il contenuto di una cella e porlo in due celle distinte.

Mettiamo di avere in un foglio di Excel sempre la solita tabella anagrafica

Come il solito i nomi ed i cognomi sono reali, ma il loro abbinamento è assolutamente casuale, per cui la seguente lista rispetta perfettamente la Privacy dei poveri malcapitati di cui sto usando i dati personali.

Se, sempre per caso, nell'abbinamento casuale che ho compiuto, riconoscete qualche Sig. Cognome Nome, state sicuri che non si tratta di chi pensate.

Ma torniamo al nostro problema. Per raggiungere il nostro obiettivo dobbiamo superare alcune difficoltà ed usare molte funzioni e proprietà.

Tra le difficoltà da superare:

Le funzioni e le proprietà usate in questa routine:

 

Per dividere una stringa dobbiamo individuare un carattere separatore che fa da collante tra le varie sottostringhe di cui la stringa principale è formata.

In questa tabella notiamo che tale carattere è senz'altro lo spazio.

Ora si tratta di trovare il metodo che ci permetta di trovare un metodo che ci permetta, nonostante il carattere separatore, di suddividere la stringa in modo che i cognomi, formati da una o da più sottostringhe, siano prelevati in una unica sottostringa e i nomi in un'altra sottostringa.

Notiamo che il Cognome precede il Nome quindi dobbiamo trovare il metodo che ci permetta di separare il cognome dal nome nella giusta maniera.

In VBA abbiamo due funzioni che riescono ad individuare il carattere separatore e che ci indica anche la sua posizione:

A questo punto la nostra scelta cade sull'uso di questa seconda funzione, la InStrRev, che ci restituisce la posizione che l'ultimo carattere spazio occupa nella stringa principale.

Ottenuta questa posizione sarà chiaro che la sottostringa che va dal primo carattere fino a quel punto sarà rappresentata dal cognome e la sottostringa che va da questo punto alla fine della stringa sarà rappresentata dal nome.

Per dividere la stringa nelle varie sottostringhe possiamo rivolgerci a queste Funzioni: Left, Mid, Right. Ora dobbiamo vedere come usarle.

Una nota merita la funzione Mid per via del suo terzo argomento, NumCar, che è facoltativo. Se omesso, o se nel testo vi sono meno caratteri che in NumCar (compreso il carattere di start), vengono restituiti tutti i caratteri dalla posizione start alla fine della stringa.

Vediamo ora come usare queste funzioni in questo lavoro:

per Migliavacca Luigi (affidato alla variabile MiaStringa)

con MiaPos = InStrRev(MiaStringa, " ", -1) troviamo che 12 è la posizione del carattere spazio (lo possiamo vedere in questo riquadro)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
M i g l i a v a c c a   L u i g i

A questo punto possiamo prelevare la parte sinistra con:

Cognome = Left(MiaStringa, MiaPos - 1)

penso sia chiaro del perchè del semplice calcolo MiaPos - 1 che serve a prelevare 12-1 carattere

la variabile Cognome conterrà la sottostringa Migliavacca

 

Per prelevare la parte destra della stringa possiamo usare una delle seguenti:

Nome = Mid(MiaStringa, MiaPos + 1, Len(MiaStringa) - MiaPos)
Nome = Mid(MiaStringa, MiaPos + 1)
Nome = Right(MiaStringa, Len(MiaStringa) - MiaPos)

Di queste 3 istruzioni, che sono equivalenti notiamo che delle due istruzioni che usano la Funzione Mid

il calcolo MiaPos + 1 serve per spostarsi sul 13° carattere mentre Len(MiaStringa) - MiaPos serve per calcolare quanti caratteri prelevare (Len(MiaStringa) - MiaPos è uguale a 17, Miapos è uguale a 12) cioè 5

 

Per Di Maggio Mario avremo questo:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
D i   M a g g i o   M a r i o

In questo caso, invece di lavorare sulla dodicesima posizione lavoriamo dulla decima.

 

Questa che segue potrebbe essere una probabile routine per lavorare sulla tabella che abbiamo visto ad inizio pagina:

Sub DividiParole()
Dim PriCella As String, UCella As String
Dim MiaStringa As String
Dim CL As Range, L
Dim MiaPos As Integer
UCella = Range("A2").End(xlDown).Address
For Each CL In Range("A2:" & UCella)
MiaStringa = CL
MiaPos = InStrRev(MiaStringa, " ", -1)
CL.Offset(0, 1) = Left(MiaStringa, MiaPos - 1)
CL.Offset(0, 2) = Mid(MiaStringa, MiaPos + 1)
'in alternativa possiamo usare le seguenti
'CL.Offset(0, 2) = Mid(MiaStringa, MiaPos + 1, Len(MiaStringa) - MiaPos)
'CL.Offset(0, 2) = Right(MiaStringa, Len(MiaStringa) - MiaPos)

Next
End Sub

 

Bene siamo pronti per affrontare un altro tema.