Excel - Ein Makro zum Löschen von Zeilen mit bestimmten Werten

Microsoft Excel ist eines der handlichsten Tools zum Herumspielen mit Zahlen. In Fällen, in denen eine große Anzahl von Zeilen oder Spalten betroffen ist, verfügt Excel auch über das Visual Basic Framework, mit dem benutzerdefinierte Makros aufgezeichnet oder geschrieben werden können. Mithilfe von VBA- Makros können Benutzer den Prozess mit einem Minimum an Benutzereingaben automatisieren. Diese Makros können angepasst werden, um mit bestimmten Werten oder Zeilen zu arbeiten. Der Benutzer kann auch den Start- und Endbereich für bestimmte Werte oder Zeilen anpassen. Alle diese Optionen erhöhen die Verwendung von Excel als Datenverarbeitungsanwendung .

  • Problem
  • Lösung
  • Beachten Sie, dass

Problem

Grundsätzlich habe ich ein Blatt mit Informationen zu verschiedenen Abteilungen, und ich möchte jede Zeile mit Ausnahme der Zeilen löschen, die bestimmte Werte enthalten (die ich beim Ausführen des Skripts eingeben möchte).

Nehmen wir an, in der Spalte mit dem Namen der Abteilung (in meinem Blatt mit dem Namen "Avd") möchte ich, dass das Skript nach Zellen sucht, die beispielsweise die Nummern 1, 3, 5, 6 oder 21 nicht enthalten. und so weiter (ich habe ungefähr 36 verschiedene Nummern).

Lösung

Sie müssen nur die Informationen in der Spalte markieren und dann das folgende Makro ausführen. In einem Kästchen werden Sie aufgefordert, den Wert auszuwählen, den Sie beibehalten möchten. Dies ist für bis zu 30.000 Zeilen verfügbar.

 Sub DeleteRows () Dim strToDelete As String Dim rngSrc As Range Dim NumRows As Integer Dim ThisRow As Integer Dim ThatRow As Integer Dim ThisCol As Integer Dim J As Integer Dim DeletedRows As Integer strToDelete = InputBox ("Wert zum Auslösen Keep, Jason ??? ? ", " Zeilen löschen ") Setze rngSrc = ActiveSheet.Range (ActiveWindow.Selection.Address) NumRows = rngSrc.Rows.Count ThisRow = rngSrc.Row ThatRow = ThisRow + NumRows - 1 ThisCol = rngSrc.Column Dim topRows As Integer Dim bottomRows As Integer bottomRows = 30000 For J = ThisRow To NumRows Schritt 1 Wenn Cells (J, ThisCol) = strToDelete Then 'Rows (J). Select topRows = J Exit For DeletedRows = DeletedRows + 1 End If Next J For J = (topRows + 1) To NumRows Schritt 1 If Cells (J, ThisCol) strToDelete Then 'Rows (J). Select bottomRows = J Exit For' DeletedRows = DeletedRows + 1 End If Next J If topRows 4 Then ActiveSheet.Range (Cells (4, 1), Zellen (topRows - 1, 52)). Select Selection.delete Shift: = xlUp End If ActiveSheet.Range (Zellen (bottomRows - topRows + 4, 1), Zellen (30000, 52)). Select Selection.delete Shift: = xlUp 'MsgBox "Anzahl gelöschter Zeilen:" & DeletedRows End Sub 

Beachten Sie, dass

Vielen Dank an Jason für diesen Tipp im Forum.

Vorherige Artikel Nächster Artikel

Top-Tipps