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

VBA Wenn Datum in größer als dann Zeile löschen

Forumthread: VBA Wenn Datum in größer als dann Zeile löschen

VBA Wenn Datum in größer als dann Zeile löschen
18.04.2018 08:24:07
FR
Hallo Zusammen,
über die Forum/Google Suche habe ich bisher nichts passendes gefunden.
Ich habe eine Tabelle mit einem Datum TT/MM/JJJJ in Spalte E.
Hier muss ich oft Filtern und z. B. alles rausfiltern, wenn das Datum größer als letzter Freitag oder auch ein anderer Tag. Hier möchte ich mich aber nicht auf den Wochentag beziehen, sondern wirklich auf ein Datum TT/MM/JJJJ.
Bisher habe ich versucht ein VBA Code zufinden/erstellen, bei dem ich durch InputBox ein Datum eintrage und alles was größer ist als dieses Datum soll gelöscht werden. Also dann soll die ganze Zeile gelöscht werden. Alle meine Versuche sind gescheitert...
Hat vielleicht jemand einen guten Tipp?
Danke
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Wenn Datum in größer als dann Zeile löschen
18.04.2018 09:57:54
UweD
Hallo
Hier eine Lösung mit Filter.
Sub Lösche_Datum()
    Dim TB As Worksheet, Ez As Integer, SP As Integer, LR As Double, Datum As Date
    
    Set TB = Sheets("Tabelle1")
    Ez = 2 'ab Zeile 
    SP = 5 'Spalte mit Datum 

    Datum = InputBox("Grenzdatum?", "Löschen Datum", DateValue("01/01/2018"))
    
    If TB.AutoFilterMode Then TB.AutoFilterMode = False ' Autofilter ausschalten 
    With TB
        
        If WorksheetFunction.CountIf(.Columns(SP), Datum) > 0 Then 'sind überhaupt Daten da? 
            .Columns(SP).AutoFilter
            .Columns(SP).AutoFilter Field:=1, Criteria1:=">" & CDbl(Datum), Operator:=xlAnd
            
            LR = .Cells(.Rows.Count, SP).End(xlUp).Row 'letzte Zeile der Spalte 
            
            .Rows(Ez).Resize(LR - Ez + 1).Delete xlUp 'Zeilen löschen 
            
            .AutoFilterMode = False
        End If
        
    End With
End Sub

