Anne-Mie si rende conto che può usare i caratteri jolly (?) Per cercare in Excel, ma si chiede se può usare i caratteri jolly nella stringa di sostituzione. Ad esempio, vorrebbe cercare “abde” e sostituirlo con “aa * de”, dove l’asterisco rappresenta un numero qualsiasi di caratteri o nessuno.

La risposta breve è che non è possibile eseguire questa operazione in Excel, come descritto. Se vuoi solo convertire il secondo carattere di un valore di testo da “b” a “a”, allora puoi farlo abbastanza facilmente:

=REPLACE(A1,2,1,"a")

Questo, tuttavia, probabilmente non è quello che vuoi fare; si desidera un modo per utilizzare i caratteri jolly nel testo “sostituisci con”. Il termine tecnico per eseguire tali sostituzioni di stringhe è chiamato REGEX, che è l’abbreviazione di Regular Expressions. REGEX è iniziato con linguaggi come Perl ma era così potente che molti altri linguaggi di programmazione lo hanno aggiunto.

Il VBA utilizzato in Excel non fa eccezione. Il primo passaggio nell’utilizzo di REGEX è attivarlo. Puoi farlo nell’editor VBA scegliendo Strumenti | Riferimenti e quindi assicurarsi che sia presente un segno di spunta accanto all’opzione Espressioni regolari di Microsoft VBScript. Se è disponibile più di una versione del riferimento, scegli l’ultima versione.

L’abilitazione di questo riferimento consente di creare oggetti REGEX. Tecnicamente potresti lasciarlo disattivato, a seconda di come desideri che il binding avvenga nelle tue macro. Una discussione sui pro e contro degli ultimi tempi contro

l’associazione anticipata va oltre lo scopo di questo suggerimento, quindi procedi e attiva il riferimento REGEX.

Gli oggetti REGEX possiedono un metodo Test e una proprietà Pattern. Ciò significa che si imposta la proprietà Pattern e quindi il metodo Test verifica se il pattern esiste. Un oggetto REGEX dispone anche di un metodo di sostituzione, utilizzato per eseguire le sostituzioni.

Prima di procedere, è importante capire che le espressioni regolari possono diventare molto complesse e, beh, “geek”. Non c’è modo di aggirarlo; come lavorare con le espressioni regolari è stato oggetto di interi libri. Fortunatamente, ai fini di questo suggerimento, le espressioni sono di natura piuttosto semplice. In questo caso useremo il pattern “^ ab.de $”. Questo modello si riferisce a una parola che inizia (indicata da ^) con “ab” seguita da un’espressione arbitraria (indicata da)

composto da almeno un carattere (indicato dal punto) e termina (indicato dal $) con “de”.

Di seguito è riportato il codice che implementa l’utilizzo dell’oggetto REGEX per eseguire le effettive sostituzioni.

Public Function SearchNReplace1(Pattern1 As String, _   Pattern2 As String, Replacestring As String, _   TestString As String)

Dim reg As New RegExp

reg.IgnoreCase = True     reg.MultiLine = False     reg.Pattern = Pattern1     If reg.Test(TestString) Then         reg.Pattern = Pattern2         SearchNReplace1 = reg.Replace(TestString, ReplaceString)

Else         SearchNReplace1 = TestString     End If End Function

Per utilizzare questa macro, inizia con le stringhe che desideri modificare nella colonna A. Supponendo che la prima stringa sia nella cella A1, potresti inserire quanto segue in un’altra cella per ottenere il testo modificato:

=SearchNReplace1("^ab.*de$","^ab","aa",A1)

Questo dice alla macro che il pattern che vuoi cercare è “^ ab. * De $”

(il primo parametro) e che si desidera sostituire “^ ab” con “aa”.

Questa formula può essere incollata nella colonna e si finisce con una conversione della colonna A in cui la stringa “abde” è sostituita da “aade”.

Se per qualche motivo preferisci non utilizzare espressioni REGEX in VBA, puoi creare una macro che passerà semplicemente attraverso un gruppo di celle selezionate e cercherà qualsiasi cella che inizi con “ab” e termini con “de” e quindi sostituisce la parte iniziale con “aa”.

Sub SearchNReplace2()

Dim sFindInitial As String     Dim sReplaceInitial As String     Dim iLenInitial As Integer     Dim sFindFinal As String     Dim sReplaceFinal As String     Dim iLenFinal As Integer     Dim sTemp As String     Dim rCell As Range

sFindInitial = "ab"

sReplaceInitial = "aa"

sFindFinal = "de"

sReplaceFinal = "de"



For Each rCell In Selection         sTemp = rCell.Value         iLenInitial = Len(sFindInitial)

iLenFinal = Len(sFindFinal)

If Left(sTemp, iLenInitial) = sFindInitial And _             Right(sTemp, iLenFinal) = sFindFinal Then             sTemp = Mid(sTemp, iLenInitial + 1)

sTemp = Left(sTemp, Len(sTemp) - iLenFinal)

sTemp = sReplaceInitial & sTemp & sReplaceFinal             rCell.Value = sTemp         End If     Next     Set rCell = Nothing End Sub

Per utilizzare questa routine, seleziona semplicemente le celle che desideri modificare, quindi esegui la macro. È inoltre necessario apportare modifiche alle variabili sFindInitial, sReplaceInitial, sFindFinal e sReplaceFinal, in base alle esigenze.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (11170) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 ed Excel in Office 365. Puoi trovare una versione di questo suggerimento per l’interfaccia del menu precedente di Excel qui: