Discussione: Corso VBA
Visualizza messaggio singolo
Vecchio 28-06-2014, 15.44.30   #45
Alexsandra
Senior Member
WT Expert
 
L'avatar di Alexsandra
 
Registrato: 19-05-2007
Loc.: Verona
Messaggi: 1.208
Alexsandra è un gioiello raroAlexsandra è un gioiello raroAlexsandra è un gioiello raroAlexsandra è un gioiello raro
Le Funzioni Left, Right, Mid, Len e Replace




In VBA una stringa si riferisce ad una sequenza di caratteri adiacenti all'interno di virgolette vale a dire, "Questa è un'espressione stringa racchiusa tra virgolette, in VBA." Questi caratteri sono letteralmente interpretati come caratteri, nel senso che questi rappresentano i personaggi stessi piuttosto che i loro valori numerici. Una stringa può includere lettere, numeri, spazi e punteggiatura e un’espressione stringa può avere come suoi elementi - una stringa di caratteri adiacenti, una funzione che restituisce una stringa, una variabile stringa, una stringa costante o una variante stringa.


La Funzione LEFT
La funzione Left in Excel può essere utilizzata sia come funzione di foglio che come una funzione VBA e restituisce il numero specificato di caratteri di una stringa di testo, a partire dal primo carattere più a sinistra. Si può utilizzare questa funzione per estrarre una sotto-stringa iniziando dalla parte sinistra di una stringa di testo usando la seguente sintassi:

LEFT (text_string, char_numbers)

È necessario menzionare l’argomento text_string che rappresenta la stringa di testo da cui si desidera estrarre il numero specificato di caratteri. L’argomento char_numbers è facoltativo quando si usa come una funzione del foglio di lavoro, che specifica il numero di caratteri da estrarre dalla stringa di testo, ricorda che il valore char_numbers deve essere uguale o maggiore di zero, se è maggiore della lunghezza della stringa di testo, la funzione LEFT restituirà la stringa di testo integralmente e se viene omesso, riporterà il valore predefinito che è pari a 1. Se invece si utilizza come una funzione VBA, è necessario specificare gli argomenti, e se text_string contiene Null, (cioè stringa vuota) la funzione restituisce una stringa vuota.


La Funzione RIGHT
La funzione Right in Excel può essere utilizzata sia come funzione di foglio che come una funzione VBA e restituisce il numero specificato di caratteri di una stringa di testo, a partire dall'ultimo carattere più a destra. Si può utilizzare questa funzione per estrarre una sotto-stringa iniziando dalla parte destra di una stringa di testo usando la seguente sintassi:

RIGHT (text_string, char_numbers)

È necessario inserire l’argomento text_string che rappresenta la stringa di testo da cui si desidera estrarre il numero specificato di caratteri. L’argomento char_numbers è facoltativo quando si usa come una funzione del foglio di lavoro, che specifica il numero di caratteri da estrarre dalla stringa di testo, tenendo presente che il valore char_numbers deve essere uguale o maggiore di zero, se è maggiore della lunghezza della stringa di testo, la funzione RIGHT restituirà la stringa di testo integralmente, mentre se viene omesso, verrà utilizzato il valore predefinito che è pari a 1. Se invece si utilizza come una funzione VBA, è necessario specificare gli argomenti, e se text_string contiene Null (cioè una stringa vuota), la funzione restituisce una stringa vuota


La Funzione MID
La funzione Mid può essere utilizzata sia come funzione di foglio che come una funzione VBA e restituisce il numero specificato di caratteri di una stringa di testo, a partire da una posizione specificata, cioè a partire da un numero di caratteri specificato. Si può utilizzare questa funzione per estrarre una sotto-stringa iniziando da qualsiasi parte di una stringa di testo usando la seguente Sintassi:

MID (text_string, start_number, char_numbers)

L’argomento text_string indica la stringa di testo da cui si desidera estrarre il numero specificato di caratteri, mentre l’argomento start_number specifica il numero di caratteri da cui iniziare l'estrazione della sotto stringa, dove il primo carattere della stringa di testo deve essere indicato dal valore di start_number e incrementando verso destra di 1, mentre l’argomento char_numbers specifica il numero di caratteri da estrarre dalla stringa di testo.

Se start_number è maggiore della lunghezza della stringa di testo, viene restituita una stringa vuota (lunghezza zero), mentre se è minore della lunghezza della stringa di testo ma con un valore di char_numbers maggiore della lunghezza della stringa di testo, la funzione MID restituirà la stringa di testo integralmente dalla posizione start_number fino alla fine della stringa di testo.

