Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Excel, Zeilen automatisch löschen





Frage

Zeilen nach Eintrag eines neuen Datum löschen Ich habe eine Tabelle zur Mietberechnung, in dieser Tabelle wird z. B. in der Spalte "F" das Auszugsdatum eingetragen, in der Zelle "J2" wird der Abrechnungsmonat eingetragen z. B. 30.09.2003. Besteht nun die Möglichkeit der Automatisierung, wenn ein Auszug im September stattgefunden hat und ich als Abrechnungsmonat z. B. den 31.10.2003 eingebe, daß alle Zeilen in denen in der Spalte "F" ein Auszugsdatum im September eingetragen ist, daß diese Zeilen gelöscht werden? Für Hilfe wäre ich sehr dankbar. Monika Waßer

Antwort 1 von coros

Hallo Monika,

ich hätte da ein Makro anzubieten.

Sub Monatsdaten_löschen()
Dim i As Integer
Dim Qe As Integer
On Error Resume Next
'===============================================================================
'Eine Inputbox (Eingabefenster) wird geöffnet, in dem der zu löschende Monat
'eingegeben wird. Der Text, der angezeigt wird, ist frei konfigurierbar (Text
'zwischen den Anführungsstrichen "" ändern)
'===============================================================================
Qe = Int(InputBox("Für welchen Monat möchten Sie die Daten selektieren?  Bitte nur die Monatszahl im Format M oder MM eingeben.                                                                     Beispiel: für Januar, 1 oder 01 eingeben.", "Monat selectieren", "1"))
'===============================================================================
'Bei Abbruch oder Eingabe einer 0 wird die Inputbox geschlossen
'===============================================================================
If IsEmpty(Qe) Or Qe = 0 Then
    Exit Sub
End If
'===============================================================================
'Liegt der einegegebene Wert ausherhalb des Bereichs 1 bis 12, wird eine Meldung
'ausgegeben mit dem Text Ungültige Monatsangabe. Der Text, der angezeigt wird,
'ist frei konfigurierbar (Text zwischen den Anführungsstrichen "" ändern)
'===============================================================================
If Qe < 1 Or Qe > 12 Then
    MsgBox "Ungültige Monatsangabe"
    Exit Sub
End If
'===============================================================================
'Daten im Bereich F3 bis F100 werden gelöscht, Bereich kann geändert werden in
'dem die Zahlen 3 und F100 geändert werden
'===============================================================================
For i = 3 To Range("F100").Cells.End(xlUp).Row 'Bereich = F3 bis F100, kann geändert werden
If Month(Format(Cells(i, 6), "dd.mm.yyyy")) = Qe Then
    x = x + 1
Rows(i).ClearContents
End If
Next i
'===============================================================================
'Leerzeilen im Bereich F3 bis F100 werden gelöscht, Bereich kann geändert
'werden in dem die Zahlen F3 und F100 geändert werden
'===============================================================================
Range("F3:F100").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
'===============================================================================
'Nach dem Löschen wird ein Text mit der Anzahl der gelöschten
'Datensätze angezeigt
'===============================================================================
MsgBox x & " Datensätze gelöscht!"
End Sub



Diesen Code, musst Du in ein Modul einfügen.
Da ich nicht weiß, ob Du weißt wie man das macht, hier eine kurze Anleitung. Öffne mit der Tastenkombination Alt und F11 die VBA- Umgebung. Auf derlinken Seite gibt es das VBA-Projekt-Fenster. Suche das VBA-Projekt, welches den Namen Deiner Exceldatei hat und markiere ihn. Dann gehst Du auf die Menüleiste und wählst unter Menüpunkt Einfügen Modul aus. Dann kopierst Du den Code und fügst ihn in das rechte Fenster ein. Um das Makro auszuführen, gehst Du wieder in Deine Exceltabelle und wählst in der Menüleiste Extra => Makro => Makros aus. In dem Fenster, dass sich öffnet, suchst Du das Makro Monatsdaten_löschen und klickst es doppelt an. Es sollte dann ein Eingabefenster öffnen, in dem Du die Monatszahl eingibst, dessen Daten gelöscht werden sollen. Es werden danach alle Daten, die dem eingegebenen Wert entsprechen, also wenn Du z.B. eine 9 eingibst für den September alle Daten für September, gelöscht. Danach werden die entstandenen Leerzeilen gelöscht. Den Bereich, in dem Deine Daten stehen muss eventuell noch angepasst werden. Hierzu habe ich einige Erklärungen in das Makro geschrieben. Die Erklärungen stehen als grüner Text in dem Makro vor den zu ändernden Anweisungen. Es wäre eventuell sinnvoll diese Makro über eine Schaltfläche zu starten.

Ich hoffe, dass Du mit meiner Anleitung klar kommst. Andernfalls biete ich Dir an, dass Du mir Deine Datei per Mail zu sendest und ich ändere das für Dich. Die Datei braucht keinerlei Daten enthalten ( also Namen oder Adressen), bis auf vielleicht das Datum in den einzelnen Zellen.

Was noch wichtig ist, mache bevor Du das Makro testest, eine Kopie Deiner Originaldatei. Bei mir hat das Makro funktioniert, ich weiß aber nicht, wie Deine Datei aufgebaut ist.

