Gary vuole trovare e sostituire un’abbreviazione come “sys” e sostituirla con “systems”. Il problema è che se sostituisce tutte le occorrenze, trasforma le istanze esistenti di “system” in “systemtem”. Gary potrebbe esaminare ogni occorrenza e sostituirla individualmente, ma ciò richiederebbe un’eternità. Si chiede se esiste un modo per fare in modo che Excel sostituisca solo le occorrenze “intere parole” di “sys” con “sistemi” come in Word.

Coloro che hanno familiarità con le funzionalità Trova e sostituisci di Excel potrebbero pensare, a prima vista, che potresti usare “Abbina contenuto intero cellulare”

impostazione per fare il lavoro. Ciò funziona, tuttavia, solo se l’abbreviazione “sys” è l’unica cosa in una cella. Nella situazione di Gary, non è così. Ha frasi e intere frasi che contengono “sys” (come in “sys admin” o “È necessario un sys check”). Da qui la sua richiesta di qualcosa come l’impostazione della “parola intera” di Word.

Con questo in mente, ci sono alcune cose che puoi provare; la soluzione migliore per te dipenderà dalla natura del testo nel tuo foglio di lavoro.

Ad esempio, se l’unico probabile punto di confusione è la parola “sistema”,

allora sarà più facile sostituire semplicemente “sistema” con qualcosa di unico, come “\ {[]}”. (Tendo ad apprezzare le parentesi graffe e le parentesi perché sono univoche nella maggior parte dei dati.) Quindi sostituisci “sys” con “systems” e infine sostituisci “\ {[]}” con “system”.

Se ci sono altri punti di confusione oltre a “sistema”, puoi ricorrere all’aggiunta di spazi nel testo Trova. In altre parole, cerca “sys” (con gli spazi) e sostituiscilo con “systems” (di nuovo, con gli spazi). Questo troverà tutte le occorrenze correttamente fintanto che sys non è seguito da un segno di punteggiatura, non si trova all’inizio di una cella e non si trova alla fine di una cella.

Naturalmente, potresti eseguire ricerche aggiuntive per ottenere alcune di queste informazioni. Ad esempio, potresti cercare “sys” (spazio solo alla fine)

per trovare le occorrenze all’inizio di una cella. Non sarebbe utile cercare “sys” (spazio solo all’inizio) perché corrisponderebbe a qualsiasi occorrenza di “system” preceduta da uno spazio. Nelle ricerche sequenziali potresti anche cercare “sys” seguito da punto, virgola, punto interrogativo, punto esclamativo, punto e virgola, ecc.

Se preferisci utilizzare una macro, il seguente è un esempio di come potresti affrontare il problema. La macro ti chiede cosa vuoi trovare e cosa vuoi sostituirlo.

Sub ReplaceOnlySpecifirdWord()

Dim c As Range, rng As Range, rngArea As Range     Dim vFind As String, vReplace As String     Dim v As Variant     Dim arrSplit As Variant     Dim s As String     Dim i As Integer, n As Long     Dim b As Boolean     Const csDELIMITER = " "



On Error Resume Next     ' Reference Constants only     Set rng = ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)

If rng Is Nothing Then         MsgBox "There are no constants on active sheet...", vbExclamation         Exit Sub     End If     On Error GoTo 0

' Get Find and Replace strings     v = InputBox(Prompt:="Please enter String to be replaced.")

If v <> "" Then         vFind = v     Else         MsgBox "Wrong entry; app is going to be terminated.", vbExclamation         Exit Sub     End If

v = InputBox(Prompt:="Please enter Replace String.")

If v <> "" Then         vReplace = v     Else         MsgBox "Wrong entry; app is going to be terminated.", vbExclamation         Exit Sub     End If

Application.ScreenUpdating = False     Application.Calculation = xlCalculationManual     n = 0     For Each rngArea In rng.Areas         For Each c In rngArea.Cells             b = False             arrSplit = Split(c.Value, csDELIMITER)

For i = LBound(arrSplit) To UBound(arrSplit)

If arrSplit(i) = vFind Then                     arrSplit(i) = vReplace                     n = n + 1                     b = True                 End If             Next i             If b Then                 s = vbNullString                 For i = LBound(arrSplit) To UBound(arrSplit)

s = s & arrSplit(i)

If i <> UBound(arrSplit) Then                         s = s & csDELIMITER                     End If                 Next i                 c.Value = s             End If         Next c     Next rngArea

Application.Calculation = xlCalculationAutomatic     MsgBox "Replaced " & n & " words...", vbInformation End Sub

La macro fa il suo lavoro trovando tutte le parole in ogni cella (a turno).

Se la parola corrisponde a ciò che stai cercando, viene sostituita. Il contenuto della cella viene quindi ricomposto.

C’è uno svantaggio in questo approccio: la corrispondenza è molto letterale. Ciò significa che “sys” corrisponderà a “sys”, ma non a “Sys”, “SYS” o “sys” seguito da un segno di punteggiatura. (La macro utilizza gli spazi come delimitatore tra le parole.)

_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 (13391) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 e Excel in Office 365.