Una funzione Definita dall'utente: cerca caratteri consecutivi

 

Questa volta il quesito è questo.

Poniamo di avere in A1 una parola di testo. Devo riportare in A2:

  1. se la parola contiene almeno 3 caratteri uguali consecutivi (BBB oppure 444 ecc.)
  2. se non li contiene, ovvero in tutti gli altri casi

Se il problema fosse più semplice, nel senso che se la serie di caratteri da cercare fosse limitata alla sola "aaa" e nota si potrebbe usare la funzione di Excel =RICERCA

=RICERCA("aaa";A3)

Questa, tuttavia, da prove eseguite, restituisce un errore (#VALORE!) se non trova la stringa cercata ed allora occorre modificarla come nell'esempio seguente.

=SE(VAL.ERRORE(RICERCA("aaa";A3));"no";RICERCA("aaa";A3))

oppure, se vogliamo solo sapere se la serie esiste oppure no:

=SE(VAL.ERRORE(RICERCA("aaa";A3));"no";"si")

Questo solo per cercare la stringa "aaa". Se le stringhe da cercare fossero 2, 3 o, peggio, ancora di più la formula diventerebbe mostruosa ed a questo punto io, di solito, preferisco passare al VBA

 

Per questa circostanza, ho pensato di creare una funzione personalizzata che può essere usata sia da codice VBA che da Excel tramite le funzioni "Definite dall'utente".

 

Function cercaTreConsecutivi(Stringa As String) As Boolean
Dim L
If Len(Stringa) < 3 Then Exit Function
For L = 1 To Len(Stringa) - 2
If Mid(Stringa, L, 1) = Mid(Stringa, L + 1, 1) _
And Mid(Stringa, L, 1) = Mid(Stringa, L + 2, 1) Then
cercaTreConsecutivi = True
Exit Function
End If
Next
End Function

La funzione è semplice ed altrettanto semplice è un suo eventuale utilisso come formula da usare nel foglio di Excel.

In questa funzione processo la stringa a partire dal primo carattere al terzultimo For L = 1 To Len(Stringa) - 2

Il processo in questo caso termina quando si incontrano tre caratteri consecutivi uguali:

If Mid(Stringa, L, 1) = Mid(Stringa, L + 1, 1) And Mid(Stringa, L, 1) = Mid(Stringa, L + 2, 1) Then

Se il confronto del carattere che occupa la posizione "L" con quelli della posizione "L + 1" ed "L + 2" risulta positivo, la funzione restituisce un valore True e viene terminata.

Detto questo passiamo a vedere come usare questa funzione.

Da codice VBA lo possiamo vedere all'opera con questo semplice codice:

Sub prova()
Dim Trovato As Integer
Trovato = cercaTreConsecutivi(Range("A2"))
If Trovato Then
MsgBox "OK"
Else
MsgBox "NO"
End If
End Sub

Sul foglio di Excel lo possiamo usare come una delle funzioni di Excel cercandola però tra le funzioni e lavorando con "Questa finestra di dialogo" oppure scrivendo direttamente sul foglio la formula:

=cercaTreConsecutivi(A2)

o, se il risultato deve essere più complesso, aiutandosi con altre funzioni come in questo esempio:

=SE(cercaTreConsecutivi(A2);"si";"no")

con la prima formula avremo, come risultato il valore della funzione (VERO o FALSO)

con la seconda formula avremo una delle risposte che mettiamo nelle due clausole della funzione SE