Ankur ha un foglio di lavoro che ha migliaia di celle contenenti vari termini. Deve eliminare un gran numero di quei termini e le celle in cui si trovano. Ad esempio, potrebbe dover eliminare tutte le celle contenenti termini come “google”, “youtube”, “linkedin” e numerosi altri termini. Ankur sa di poter cercare e sostituire ciascuno di questi termini, ma è piuttosto noioso. Si chiede se esiste un modo per identificare tutti i termini da rimuovere e quindi fare in modo che Excel li rimuova da quelle migliaia di celle.

Se hai bisogno di fare questo tipo di cose su base regolare, la soluzione migliore è usare una macro. Il trucco sta nel modo in cui specifichi, nella macro, esattamente cosa vuoi sostituire. Un modo è inserire le informazioni in un array, come nel seguente esempio:

Sub RemoveTerms1()

Dim vTerm As Variant     Dim vArray As Variant

vArray = Array("google", "youtube", "linkedin")

For Each vTerm in vArray         Selection.Replace What:=vTerm, _           Replacement:="", LookAt:=xlPart     Next vTerm End Sub

I termini ricercati vengono inseriti nell’array vArray, quindi viene eseguito un passaggio a ciascun membro dell’array (ciascun termine). Il metodo Sostituisci viene utilizzato con l’oggetto Selezione per eseguire le sostituzioni effettive. La macro non rimuove le celle; rimuove semplicemente qualsiasi testo che corrisponde al termine. Durante la sostituzione, la ricerca non fa distinzione tra maiuscole e minuscole, in modo che “google” corrisponda a “Google”.

Poiché viene utilizzato l’oggetto Selection, è importante assicurarsi di selezionare l’elenco che si desidera elaborare prima di eseguire effettivamente la macro.

Se non lo fai, non viene sostituito nulla.

Se preferisci, puoi creare una macro che estragga i termini da un intervallo di celle nella cartella di lavoro.

Sub RemoveTerms2()

Dim c As Range     Dim rngSource As Range     Dim vTerm As Variant     Dim arrTerms As Variant     Dim i As Integer

i = -1     arrTerms = Array()

For Each c In Range("D1:D9").Cells         If Trim(c.Value) > "" Then             i = i + 1             ReDim Preserve arrTerms(i)

arrTerms(i) = Trim(c.Value)

End If     Next c

On Error Resume Next     Set rngSource = Application.InputBox( _                     Prompt:="Please select Range", _                     Title:="Removing Cells Containing Terms", _                     Default:=ActiveSheet.UsedRange.Address, Type:=8)

On Error GoTo 0     If rngSource Is Nothing Then         MsgBox ("You didn't specify a range to process")

Else         For Each vTerm in arrTerms             rngSource.Replace What:=vTerm, _               Replacement:="", LookAt:=xlWhole         Next vTerm     End If End Sub

Questa macro estrae i termini di ricerca dall’intervallo D1: D9 e quindi ti chiede di scegliere l’intervallo di celle che desideri elaborare. Utilizza lo stesso metodo di sostituzione utilizzato nella macro precedente, tranne per il fatto che specifica che il parametro LookAt è xlWhole. Ciò significa che il termine di ricerca deve corrispondere all’intera cella per essere rimosso. Tuttavia, i termini sono ancora considerati case insensitive.

Notare che gli esempi finora non eliminano effettivamente alcuna cella; eliminano semplicemente il contenuto delle celle. In molti casi questo è esattamente ciò che desideri perché non vuoi interrompere il layout del foglio di lavoro effettivo. Se vuoi davvero eliminare le celle, non useresti il ​​metodo Sostituisci. Invece, puoi attivare il confronto del testo espanso e utilizzare l’operatore Mi piace per vedere se c’è una corrispondenza.

Option Compare Text

Sub RemoveTerms3()

Dim c As Range     Dim rngSource As Range     Dim vTerm As Variant     Dim arrTerms As Variant     Dim i As Integer     Dim sLook As String

i = -1     arrTerms = Array()

For Each c In Range("D1:D9").Cells         If Trim(c.Value) > "" Then             i = i + 1             ReDim Preserve arrTerms(i)

arrTerms(i) = Trim(c.Value)

End If     Next c

On Error Resume Next     Set rngSource = Application.InputBox( _                     Prompt:="Please select Range", _                     Title:="Removing Cells Containing Terms", _                     Default:=ActiveSheet.UsedRange.Address, Type:=8)

On Error GoTo 0     If rngSource Is Nothing Then         MsgBox ("You didn't specify a range to process")

Else         For Each vTerm in arrTerms             sLook = "" & vTerm & ""

For Each c In rngSource                 If c.Value Like sLook Then c.Delete             Next         Next vTerm     End If End Sub

Tieni presente che i termini di ricerca sono ancora estratti dall’intervallo D1: D9 e ti viene comunque chiesto l’intervallo che desideri elaborare. Da lì, però, il processo è diverso: la macro esamina ogni cella e se c’è una corrispondenza parziale, la cella viene eliminata.

Affinché questa variazione sulla macro funzioni correttamente, è necessario includere la riga Opzione Confronta testo al di fuori della procedura stessa.

Questo indica a VBA di abilitare le parole chiave (come Mi piace) che consentono il confronto del testo.

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