Quando la funzione MID viene usata come una funzione nel foglio di lavoro e se viene specificato un valore negativo per char_numbers, MID restituirà il valore di errore (numero di errore), come pure start_number, se viene posto inferiore a 1, MID restituirà il valore di errore. Quando si utilizza come una funzione del foglio di lavoro, tutti gli argomenti devono essere specificati. Quando invece la funzione MID viene usata come una funzione VBA, l'argomento char_numbers è facoltativo e se viene omesso la funzione restituisce la stringa di testo per intero dalla posizione start_number alla fine della stringa di testo e tutti gli altri argomenti devono essere specificati, inoltre se text_string contiene una stringa vuota (Null), la funzione restituisce una stringa vuota.


La Funzione LEN
La funzione Len può essere utilizzata sia come funzione di foglio che come una funzione VBA e restituisce il numero di caratteri di una stringa di testo. Si utilizzare questa funzione per ottenere la lunghezza di una stringa di testo con questa sintassi:

LEN (text_string)

ed è necessario menzionare l’argomento text_string che corrisponde alla stringa di testo di cui si desidera conoscerne la lunghezza espressa in numero di caratteri, si noti che vengono contati come caratteri anche gli spazi vuoti. Mentre usando LEN come una funzione VBA con la sintassi: Len (text_string) o Len (variable_name), è possibile utilizzare una stringa di testo o un nome di una variabile e la funzione restituisce un valore Long che rappresenta il numero di caratteri contenuti nella stringa o il numero di byte necessari per memorizzare una variabile. Utilizzando la funzione Len per una variabile di tipo Variant, VBA tratterà la variabile come una stringa e restituisce il numero di caratteri contenuti nella stessa. Si tenga presente che se l’argomento text_string o la variabile utilizzata contiene una stringa vuota (Null), anche il valore di ritorno sarà una stringa vuota.

Esempio delle funzioni Left, Right, Mid e Len
Codice:
Sub prova1()
Dim str As String, strL As String, strR As String, strM As String
str = "Bepi Rua"
strL = Left(str, 7)
'Restituisce "Bepi Ru", che sono i primi 7 caratteri
MsgBox strL
strL = Left(str, 15)
'Restituisce "Bepi Rua", che sono tutti caratteri, perché il valore 15 specificato supera la lunghezza della stringa
MsgBox strL
strR = Right(str, 7)
'Restituisce "epi Rua", che sono gli ultimi 7 caratteri (lo spazio è contato come un carattere) 
MsgBox strR
strR = Right(str, 15)
'Restituisce "Bepi Rua", che sono tutti caratteri, perché il valore 15 specificato supera la lunghezza della stringa
MsgBox strR
strM = Mid(str, 2, 6)
'Restituisce "epi Ru". Inizia dal secondo carattere “e” poi specifica 6 caratteri restituiti a partire da "e"
MsgBox strM
strM = Mid(str, 2, 15)
'Restituisce "epi Rua". Restituisce tutti i caratteri a partire dal secondo carattere "e", 
’ perché i caratteri specificati più il numero di partenza 2 superano la lunghezza della stringa
MsgBox strM
strM = Mid(str, 2)
'Restituisce "epi Rua". Restituisce tutti i caratteri a partire dal secondo carattere "e", 
’ perché il secondo argomento (char_numbers) viene omesso
MsgBox strM
strM = Mid(str, 12, 2)
'Restituisce una stringa vuota perché il numero di partenza 12 supera la lunghezza della stringa
MsgBox strM
'Restituisce 8, la lunghezza della stringa misurata dal numero di caratteri
MsgBox Len(str)
'Restituisce 8, la lunghezza della stringa misurata dal numero di caratteri. 
MsgBox Len("Bepi Rua")
End Sub
Esempio della funzione Len con le variabili
Codice:
Sub prova2()
'Restituisce 6 in entrambi i casi il numero di caratteri delle 2 stringhe
MsgBox Len("grande")
MsgBox Len("123456")
'Restituisce 11 il numero di caratteri della stringa incluso lo spazio
MsgBox Len("Roby Baggio")
'Una variabile di tipo variant viene trattata come una stringa
Dim vVar As Variant
vVar = 125
'restituisce 2, indicando una variabile di tip Integer
MsgBox VarType(vVar)
'Restituisce 3, il numero di caratteri contenuti nella variabile
MsgBox Len(vVar)
'variabile di tipo stringa
Dim strVar As String
strVar = "Roby Baggio"
 ‘ritorna 8, indicando una variabile di tipo String
MsgBox VarType(strVar)
'Restituisce 11, il numero di caratteri contenuti nella variabile di tipo String
MsgBox Len(strVar)
 ‘variabile di tipo integer
Dim iVar As Integer
iVar = 124
'Restituisce 2, il numero di byte utilizzati per memorizzare la variabile
MsgBox Len(iVar)
 ‘variabile di tipo long 
