Visto che ho dovuto "sistemare" il file di excel di cui al mio precedente post aggiungendovi la validazione dei dati, riporto qui l'esperienza maturata nell'uso delle espressioni regolari in excel 2007 (ma vale anche per la versione 2003).
Le espressioni regolari le conoscono tutti, chi più chi meno, e tutti sanno che sono potenti ma ostiche.
Prova ne sia questa fantastica maglietta che ho trovato googlando su internet:
Fatto sta che non potevo proprio pensare di fare data validation con le varie funzioni messe a disposizione dal VBA di Excel, senza aggiungere una chicca presente su VBScript: Regular Expression (RegExp) Object .
Per usare l'oggetto RegExp nel VBA di excel, bisogna crearlo in questo modo:
Set RegExp = CreateObject("vbscript.regexp")
L'oggetto RegExp espone quattro proprietà:
- Global
Imposta o restituisce un valore Booleano (Vero/Falso) che indica se il pattern deve trovare tutte le occorrenze nella stringa su cui viene effettuata la ricerca o solo su la prima occorrenza. - IgnoreCase
Imposta o restituisce un valore Booleano (Vero/Falso) che indica se la ricerca del pattern ignora la differenza tra minuscole e maiuscole oppure no. - Multiline
Proprietà di cui non ho trovato (sino ad ora) documentazione, ne so a cosa serva. Però nel debugger di VBA appare e la cito per completezza. - Pattern
Imposta o restituisce l'espressione regolare che definisce il pattern di cui si vuole effettuare la ricerca.
e tre metodi:
- Test(String)
Ritorna Vero se trova almeno una occorrenza del pattern nella stringa String, altrimenti ritorna Falso. Va da se che tale metodo non è influenzato dall'impostazione della proprietà Global. - Execute(String)
Restituisce una collezione Matches di oggetti Match, uno per ogni occorrenza trovata nella stringa String. Se non trova nulla restituisce la collezione Matches vuota. - Replace(String1, String2)
Restituisce una copia di String1 dove ogni occorrenza del pattern viene sostituita con String2. Da notare che String2 nel testo può contenere i riferimenti a sottoespressioni del pattern, come mostrato nell' esempio della MSDN Library.
Esempio:
Per testare il campo IBAN (International Bank Account Number) usando la regular expression di Alessandro Forte:
Function ValidIBAN(IBAN) As Boolean
Set RegExp = CreateObject("vbscript.regexp")
RegExp.Pattern = "IT\d{2}[ ][a-zA-Z]\d{3}[ ]\d{4}[ ]\d{4}[ ]\d{4}[ ]\d{4}[ ]\d{3}|IT\d{2}[a-zA-Z]\d{22}"
ValidIBAN = RegExp.Test(IBAN)
End Function
Più semplice di così...
posted @ mercoledì 9 gennaio 2008 17:52