Questa volta vogliamo vedere come si affronta il problema della divisione di una stringa in più sottostringe.
Per fare questo c'è bisogno di un carattere separatore per isolare le parole contenute in una stringa.
Vedremo diversi metodi che possiamo utilizzare, dal più ovvio, ma più primitivo, al più evoluto.
Per suddividere la stringa viene usata una scansione della stringa stessa e qualora si incontra uno spazio si prende la porzione sinistra della frase. Quindi si continua sino alla fine continuando la ricerca di ulteriori caratteri spazio.
In questo primo esempio mi rifaccio ad un linguaggio di programmazione primordiale (Basic)
Con questo lavoriamo usando solo la funzione Mid la cui sintassi é: Mid(stringa, inizio, numero di caratteri da prelevare). Ricordo che mentre i primi due parametri sono obbligatori, il terzo (numero di caratteri da prelevare) è facoltativo, e se omesso equivale a "Tutto il resto".
Perciò:
E' ovvio che useremo in qualche modo il contenuto della variabile "Parola" ponendolo in una cella del foglio, in una TextBox, in una MsgBox o dove più ci aggrada. Questo è il possibile codice per eseguire queste azioni:
Sub dividi()
Dim Riga, Col, A, B, I, Parola
Riga = 1: Col = 1
A = "Questa è una bella giornata"
B = 1
For I = 1 To Len(A)
If Mid(A, I, 1) = " " Then
Parola = Mid(A, B, I - B)
Cells(Riga, Col) = Parola
Riga = Riga + 1
B = I + 1
End If
Next
Parola = Mid(A, B)
Cells(Riga, Col) = Parola
End Sub
Col Visual Basic possiamo contare su qualche aiuto supplementare.
Possiamo per esempio contare sulla funzione Instr che, sempre in questo caso, rileva la posizione del carattere spazio.
La funzione Instr cerca il pattern richiesto a partire da una determinata posizione nella stringa originaria:
la sintassi: InStr([inizio, ]stringa1, stringa2)
dove
In questo modo non eseguiamo una scansione di tutta la stringa, ma verifichiamo solo la presenza del carattere spazio nella stringa
Questo potrebbe essere un probabile codice da usare con questo metodo:
Sub FunzioneInstr()
Dim A, B, Inizio, Parola, Riga
A = "Questa è una bella giornata"
B = 1
Inizio = B
Riga = 1
While B <> 0
B = InStr(Inizio, A, " ")
If B <> 0 Then
Parola = Mid(A, Inizio, B - Inizio)
Inizio = B + 1
Else
Parola = Mid(A, Inizio)
End If
Cells(Riga, 1) = Parola
Riga = Riga + 1
Wend
End Sub
Possiamo semplificare la suddivisione di una stringa in tante sottostringhe utilizzando la Funzione Split. Questa funzione restituisce una matrice in cui sono memorizzate tutte le sottostringhe trovate
La sintassi è: Split(expression, delimiter)
dove
Il lavoro è più semplificato.
Una spiegazione più completa sull'uso della funzione split la possiamo leggere in
Suggerimenti (aggiornabile) ed in quest'altra pagina
Il codice potrebbe essere questo:
Sub FunzioneSplit()
Dim A, I, Parole, Riga
A = "Questa è una bella giornata"
Parole = Split(A, " ")
Riga = 1
For I = LBound(Parole) To UBound(Parole)
If Parole(I) <> "" Then
Cells(Riga, 1) = Parole(I)
Riga = Riga + 1
End If
Next
End Sub
Bene. Anche per questa volta spero di aver posto un altro piccolo mattone utile alla crescita della nostra conoscenza del VBA di excel.