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:
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.
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 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 sotto ancora sostituiremo
praticamente tutta la stringa in quanto le lunghezze delle parole da
sostituire sono identiche
sarebbe diversa se la sostituzione fosse con parole di
lunghezza diversa ------------------------------------------------ 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:
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 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 If Mid(TextBox1, 3, 1) <> "-" Or Right(TextBox1, 5) <> "-" & X Then..... Buon lavoro.
|