Dim lVar As Long
lVar = 145
'Restituisce 4, il numero di byte utilizzati per memorizzare la variabile
MsgBox Len(lVar)
 ‘variabile di tipo single
Dim sVar As Single
sVar = 245.567
'Restituisce 4, il numero di byte utilizzati per memorizzare la variabile
MsgBox Len(sVar)
 ‘variabile di tipo double
Dim dVar As Double
dVar = 245.567
'Restituisce 8, il numero di byte utilizzati per memorizzare la variabile
MsgBox Len(dVar)
End Sub
Esempio delle funzioni LEN e MID, per determinare i caratteri che compaiono in posizioni dispari in una stringa di testo
Codice:
Sub prova3()
Dim str As String, i As Integer
str = ActiveSheet.Range("A2")
 For i = 1 To Len(str)
'Controllare le posizioni dispari
If i Mod 2 = 1 Then
'Carattere di ritorno alla posizione dispari
MsgBox Mid(str, i, 1)
End If
Next
End Sub
Esempio delle funzioni LEFT, LEN e MID, per restituire le iniziali da una stringa di testo contenente una frase composta da più parole considerando una stringa contenente il nome, il cognome, lo stato e l’occupazione con spazi e restituire le iniziali del parole seguite da un punto e uno spazio.
Codice:
Sub prova4() 
Dim Snome As String, iniz As String, i As Integer
'Stringa di testo in cui fare la ricerca
Snome = "   Maria Stuarda regina     Scozia"
'Se il primo carattere non è uno spazio vuoto, sarà una iniziale
For i = 1 To Len(Snome)
If i = 1 Then
If Left(Snome, i) <> " " Then
iniz = Left(Snome, 1) & "."
End If
Else
'Eventuale carattere dopo il primo carattere, se è preceduto da uno spazio, sarà una iniziale
If Mid(Snome, i - 1, 1) = " " And Mid(Snome, i, 1) <> " " Then
'Per la prima iniziale
If Len(iniz) < 1 Then
iniz = Mid(Snome, i, 1) & "."
'Per più iniziali
Else
'Per più iniziali, aggiungere alla iniziale precedente
iniz = iniz & " " & Mid(Snome, i, 1) & "."
End If
End If
End If
Next i
 ‘Convertire tutte le iniziali in maiuscolo
iniz = UCase(iniz)
'Restituisce "M. T. R. S." 
MsgBox iniz
'Restituisce 11-4 lettere, 4 punti e 3 spazi
MsgBox Len(iniz)
End Sub
La Funzione Replace
La funzione Replace in vba viene utilizzata per restituire una stringa in cui una sottostringa specificata viene sostituita, un determinato numero di volte, con un'altra sottostringa,la sintassi è la seguente:

Replace (expression, find, replace, start, count, compare)

è necessario specificare gli argomenti di expression, find e replace, mentre start, count e compare sono argomenti opzionali.

L'argomento expression (espressione) è la stringa che viene sostituita da una stringa specifica, si ricordi che per un valore di expression con lunghezza zero viene restituita una stringa di lunghezza zero, e per un'espressione Null la funzione darà un errore, mentre l’argomento Find specifica la stringa che deve essere sostituita e se il valore di Find è una stringa di lunghezza zero, allora viene restituita una copia di expression. L’argomento Replace specifica la stringa di sostituzione), notare che la stringa di sostituzione se ha lunghezza zero ha l'effetto di eliminare tutte le occorrenze dell’espressione Find e l’argomento Start specifica la posizione (cioè il numero di caratteri) nell'espressione da cui si desidera iniziare la ricerca della sottostringa specificata in Find. Se questo argomento viene omesso, per impostazione predefinita assume il valore 1 (cioè la ricerca partirà dalla prima posizione del carattere) e la stringa restituita dalla funzione Replace inizia da questa posizione di partenza fino all'ultimo carattere della stringa di expression.

Specificando una posizione di partenza che è maggiore della lunghezza dell'espressione, verrà restituita una stringa di lunghezza zero. L’argomento Count specifica il numero di sostituzioni che si desidera fare, omettendo di specificare questo valore per default assumerà il valore -1, che farà tutte le possibili sostituzioni e specificando zero per l’argomento Count avrà l'effetto di non effettuare nessuna sostituzione e restituirà una copia dell'espressione. L’argomento Compare specifica il tipo di confronto da utilizzare per la valutazione delle sottostringhe, può essere un valore numerico o una costante.

È possibile specificare i seguenti argomenti per l’argomento Compare:
  • vbUseCompareOption (valore: -1) che esegue un confronto utilizzando l'impostazione di Option Compare
  • vbBinaryCompare (valore: 0) esegue un confronto binario tra le stringhe basato su un ordinamento binario.
  • vbTextCompare (valore: 1) esegue un confronto testuale tra le stringhe che non si basano su un ordinamento testuale case-sensitive
  • vbDatabaseCompare (valore: 2) esegue un confronto basato sui dati di un database.