LG UweD
Anzeige
AW: VBA Wenn Datum in größer als dann Zeile löschen
18.04.2018 11:03:20
FR
Hallo UweD,
vielen Dank für deinen Vorschlag, leider wird der Vorgang bei --> .Columns(SP).AutoFilter Eine Info die ich noch vergessen habe: In einigen Zellen ist kein Datum vorhanden. Hat das eine Auswirkung auf den von dir vorgeschlagenen Code?
Beispieldatei?
18.04.2018 11:06:18
UweD
bitte Andere...
18.04.2018 16:27:49
UweD
Hallo
das liegt an deinem Tabellenobjekt und den Bereichen im sheet.
Das hebelt alle "normalen" Routinen aus.
Ich hab jetzt eine Stunde probiert und bekomm es nicht allgemein lauffähig hin.
Bin raus
LG UweD
AW: bitte Andere...
18.04.2018 16:41:58
Daniel
Hi
das funktioniert mit deiner Beispieldatei:
Sub löschen()
Dim Eingabe As String
Eingabe = InputBox("Datum")
If Not IsDate(Eingabe) Then
MsgBox "Bitte Datum korrekt eingeben"
Exit Sub
End If
With ActiveSheet.UsedRange
With .Columns(.Columns.Count).Offset(0, 2)
.FormulaR1C1 = "=IF(RC4>" & CLng(CDate(Eingabe)) & ",1,"""")"
.Cells(1, 1).ClearContents
If WorksheetFunction.Sum(.Cells) > 0 Then _
.SpecialCells(xlCellTypeFormulas, 1).EntireRow.Delete
.ClearContents
End With
End With
End Sub
wenn du mit "größer" "älter" gemeint hast, dann tausche in der Formelzeile (.FormulaR1C1) das Größer/Kleiner-Zeichen.
Gruß Daniel
Anzeige
AW: Beispieldatei?
19.04.2018 08:04:12
FR
Hallo Zusammen,
UweD riesen Danke für deine Hilfe.
Ich könnte die Tabellen-Formatierung auch nach dem löschen der Zeilen durchführen.
Auch an Daniel ein riesen Danke. Mit deinem Code schaffe ich es fast zum Ziel.
Eine Sache muss ich noch lösen: Der Code löscht leider auch Zeilen wo überhaupt kein Datum vorhanden ist.
Ich bastele später mal rum und berichte.
PS: In deinem Code habe ich noch etwas ergänzt: aus der 4 eine 5 bei "RC5", weil ich die Spalte E prüfen muss.
Nochmal Danke
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

VBA für Datumsgesteuertes Löschen von Zeilen in Excel


Schritt-für-Schritt-Anleitung

Um eine Zeile in Excel zu löschen, wenn das Datum in einer bestimmten Spalte größer als ein eingegebenes Datum ist, kannst du folgenden VBA-Code verwenden. Diese Anleitung basiert auf den Diskussionen im Forum und bietet dir eine klare Schritt-für-Schritt-Anleitung.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Kopiere den folgenden Code in das Modul:
Sub Lösche_Datum()
    Dim TB As Worksheet, Ez As Integer, SP As Integer, LR As Double, Datum As Date

    Set TB = Sheets("Tabelle1")
    Ez = 2 'ab Zeile 
    SP = 5 'Spalte mit Datum 

    Datum = InputBox("Grenzdatum?", "Löschen Datum", DateValue("01/01/2018"))

    If TB.AutoFilterMode Then TB.AutoFilterMode = False ' Autofilter ausschalten 
    With TB

        If WorksheetFunction.CountIf(.Columns(SP), Datum) > 0 Then 'sind überhaupt Daten da? 
            .Columns(SP).AutoFilter
            .Columns(SP).AutoFilter Field:=1, Criteria1:=">" & CDbl(Datum), Operator:=xlAnd

            LR = .Cells(.Rows.Count, SP).End(xlUp).Row 'letzte Zeile der Spalte 

            .Rows(Ez).Resize(LR - Ez + 1).Delete xlUp 'Zeilen löschen 

            .AutoFilterMode = False
        End If

    End With
End Sub
  1. Schließe den VBA-Editor und kehre zu deinem Arbeitsblatt zurück.
  2. Führe das Makro aus, indem du ALT + F8 drückst, das Makro auswählst und auf Ausführen klickst.

Häufige Fehler und Lösungen

  • Problem: Der Code gibt einen Fehler an der Stelle .Columns(SP).AutoFilter aus.

    • Lösung: Stelle sicher, dass in der Spalte mit den Daten (Spalte E) keine leeren Zellen vorhanden sind. Du kannst diese Zellen mit einem Datum füllen oder den Code anpassen, um leere Zellen zu ignorieren.
  • Problem: Das Makro löscht auch Zeilen ohne Datum.

    • Lösung: Überprüfe den Code und stelle sicher, dass die Bedingung für die Filterung korrekt ist. Du kannst den Code anpassen, um nur Zellen mit gültigen Datumsangaben zu berücksichtigen.

Alternative Methoden

Wenn du eine einfachere Methode bevorzugst, kannst du auch die Filterfunktion in Excel nutzen:

  1. Wähle die gesamte Tabelle aus.
  2. Klicke auf Daten > Filter.
  3. Verwende die Datumsspalte, um die Daten nach deinem gewünschten Datum zu filtern.
  4. Markiere die gefilterten Zeilen, klicke mit der rechten Maustaste und wähle Zeilen löschen.

Diese Methode ist weniger automatisiert, kann aber hilfreich sein, wenn du keine VBA-Kenntnisse hast.


Praktische Beispiele

Angenommen, du hast folgende Daten in Spalte E:

Datum
01/01/2022
15/02/2022
10/01/2023
25/12/2021

Wenn du das Makro ausführst und als Grenzdatum den 01/01/2022 angibst, werden die Zeilen mit den Daten 15/02/2022 und 10/01/2023 gelöscht, während die Zeilen mit 01/01/2022 und 25/12/2021 erhalten bleiben.


Tipps für Profis

  • Eingabedaten validieren: Füge eine Überprüfung hinzu, um sicherzustellen, dass das eingegebene Datum im richtigen Format ist. Dies kann mit IsDate erfolgen.
If Not IsDate(Datum) Then
    MsgBox "Bitte ein gültiges Datum eingeben."
    Exit Sub
End If
  • Fehlerbehandlung: Implementiere Fehlerbehandlung im Code, um Laufzeitfehler abzufangen und zu behandeln.
On Error GoTo Fehler
' Dein Code hier
Exit Sub

Fehler:
MsgBox "Ein Fehler ist aufgetreten: " & Err.Description

FAQ: Häufige Fragen

1. Frage
Wie kann ich das Datum im anderen Format eingeben?
Um das Datum im deutschen Format TT.MM.JJJJ einzugeben, musst du sicherstellen, dass das Datumsformat in deiner Excel-Installation korrekt eingestellt ist. Du kannst dies in den Excel-Optionen ändern.

2. Frage
Kann ich das Makro für mehrere Spalten gleichzeitig verwenden?
Ja, du kannst den Code anpassen, um mehrere Spalten zu durchsuchen. Du musst jedoch sicherstellen, dass die Logik für die Filterung und das Löschen entsprechend angepasst wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige