Le Funzioni /Istruzioni  MID, RIGHT, LEFT

Quando si lavora con il vba, e si ha bisogno di identificare o selezionare una parte di un dato numerico o alfanumerico o testo, esistono delle procedure che utilizzando comandi appropriati ci consentono di ottenere ciò che vogliamo. Le tre funzioni/istruzioni argomento di questa pagina, appartengono a questo tipo di comandi. Cerchiamo di capire meglio cosa si intende per "identificare o selezionare", con un esempio: supponiamo di volere controllare ciò che scriveremo in una casella di testo (TextBox) in modo da non registrare dati non pertinenti, come un numero negativo se non vogliamo numeri negativi  o una data scritta non nel formato desiderato se decidiamo di adottare il formato classico rappresentato da gg/mm/aa (giorno a due cifre, barra,mese a due cifre, barra, anno a due cifre); bene, potremo adoperare la funzione MID. Sono esempi in cui appare evidente la posizione dei caratteri all'interno della "stringa" che dovremo controllare: nel caso di un numero negativo, il numero appare con il segno meno (-) davanti, cioè il primo carattere che compone la stringa di numeri (-10234). Nel caso del controllo del formato data  avremo nella stringa che forma la data stessa, la prima e seconda posizione occupate da numeri, la prima barra sarà nella terza posizione, poi quarta e quinta posizione ancora due numeri, sesta posizione una barra, e infine in settima e ottava posizione altri due numeri (01/10/02) . Perchè parliamo di posizione? perchè la funzione MID lavora appunto intercettando la posizione che gli chiederemo di controllare all'interno della stringa dati. Vediamo intanto la sintassi:

  • Sintassi

    Mid(variabilestringa, inizio[, lunghezza da estrarre]) = stringa

    La sintassi dell'istruzione Mid è composta dalle seguenti parti:

Parte Descrizione
variabilestringa Obbligatoria. Nome della variabile stringa da modificare o controllare.
inizio Obbligatoria. Variant (Long). Posizione di un carattere in varstringa dalla quale inizia la sostituzione del testo.
lunghezza da estrarre Facoltativa. Variant (Long). Numero di caratteri da estrarre, sostituire o modificare. Se omesso, viene utilizzata l'intera espressione stringa.
stringa Obbligatoria. Espressione stringa che sostituisce parte di variabilestringa

Per evitare confusioni, visto la tabella sopra, preciso che l'esempio di cui ci occupiamo è l'intercettazione di un determinato carattere, e NON la sua sostituzione con un altro, cosa peraltro possibile dato che la funzione lavora anche in questo senso. Vediamo quindi di trasformare la sintassi in un esempio, e relativa spiegazione, questa l'istruzione compilata:

If Mid(TextBox1, 1, 1) = "-" Then.......

questa l'impostazione sintattica :  Se Mid(varstringa è il contenuto di TextBox1, a partire dal primo carattere 1, e per la lunghezza di 1 carattere, cioè lo stesso primo carattere) è uguale al segno meno, allora........ Infatti un numero negativo che porta in prima posizione il segno meno verrebbe riconosciuto e verrebbe eseguita l'istruzione seguente a Then.

ora l'esempio con la data, in questo caso dovremo adoperare la concatenazione di due istruzioni Mid per eseguire il controllo di tutta una stringa, perchè andremo a controllare la presenza delle due barre :

if Mid(TextBox1, 3, 1) + Mid(TextBox1, 6, 1) <> "/"  Then.....

