Rimozione di celle contenenti termini specifici (Microsoft Excel)
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.