Sottotitolo: Due piccioni con una favola! Questo pezzullo lo dedico agli amanti del fast food… del prendi veloce e porta via alla svelta altrimenti si raffredda! 🙂 Due piccole funzioncine da utilizzare al momento, senza pretese. La favola in questione è che spesso le cose più semplici sono quelle che si utilizzano più spesso. Questo codice è indipendente da Excel, funziona cioè benissimo in qualunque applicativo della suite Office.
La prima, slice
, serve per ottenere una sottostringa dal carattere tale al carattere talaltro, di una stringa più grande.
La seconda, removespaces
, fa una cosa tanto semplice quanto noiosa, cioè rimuove da una stringa gli spazi (del tutto) o solo quelli ridondanti, restituendo una stringa pulita pulita. La particolarità di questa piccola routine è che sfrutta una “espressione regolare” (l’oggetto VbScript.Regexp) per trovare le occorrenze di almeno due spazi consecutivi e sostituirli con uno spazio solo. Le “espressioni regolari” sono uno strumento molto potente presente in tutti i linguaggi evoluti, la versione VBA e VBScript è piuttosto povera di funzioni (ha limitazioni pesanti) ma per piccoli scopi funziona bene. Magari un giorno ne vien fuori un altro piccolo articolo… piccolo però, perchè l’argomento è vastissimo e anche piuttosto complicato 🙂
Slice
Public Function slice(ByVal s As String, ifrom As Integer, ito As Integer) As String
'affetta una stringa e restituisce una sottostringa
'che inizia dal carattere ifrom e finisce al carattere ito, compresi
' es. slice ("pippo", 2, 4) --> ipp
If ito - ifrom + 1 <= 0 Then slice = "": Exit Function
slice = Mid(s, ifrom, ito - ifrom + 1)
End Function
Esempio di slice (che in fondo vuol dire “affetta”):
slice("tanto va la gatta al largo che ci lascia lo zio pino", 15, 24) = "tta al lar"
Removespaces
Function removespaces(ByVal Source As String, Optional allspaces As Boolean = True) As String
'rimuove gli spazi da source.
'di default (true) toglie tutti gli spazi, se false invece riduce gli spazi a uno solo
Select Case allspaces
Case True
Dim i As Integer
i = InStr(Source, " ")
Do
Source = Replace(Source, " ", "")
i = InStr(Source, " ")
Loop Until i = 0
removespaces = Source
Case False
Dim oRE As Object
Set oRE = CreateObject("vbscript.regexp")
oRE.Global = True
oRE.Pattern = " {2,}"
removespaces = Trim(oRE.Replace(Source, " "))
Set oRE = Nothing
End Select
End Function
Esempio di removespaces:
removespaces(" tanto va la gatta al lardo") = "tantovalagattaallardo"
removespaces(" tanto va la gatta al lardo " , False) = "tanto va la gatta al lardo"
› Funzioni Slice e Removespaces