questa è l'impostazione sintattica : Se Mid(varstringa è il contenuto di TextBox1, a partire dal terzo carattere, e per la lunghezza di 1 carattere, cioè lo stesso terzo carattere) e (+) Mid(varstringa è il contenuto di TextBox1, a partire dal sesto carattere, e per la lunghezza di 1 carattere, cioè lo stesso sesto carattere) sono diversi (<>)dalla barra ( / ), allora...... Se la data quindi sarà scritta nel giusto formato scelto 09/08/01, le barre si troveranno al posto giusto (terza e sesta posizione) e non succederà niente, in caso contrario, il codice eseguirà l'istruzione prevista dopo Then. Da notare che il controllo sulle barre, controlla incidentalmente tutta la data se infatti avessimo scritto 9/08/01 oppure 09/ago/01 oppure 09-08-01 sarebbe scattato il controllo perchè le barre non sarebbero state intercettate nelle posizioni previste delle istruzioni Mid (ma al secondo e quinto posto per 9/08/01, e al terzo ma al settimo posto per 09/ago/01, e i trattini al posto delle barre). In realtà questo controllo non è completo,  perchè una data scritta 09/08/2001 verrebbe ritenuta valida in quanto le barre si trovano al posto giusto, ma l'anno è stato scritto a 4 cifre anzichè due. Ma vediamo dopo, quando si parlerà delle Funzioni Left e Right, come completare questo controllo.

Un altro esempio, potrebbe essere quello di estrarre da una data, solo il giorno, o il mese, o l'anno; vediamo le tre istruzioni in sequenza

X = Mid(TextBox1, 1 , 2) (X sarebbe quindi uguale a 09, cioè il contenuto della textbox1, a partire dalla prima posizione e lungo 2 valori)

X = Mid(TextBox1, 4 , 2) (X sarebbe quindi uguale a 08, cioè il contenuto della textbox1, a partire dalla quarta posizione e lungo 2 valori)

X = Mid(TextBox1, 7 , 2) (X sarebbe quindi uguale a 01, cioè il contenuto della textbox1, a partire dalla settima posizione e lungo 2 valori)

