Quando si lavora con VBA in Excel, potrebbe essere necessario dividere una stringa in parti diverse in base a un delimitatore.
Ad esempio, se si dispone di un indirizzo, è possibile utilizzare la funzione VBA Split per ottenere parti diverse dell'indirizzo separate da una virgola (che in questo caso sarebbe il delimitatore).
SPLIT è una funzione di stringa incorporata in Excel VBA che puoi utilizzare per dividere una stringa di testo in base al delimitatore.
Funzione SPLIT VBA di Excel - Sintassi
Dividi ( Espressione, [Delimitatore], [Limita], [Confronta])
- Espressione: Questa è la stringa che vuoi dividere in base al delimitatore. Ad esempio, nel caso dell'esempio di indirizzo, l'intero indirizzo sarebbe l'"espressione". Nel caso in cui si tratti di una stringa di lunghezza zero (""), la funzione SPLIT restituirebbe un array vuoto.
- Delimitatore: Questo è un argomento facoltativo. Questo è il delimitatore utilizzato per dividere l'argomento "Espressione". Nel caso del nostro esempio di indirizzo, una virgola è un delimitatore che viene utilizzato per dividere l'indirizzo in parti diverse. Se non specifichi questo argomento, uno spazio è considerato il delimitatore predefinito. Nel caso in cui si fornisca una stringa di lunghezza zero (""), l'intera stringa "Espressione" viene restituita dalla funzione.
- Limite: Questo è un argomento facoltativo. Qui specifichi il numero totale di sottostringhe che vuoi restituire. Ad esempio, se si desidera restituire solo le prime tre sottostringhe dall'argomento "Espressione", questo sarebbe 3. Se non si specifica questo argomento, il valore predefinito è -1, che restituisce tutte le sottostringhe.
- Confrontare: Questo è un argomento facoltativo. Qui specifichi il tipo di confronto che vuoi che la funzione SPLIT esegua durante la valutazione delle sottostringhe. Sono disponibili le seguenti opzioni:
- Quando il confronto è 0: Questo è un confronto binario. Ciò significa che se il tuo delimitatore è una stringa di testo (diciamo ABC), allora questo farebbe distinzione tra maiuscole e minuscole. "ABC" non sarebbe uguale a "abc".
- Quando il confronto è 1: Questo è un confronto di testo. Ciò significa che se il tuo delimitatore è una stringa di testo (diciamo ABC), anche se hai "abc" nella stringa "Espressione", sarebbe considerato un delimitatore.
Ora che abbiamo coperto le basi della funzione SPLIT, vediamo alcuni esempi pratici.
Esempio 1 - Dividi le parole in una frase
Supponiamo che io abbia il testo - "The Quick Brown Fox Jumps Over The Lazy Dog".
Posso usare la funzione SPLIT per inserire ogni parola di questa frase come elemento separato in un array.
Il codice seguente sarebbe a questo:
Sub SplitWords() Dim TextStrng As String Dim Result() As String TextStrng = "La volpe marrone veloce salta sul cane pigro" Risultato() = Split(TextStrng) End Sub
Sebbene il codice non faccia nulla di utile, ti aiuterà a capire cosa fa la funzione Dividi in VBA.
La funzione Dividi divide la stringa di testo e assegna ogni parola all'array dei risultati.
Quindi in questo caso:
- Risultato (0) memorizza il valore "The"
- Risultato(1) memorizza il valore “Veloce”
- Risultato(2) memorizza il valore "Marrone" e così via.
In questo esempio, abbiamo specificato solo il primo argomento, che è il testo da dividere. Poiché non è stato specificato alcun delimitatore, utilizza il carattere spazio come delimitatore predefinito.
Nota importante:
- La funzione VBA SPLIT restituisce un array che inizia dalla base 0.
- Quando il risultato della funzione SPLIT viene assegnato a una matrice, tale matrice deve essere dichiarata come tipo di dati String. Se lo dichiari come tipo di dati Variant, mostrerà un errore di mancata corrispondenza del tipo). Nell'esempio sopra, nota che ho dichiarato Result() come tipo di dati String.
Esempio 2 - Conta il numero di parole in una frase
Puoi usare la funzione SPLIT per ottenere il numero totale di parole in una frase. Il trucco qui è contare il numero di elementi nell'array che ottieni quando dividi il testo.
Il codice seguente mostrerebbe una finestra di messaggio con il conteggio delle parole:
Sub WordCount() Dim TextStrng As String Dim WordCount As Integer Dim Result() As String TextStrng = "La volpe marrone veloce salta sul cane pigro" Risultato = Dividi(TextStrng) WordCount = UBound(Result()) + 1 MsgBox "Il Il conteggio delle parole è " & WordCount End Sub
In questo caso, la funzione UBound ci dice il limite superiore dell'array (cioè, il numero massimo di elementi che l'array ha). Poiché la base dell'array è 0, viene aggiunto 1 per ottenere il conteggio totale delle parole.
Puoi utilizzare un codice simile per creare una funzione personalizzata in VBA che prenderà il testo come input e restituirà il conteggio delle parole.
Il codice seguente creerà questa funzione:
Funzione WordCount(CellRef As Range) Dim TextStrng As String Dim Result() As String Result = Split(WorksheetFunction.Trim(CellRef.Text), " ") WordCount = UBound(Result()) + 1 End Function
Una volta creata, puoi utilizzare la funzione WordCount come qualsiasi altra funzione normale.
Questa funzione gestisce anche gli spazi iniziali, finali e doppi tra le parole. Ciò è stato reso possibile utilizzando la funzione TRIM nel codice VBA.
Nel caso in cui desideri saperne di più su come funziona questa formula per contare il numero di parole in una frase o vuoi conoscere una formula non VBA per ottenere il conteggio delle parole, dai un'occhiata a questo tutorial.
Esempio 3 - Utilizzo di un delimitatore diverso dallo spazio
Nei due esempi precedenti, abbiamo usato solo un argomento nella funzione SPLIT e il resto erano gli argomenti predefiniti.
Quando usi un altro delimitatore, devi specificarlo nella formula SPLIT.
Nel codice seguente, la funzione SPLIT restituisce un array basato su una virgola come delimitatore, quindi mostra un messaggio con ogni parola in una riga separata.
Sub CommaSeparator() Dim TextStrng As String Dim Result() As String Dim DisplayText As String TextStrng = "The, Quick, Brown, Fox, Jump, Over, The, Lazy, Dog" Risultato = Dividi (TextStrng, ",") Per i = LBound(Result()) To UBound(Result()) DisplayText = DisplayText & Risultato(i) & vbNewLine Avanti i MsgBox DisplayText End Sub
Nel codice sopra, ho usato il ciclo For Next per passare attraverso ogni elemento dell'array "Result" assegnandolo alla variabile "DisplayText".
Esempio 4 - Dividere un indirizzo in tre parti
Con la funzione SPLIT, puoi specificare quanti numeri di split vuoi ottenere. Ad esempio, se non specifico nulla, ogni istanza del delimitatore verrebbe utilizzata per dividere la stringa.
Ma se specifico 3 come limite, la stringa verrà divisa solo in tre parti.
Ad esempio, se ho il seguente indirizzo:
2703 Winifred Way, Indianapolis, Indiana, 46204
Posso usare la funzione Dividi in VBA per dividere questo indirizzo in tre parti.
Divide i primi due in base al delimitatore virgola e la parte rimanente diventa il terzo elemento dell'array.
Il codice seguente mostrerebbe l'indirizzo in tre diverse righe in una finestra di messaggio:
Sub CommaSeparator() Dim TextStrng As String Dim Result() As String Dim DisplayText As String TextStrng = "2703 Winifred Way, Indianapolis, Indiana, 46204" Risultato = Split(TextStrng, ",", 3) For i = LBound(Result( )) A UBound(Result()) DisplayText = DisplayText & Result(i) & vbNewLine Next i MsgBox DisplayText End Sub
Uno degli usi pratici di questo potrebbe essere quando si desidera dividere un indirizzo a riga singola nel formato mostrato nella finestra del messaggio. Quindi puoi creare una funzione personalizzata che restituisce l'indirizzo diviso in tre parti (con ogni parte in una nuova riga).
Il seguente codice farebbe questo:
Funzione ThreePartAddress(cellRef As Range) Dim TextStrng As String Dim Result() As String Dim DisplayText As String Result = Split(cellRef, ",", 3) For i = LBound(Result()) To UBound(Result()) DisplayText = DisplayText & Trim(Result(i)) & vbNewLine Next i ThreePartAddress = Mid(DisplayText, 1, Len(DisplayText) - 1) End Function
Una volta che hai questo codice nel modulo, puoi usare la funzione (ThreePartAddress) nella cartella di lavoro proprio come qualsiasi altra funzione di Excel.
Questa funzione accetta un argomento: il riferimento di cella che ha l'indirizzo.
Nota che affinché l'indirizzo risultante appaia in tre righe diverse, devi applicare il formato del testo a capo alle celle (è nella scheda Home nel gruppo Allineamento). Se il formato "Testo a capo" non è abilitato, vedrai l'intero indirizzo come una singola riga.
Esempio 5 - Ottieni il nome della città dall'indirizzo
Con la funzione Dividi in VBA, puoi specificare quale parte dell'array risultante desideri utilizzare.
Ad esempio, supponiamo che io stia dividendo il seguente indirizzo in base alla virgola come delimitatore:
2703 Winifred Way, Indianapolis, Indiana, 46204
L'array risultante assomiglierebbe a qualcosa come mostrato di seguito:
{"2703 Winifred Way", "Indianapolis", "Indiana", "46204"}
Poiché si tratta di un array, posso scegliere di visualizzare o restituire una parte specifica di questo array.
Di seguito è riportato un codice per una funzione personalizzata, in cui è possibile specificare un numero e restituirà quell'elemento dall'array. Ad esempio, se voglio il nome dello stato, posso specificare 3 (dato che è il terzo elemento nell'array).
Funzione ReturnNthElement(CellRef As Range, ElementNumber As Integer) Dim Result() As String Result = Split(CellRef, ",") ReturnNthElement = Result(ElementNumber - 1) End Function
La funzione precedente accetta due argomenti, il riferimento di cella che ha l'indirizzo e il numero dell'elemento che si desidera restituire. La funzione Dividi divide gli elementi dell'indirizzo e li assegna alla variabile Risultato.
Quindi restituisce il numero dell'elemento che hai specificato come secondo argomento. Si noti che poiché la base è 0, ElementNumber-1 viene utilizzato per restituire la parte corretta dell'indirizzo.
Nel caso in cui desideri il nome della città, puoi utilizzare 2 come secondo argomento. Nel caso in cui utilizzi un numero maggiore del numero totale di elementi, restituirà il #VALORE! errore.
Puoi semplificare ulteriormente il codice come mostrato di seguito:
Funzione ReturnNthElement(CellRef As Range, ElementNumber As Integer) ReturnNthElement = Split(CellRef, ",")(ElementNumber - 1) End Function
Nel codice sopra, invece di utilizzare la variabile Risultato, restituisce solo il numero dell'elemento specificato.
Quindi, se hai Split ("Buongiorno") (0), restituirà solo il primo elemento, che è "Buono".
Allo stesso modo, nel codice precedente, restituisce solo il numero dell'elemento specificato.