Se non si specifica l'argomento Compare, il confronto viene fatto sulla base Option definito nella dichiarazione, cioè l’istruzione Option Compare può essere Option Compare Binary oppure Option Compare Text e per essere utilizzato deve essere impostato il metodo di confronto specificando specificando 'Option Compare Binary' o 'Option Compare Text' a livello di modulo, prima di qualsiasi altra procedura. Se l'Istruzione Option Compare non è specificato, il metodo di confronto testo predefinito è Binary.

Esempio: Come utilizzare la funzione Replace
Codice:
Sub sostituisci1()
    Dim str As String, strF As String, strR As String
'Trovare tutte le occorrenze di "a" da sostituire 
strF = "s"
strR = ""
str = "Laura non c'è è Andata via!"
'Restituisce 27
MsgBox Len(str)
'Restituisce la stringa dopo l'eliminazione di tutte le occorrenze di' a’, notare che
’il valore A non viene rimosso
str = Replace(str, strF, strR)
MsgBox str
'Restituisce 22
MsgBox Len(str)
str = "Laura non c'è è Andata via!"
'Restituisce 27
MsgBox Len(str)
'Restituisce la stringa dopo l'eliminazione di tutte le occorrenze di' a ' notare che anche il carattere ‘A’
‘ anche il carattere ‘A’ viene sostituito perché il valore di confronto è vbTextCompare
str = Replace(str, strF, strR, , , 1)
MsgBox str
MsgBox Len(str)
'Restituisce 21
str = "Laura non c'è è Andata via!"
'Restituisce 27
MsgBox Len(str)
'Eliminazione di tutte le occorrenze di' a ' notare che il numero di caratteri 
’6 è uno spazio vuoto e viene restituito. 
'La stringa restituita dalla funzione inizia dalla posizione di partenza fino all'ultimo 
’carattere della stringa di espressione. 
str = Replace(str, strF, strR, 6)
MsgBox str
'Restituisce 16
MsgBox Len(str)
str = "Laura non c'è è Andata via!"
'Restituisce 27
MsgBox Len(str)
'Specifica una posizione di partenza che è maggiore della lunghezza dell'espressione, 
’restituirà una stringa di lunghezza zero. 
str = Replace(str, strF, strR, 28)
'Restituisce una stringa di lunghezza zero
MsgBox str
'restituisce 0: 
MsgBox Len(str)
str = "Laura non c'è è Andata via!"
'Restituisce 27
MsgBox Len(str)
str = Replace(str, strF, strR, 8, 2)
MsgBox str
MsgBox Len(str)
End Sub
Esempio: Sostituire tutte le occorrenze di una stringa in un'espressione stringa con un'altra stringa
Codice:
Function sostituisci2(var As Variant, varF As Variant, varR As Variant, optI As Integer) As Variant
    Dim posF As Integer
'Posizione della prima occorrenza di varFind, entro var 
posF = InStr(var, varF)
'Se posF non viene trovato all'interno var 
If posF < 1 Then
'restituisce var
sostituisci2 = var
Else
'Sostituire tutte le istanze di varF
sostituisci2 = Replace(var, varF, varR, , , optI)
End If
End Function

Sub cambia()
Dim var As Variant, varF As Variant, varR As Variant, optI As Integer
'var è la stringa all'interno della quale varF viene cercato e sostituito 
var = "Laura non c’è è Andata via!"
'varF è la stringa da cercare all'interno di var e che sarà sostituito
varF = "a"
'varR è la stringa che sostituisce tutte le istanze di varF entro var
varR = "?"
'Per eseguire un confronto binario (case-sensitive),  si utilizza il valore 0 (optI=0) 
'Per eseguire un confronto di testo (case insensitive), si utilizza il valore 1
optI = 1
'Se var è Null, si esce
If IsNull(var) Then
MsgBox "Var è nullo, esco dalla procedura"
Exit Sub
'Se var non è Null
Else
'Se uno fra varF o varR sono Null o varFè una stringa di lunghezza zero
If IsNull(varF) Or IsNull(varR) Or varF = "" Then
'Ritorno var senza sostituzioni e esco dalla procedura
MsgBox var
Exit Sub
Else
'Se var, varF, varR non sono Null, eseguo la funzione di sostituire tutte le istanze di varF
MsgBox sostituisci2(var, varF, varR, optI)
End If
End If
End Sub
___________________________________

- Il primo fondamento della sicurezza non e' la tecnologia, ma l'attitudine mentale -
Alexsandra non è collegato