Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA für Zeilen löschen

VBA für Zeilen löschen
07.12.2018 21:39:06
Ralf
Hallo zusammen,
ich habe mal ein Frage für ein Makro. Leider habe ich so gar keine Ahnung von VBA und hoffe, dass ihr mir helfen könnt.
Es geht um folgende Tabelle:
https://www.herber.de/bbs/user/125965.xlsx
Hier importiere ich Daten aus einem anderen Programm. In diesem ist es einfacher, alle Daten auszulesen. Daher entstehen immer sehr große Datenmengen, welche ich gar nicht benötige. Die nicht benötigten Datenmengen (Zeilen) habe ich immer von Hand gelöscht. Möchte das ganze jetzt gerne etwas einfacher machen.
Ich habe Konten in Spalte A, welche gebraucht werden - ca. 80 verschiedene Konten, z.B.: 3511, 3518, 5411, 5461, 5731... Alle anderen Konten bzw. deren gesamte Zeile soll gelöscht werden. Wie könnte ich das machen?
Die Tabelle hat immer diese 12 Monatsblätter und immer einen identischen Aufbau. Leider sind die Anzahl der Zeilen(Konten) von Monat zu Monat unterschiedlich. Auch füllen sich die anderen Monatblätter immer erst im Laufe des Jahres.
Wie kann ich das Makro dann am besten auf dem Tabellenblatt ausführen? Geht das über einen Button?
Vielen Dank
Ralf

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA für Zeilen löschen
07.12.2018 23:50:04
Sepp
Hallo Ralf,
in ein allgemeines Modul:
Modul Modul1
Option Explicit 
 
Sub cleanData() 
  Dim rng As Range, rngDelete As Range 
  Dim varKeep As Variant, lngRow As Long 
 
  varKeep = Array(3511, 3518, 5411, 5461, 5731) 'zu behaltende Kontonummern 
 
  For Each rng In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row) 
    If IsNumeric(rng) Then 
      If IsError(Application.Match(CLng(rng), varKeep, 0)) Then 
        If rngDelete Is Nothing Then 
          Set rngDelete = rng 
        Else 
          Set rngDelete = Union(rng, rngDelete) 
        End If 
      End If 
    End If 
  Next 
 
  If Not rngDelete Is Nothing Then 
    If MsgBox("Es wurden " & rngDelete.Rows.Count & " unbenötigten Kontonummern gefunden!" & _
      vbLf & vbLf & "Sollen die gefundenen Kontonummern gelöscht werden?", _
      vbQuestion + vbYesNo, "Konten löschen") = vbYes Then 
      rngDelete.EntireRow.Delete 
    End If 
  Else 
    MsgBox "Keinen unbenötigten Kontonummern gefunden!", vbInformation, "Konten löschen" 
  End If 
   
  Set rng = Nothing 
  Set rngDelete = Nothing 
End Sub 
 
 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


Der Code bearbeitet immer das aktive Tabellenblatt.
Das Makro mit Alt&F8 aufrufen und ausführen. Du kannst auch einen Tastenkombination erstellen (im Dialog unter 'Optionen'), oder eine Schaltfläche einfügen und das Makro zuweisen. Oder du erstellst einen Button im Menüband für das Makro.
 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: VBA für Zeilen löschen
08.12.2018 09:37:06
Ralf
Hallo Sepp,
vielen lieben Dank. Das funktioniert hervorragend!
Nun werde ich aber unverschämt und habe doch noch eine Bitte dazu.
Ich habe die benötigten Konten schon auf einem anderen Tabellenblatt für die weitere Bearbeitung zusammengefasst. Bevor ich diese nun noch mal in das Makro schreibe, kann man diese dann vielleicht schon von dort auslesen?
Daten befinden sich auf dem Tabellenblatt "Master", Spalte C beginnend ab C10. Auch hier leider, dass ich nicht genau sagen kann, wieviel es sind. Das kann sich unter dem Jahr immer ändern. Aber sonst befindet sich in Spalte C nichts mehr.
Vielen Dank
Ralf
Anzeige
AW: VBA für Zeilen löschen
08.12.2018 09:45:44
Sepp
Hallo Ralf,
kein Problem:
Modul Modul1
Option Explicit 
 
Sub cleanData() 
  Dim rng As Range, rngDelete As Range 
  Dim varKeep As Variant, lngRow As Long 
   
  With Sheets("Master") 
    varKeep = .Range("C10:C" & Application.Max(10, .Cells(.Rows.Count, 3).End(xlUp).Row)) 
  End With 
 
  For Each rng In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row) 
    If IsNumeric(rng) Then 
      If IsError(Application.Match(CLng(rng), varKeep, 0)) Then 
        If rngDelete Is Nothing Then 
          Set rngDelete = rng 
        Else 
          Set rngDelete = Union(rng, rngDelete) 
        End If 
      End If 
    End If 
  Next 
 
  If Not rngDelete Is Nothing Then 
    If MsgBox("Es wurden " & rngDelete.Rows.Count & " unbenötigten Kontonummern gefunden!" & _
      vbLf & vbLf & "Sollen die gefundenen Kontonummern gelöscht werden?", _
      vbQuestion + vbYesNo, "Konten löschen") = vbYes Then 
      rngDelete.EntireRow.Delete 
    End If 
  Else 
    MsgBox "Keine unbenötigten Kontonummern gefunden!", vbInformation, "Konten löschen" 
  End If 
   
  Set rng = Nothing 
  Set rngDelete = Nothing 
End Sub 
 
 
 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: VBA für Zeilen löschen
08.12.2018 10:11:25
Ralf
Hallo Sepp,
nochmals vielen Dank.
Aber irgend etwas mache ich verkehrt? Er löscht mir jetzt immer alle Konten.
Ich habe mal meine Testdatei hochgeladen:
https://www.herber.de/bbs/user/125966.xlsm
Gruß Ralf
AW: VBA für Zeilen löschen
08.12.2018 10:26:46
Sepp
Hallo Ralf,
das passiert deshalb, weil du die Kontonummern in 'Master' als Text stehen hast und nicht als Zahl!
Sub cleanData()
  Dim rng As Range, rngDelete As Range
  Dim varKeep As Variant, lngRow As Long
   
  With Sheets("Master")
    varKeep = .Range("C10:C" & Application.Max(10, .Cells(.Rows.Count, 3).End(xlUp).Row))
  End With
 
  For Each rng In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)
    If IsNumeric(rng) Then
      If IsError(Application.Match(rng, varKeep, 0)) Then
        If rngDelete Is Nothing Then
          Set rngDelete = rng
        Else
          Set rngDelete = Union(rng, rngDelete)
        End If
      End If
    End If
  Next
 
  If Not rngDelete Is Nothing Then
    If MsgBox("Es wurden " & rngDelete.Rows.Count & " unbenötigten Kontonummern gefunden!" & _
      vbLf & vbLf & "Sollen die gefundenen Kontonummern gelöscht werden?", _
      vbQuestion + vbYesNo, "Konten löschen") = vbYes Then
      rngDelete.EntireRow.Delete
    End If
  Else
    MsgBox "Keine unbenötigten Kontonummern gefunden!", vbInformation, "Konten löschen"
  End If
   
  Set rng = Nothing
  Set rngDelete = Nothing
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: VBA für Zeilen löschen
08.12.2018 10:35:42
Ralf
So funktioniert es!
Vielen Dank!!!

351 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige