Entfernen von Zellen mit bestimmten Begriffen (Microsoft Excel)
Ankur hat ein Arbeitsblatt mit Tausenden von Zellen, die verschiedene Begriffe enthalten. Er muss eine große Anzahl dieser Begriffe und die Zellen, in denen sie vorkommen, löschen. Beispielsweise muss er möglicherweise alle Zellen löschen, die Begriffe wie „google“, „youtube“, „linkedin“ und zahlreiche andere Begriffe enthalten. Ankur weiß, dass er jeden dieser Begriffe suchen und ersetzen kann, aber das ist ziemlich langweilig. Er fragt sich, ob es eine Möglichkeit gibt, alle zu entfernenden Begriffe zu identifizieren und sie dann von Excel aus diesen Tausenden von Zellen entfernen zu lassen.
Wenn Sie diese Art von Dingen regelmäßig ausführen müssen, ist die beste Lösung die Verwendung eines Makros. Der Trick besteht darin, wie Sie im Makro genau angeben, was Sie ersetzen möchten. Eine Möglichkeit besteht darin, die Informationen wie im folgenden Beispiel in ein Array zu packen:
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
Die gesuchten Begriffe werden in das vArray-Array eingefügt, und dann wird jedes Mitglied des Arrays (jeder Begriff) durchlaufen. Die Replace-Methode wird mit dem Selection-Objekt verwendet, um die eigentlichen Ersetzungen durchzuführen. Das Makro entfernt keine Zellen. Es wird einfach jeder Text entfernt, der dem Begriff entspricht. Beim Ersetzen wird bei der Suche die Groß- und Kleinschreibung nicht berücksichtigt, sodass „google“ mit „Google“ übereinstimmt.
Da das Auswahlobjekt verwendet wird, müssen Sie sicherstellen, dass Sie die Liste auswählen, die Sie verarbeiten möchten, bevor Sie das Makro tatsächlich ausführen.
Wenn Sie dies nicht tun, wird nichts ersetzt.
Wenn Sie möchten, können Sie ein Makro erstellen, das die Begriffe aus einer Reihe von Zellen in der Arbeitsmappe abruft.
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
Dieses Makro ruft die Suchbegriffe aus dem Bereich D1: D9 ab und fordert Sie dann auf, den Bereich der Zellen auszuwählen, die Sie verarbeiten möchten. Es wird dieselbe Ersetzungsmethode verwendet, die im vorherigen Makro verwendet wurde, außer dass der LookAt-Parameter xlWhole ist. Dies bedeutet, dass der Suchbegriff mit der gesamten Zelle übereinstimmen muss, um entfernt zu werden. Die Begriffe werden jedoch weiterhin als unabhängig von Groß- und Kleinschreibung betrachtet.
Beachten Sie, dass die bisherigen Beispiele keine Zellen löschen. Sie löschen einfach den Inhalt von Zellen. In vielen Fällen ist dies genau das, was Sie möchten, da Sie das Layout des eigentlichen Arbeitsblatts nicht stören möchten. Wenn Sie wirklich Zellen löschen möchten, würden Sie die Replace-Methode nicht verwenden. Stattdessen können Sie den erweiterten Textvergleich aktivieren und den Operator „Gefällt mir“ verwenden, um festzustellen, ob eine Übereinstimmung vorliegt.
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
Beachten Sie, dass die Suchbegriffe weiterhin aus dem Bereich D1: D9 stammen und Sie weiterhin nach dem Bereich gefragt werden, den Sie verarbeiten möchten. Von dort aus ist der Prozess jedoch anders: Das Makro untersucht jede Zelle, und wenn eine teilweise Übereinstimmung vorliegt, wird die Zelle gelöscht.
Damit diese Variation des Makros ordnungsgemäß funktioniert, müssen Sie die Zeile Option Compare Text außerhalb der Prozedur selbst einfügen.
Dadurch wird VBA angewiesen, die Schlüsselwörter (z. B. „Gefällt mir“) zu aktivieren, mit denen Text verglichen werden kann.
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (13373) gilt für Microsoft Excel 2007, 2010, 2013, 2016, 2019 und Excel in Office 365.