Ich hoffe, ich konnte Dir weiterhelfen,
coros
Und nicht vergessen, hier noch einmal zu posten, ob Dich die Hilfe weitergebracht oder sogar
Dein Problem gelöst hat.


Antwort 2 von coros

Hallo an alle,

Ich will hier mal eine kurze Rückmeldung geben.

Nachdem Monika davon Gebrauch gemacht hat, mir Ihre Datei zu übermitteln, stellt sich heraus, dass nicht die ganzen Zeilen gelöscht werden sollen, da sonst immer wieder div. Daten neu eungegeben werden müssen, sondern nur der Inhalt der Zellen D, E, F und H, wenn ein Auszugsdatum erfolgt ist. Da in der Datei in Spalte G die Dauer an Tagen, an denen die Wohnungen vermietet wurde, errechnet wurde, habe ich mein Makro so aufgebaut, dass wenn in Spalte G, nach Eingabe des Abrechnungsmonats in die Zelle J2, kein Wert vorhanden ist, sollen die Daten in den bereits geschriebenen Zellen gelöscht werden. Das wird dann automatisch in 3 weiteren Tabellenblättern durchgeführt. Nachfolgend das Makro, welches ausgeführt wird, sobald in Zelle J2 eine Änderung erfolgt.

Sub Daten_löschen()
If ActiveSheet.Name = "Neckarstr" Then 'Ist der Tabellenname Neckarstr, wird die nachfolgende Anweisung durchgeführt
For i = Cells(Rows.Count, 7).End(xlUp).Row To 1 Step -1 'Spalte F wird nach Leerzellen durchsucht
If Cells(i, 7).Value = 0 Then
      Cells(i, 4).ClearContents 'Wenn kein Eintrag in Zelle G, dann wird Eintrag in Zelle D gelöscht
      Cells(i, 5).ClearContents 'Wenn kein Eintrag in Zelle G, dann wird Eintrag in Zelle E gelöscht
      Cells(i, 6).ClearContents 'Wenn kein Eintrag in Zelle G, dann wird Eintrag in Zelle F gelöscht
      Cells(i, 8).ClearContents 'Wenn kein Eintrag in Zelle G, dann wird Eintrag in Zelle H gelöscht
End If
Next i 'Anweisung beginnt wieder bei For i, bis keinne Leerzelle in F mehr vorhanden ist

Range("J2").Select 'Zelle J2 wird markiert
    Selection.Copy 'Inhalt von Zelle J2 wird kopiert
    Sheets("Deizisau").Select 'Tabellenblatt Deizisau wird geöffnet
    Range("J2").Select 'Zelle J2 wird markiert
    ActiveSheet.Paste 'Der vorher kopierte Wert wird in Zelle J2 eingefügt.
    End If 'Ende der Anweisung
    
'===================================================================================
'Die vorherige Anweisung wird für die anderen Tabellenblätter ebenfalls mit den
'nachfolgenden Anweisungen durchgeführt
'====================================================================================
If ActiveSheet.Name = "Deizisau" Then
For i = Cells(Rows.Count, 7).End(xlUp).Row To 1 Step -1
If Cells(i, 7).Value = 0 Then
      Cells(i, 4).ClearContents
      Cells(i, 5).ClearContents
      Cells(i, 6).ClearContents
      Cells(i, 8).ClearContents
  End If
Next i

Range("J2").Select
    Selection.Copy
    Sheets("Deizisau ^WW").Select
    Range("J2").Select
    ActiveSheet.Paste
    End If
    
If ActiveSheet.Name = "Deizisau ^WW" Then
For i = Cells(Rows.Count, 7).End(xlUp).Row To 1 Step -1
If Cells(i, 7).Value = 0 Then
      Cells(i, 4).ClearContents
      Cells(i, 5).ClearContents
      Cells(i, 6).ClearContents
      Cells(i, 8).ClearContents
    End If
Next i

Range("J2").Select
    Selection.Copy
    Sheets("Container").Select
    Range("J2").Select
    ActiveSheet.Paste
    End If
    
If ActiveSheet.Name = "Container" Then
For i = Cells(Rows.Count, 7).End(xlUp).Row To 1 Step -1
If Cells(i, 7).Value = 0 Then
      Cells(i, 4).ClearContents
      Cells(i, 5).ClearContents
      Cells(i, 6).ClearContents
      Cells(i, 8).ClearContents
    End If
Next i
End If
End Sub


Das Makro wird aufgerufen über die Anweisung

'=========================================================================================
'Die Anweisung wird bei jeder Änderung in Zelle J2 ausgeführt
'=========================================================================================
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$J$2" Then
Abfrage_Box.Show 'Nach Änderung in Zelle J2 wird eine Messagebox (Userform) geöffnet
End If

End Sub


Die Messagebox habe ich eingebaut, da auch beim Löschen des Datums das Makro ausgeführt würde und würde dann alle Werte löschen.

Ich hoffe, es ist alles halbwegs verständlich rübergekommen. Bei Nachfragen einfach hier noch mal posten oder eine Mail an mich.

MfG,
coros
Jeder macht was er will, keiner macht was er soll aber alle machen mit.