Ancora un esempio, relativo questa volta all'estrazione di un nome da una stringa nella quale almeno un dato sia di lunghezza costante, per esempio la parola totale seguita da un altro nome  totale Gino, totale dollari, totale euro, totale mensile, ecc. In un caso del genere sarebbe utile usare anche l'istruzione TRIM, ma ne parliamo un altra volta, diamo per scontato che dopo la parola totale inseriremo uno spazio, il che porta la nostra istruzione MID a intercettare tutto ciò che sarà dalla settima posizione in poi (6 lettere totale più una dello spazio fanno sette, e noi vogliamo ciò che sta dopo, quindi a partire dalla ottava posizione; siccome non sappiamo quanto sarà lunga la parola che segue, useremo l'istruzione MID senza fornire il parametro della lunghezza (non obbligatorio) e in questo caso verrà rilevato tutto ciò che sarà dalla ottava posizione in poi senza tenere conto di quanto è lungo. Queste le istruzioni (se nella TextBox1 avremo "totale Gino"):

X = Mid(TextBox1, 8) e X  sarà uguale a Gino,   oppure

X = Mid ("totale dollaro", 8) e X sarà uguale a dollaro

Anche se non pertinente all'argomento visto con l'ottica di questi esempi, è necessario conoscere l'utilizzo dell'istruzione MID come funzione per SOSTITUIRE una parola in una stringa di dati. In questi esempi l'istruzione MID viene utilizzata per sostituire un numero specificato di caratteri in una variabile stringa con i caratteri di un'altra stringa.

Dim MiaStringa
MiaStringa = "Il gatto salta"
' Inizializza la stringa.. Per capire meglio, assegniamo sotto le posizioni dei caratteri nella stringa

1 2 3 4 5 6 7 8 9 10 11 12 13 14
I L   G A T T O   S A L T A

nell'esempio sotto diciamo di sostituire nella stringa, a partire dalla quarta posizione e per la lunghezza di 5 caratteri, il contenuto con le stesse coordinate della stringa, con la parola pesce
Mid(MiaStringa, 4, 5) = "pesce"
' il risultato sarà MiaStringa = "Il pesce salta".

sotto invece diciamo di sostituire nella stringa, a partire dalla quarta posizione e senza indicare la lunghezza, il contenuto della stringa a partire dalla quarta posizione con la parola tonno
Mid(MiaStringa, 4) = "tonno"
' il risultato sarà MiaStringa = "Il tonno salta".

sotto ancora sostituiremo praticamente tutta la stringa in quanto le lunghezze delle parole da sostituire sono identiche
Mid(MiaStringa, 4) = "leone dorme" '
il risultato sarà MiaStringa = "Il leone dorme".

sarebbe diversa se la sostituzione fosse con parole di lunghezza diversa
Mid(MiaStringa, 4) = "leone dor"
' il risultato sarà MiaStringa = "Il leone dorta". (dor di dorme e ta di salta)

------------------------------------------------

Le Funzioni LEFT  e  RIGHT

Anche queste due funzioni possono essere usate per controllare se in una determinata stringa esistono dei valori che dovranno corrispondere alle nostre bisogne. Entrambe le funzioni lavorano intercettando a SINISTRA (LEFT) o a DESTRA (RIGHT) della nostra stringa, un certo numero di caratteri rappresentati dal numero che inseriamo nell'istruzione. Vediamo intanto la sintassi che è simile per tutte e due:

  • Sintassi

    Left(string, length)

  • La sintassi della funzione Left è composta dai seguenti argomenti predefiniti:

Parte Descrizione
string Obbligatoria. Espressione stringa dalla quale vengono restituiti i caratteri situati all'estrema sinistra. Se string contiene Null verrà restituito Null.
length Obbligatoria. Variant (Long). Espressione numerica che indica quanti caratteri devono essere restituiti. Se è 0, verrà restituita una stringa di lunghezza zero (""). Se è maggiore o uguale al numero di caratteri presenti in string, verrà restituita l'intera stringa.

Esemplificando: mettiamo la parola "ciccione" nella textbox1

X = Left(TextBox1, 2)  'ci restituisce le prime due lettere della parola "ciccione" a partire da sinistra, X sarà uguale a "ci"

X = Right(TextBox1, 2)  'ci restituisce le prime due lettere della parola "ciccione" a partire da destra, X sarà uguale a "ne"

Riprendendo quindi l'esempio più sopra, dove volevamo controllare il formato data, sarà ora possibile controllare non solo la presenza delle barre, ma anche che l'anno sia inserito con 2 cifre e non quattro. Vediamo le istruzioni sulla data 05/10/02:

Dim X
X = Right(TextBox1, 2) 'impostiamo a due valori la variabile X (saranno le ultime due cifre nella textbox1, o se preferite, le prime due cifre partendo da destra)

ora controlliamo se la prima barra della data (05/ - terza posizione, un carattere solo, quindi la / ) con la funzione MID, è giusta, indi inseriamo il controllo per verificare che la seconda barra si trovi nella terza posizione a partire da destra ( /02 ) con la funzione RIGHT, inserendo l'operatore OR tra le due funzioni

If Mid(TextBox1, 3, 1) <> "/" Or  Right(TextBox1, 3)  <> "/" & X  Then.....

Se il terzo carattere della stringa (MID) è diverso da una barra "/" oppure il terzo carattere da destra (RIGHT) è diverso da una barra "/" allora....(per ottenere che il terzo carattere da destra sia una barra abbiamo concatenato il simbolo della barra alla X che ora contiene due caratteri : in totale 3 e quindi terza posizione, non importa quali saranno i due caratteri contenuti nella X. Se avessimo scritto /2002, il terzo carattere da destra sarebbe stato 0 e quindi diverso da /, e l'istruzione avrebbe intercettato l'errore avviando l'istruzione seguente a Then).

Variando le posizioni nelle istruzioni, sarà possibile ottenere il formato data che preferiamo: se per esempio vogliamo una data scritta 05-10-02, oppure 05-ott-02 sarà sufficiente cambiare il simbolo nell'istruzione:

If Mid(TextBox1, 3, 1) <> "-" Or  Right(TextBox1, 3)  <> "-" & X  Then.....

se invece vorremo come sopra ma con l'anno a quattro cifre 05-ott-2002, questa è l'istruzione:

Dim X
X = Right(TextBox1, 4)

If Mid(TextBox1, 3, 1) <> "-" Or  Right(TextBox1, 5)  <> "-" & X  Then.....

Buon lavoro.