119 Aufrufe
Gefragt in Tabellenkalkulation von
Moin,

ich habe eine Frage zu VBA. Für meine Arbeit wäre es eine große Erleichterung, wenn ich eine bestimmte Liste bereits vorsortiert erhalten würde. Dafür benutze ich VBA, da diese Aufgabe regelmäßig wiederkehrt. Generell klappt alles auch ganz gut, aber bei einer Sache komme ich gedanklich einfach nicht weiter und weiß gar nicht wie ich das in VBA programmieren kann.

Es geht darum, dass 2 Mal im Monat diese Liste bearbeitet wird. Einmal zu Monatsanfang, einmal Mitte des Monats. Je nachdem brauche ich die Rechnungsbelege entweder von vor 3 Monaten oder von vor 2 Monaten. Also vor dem 5. eines Monats die Belege von vor 3 Monaten, danach die von vor 2 Monaten. Ich hatte an eine if Prüfung innerhalb von VBA gedacht und, wenn er dann feststellt, ob das Datum größer oder kleiner 5 ist, er dann alle anderen Belege aus der Liste löscht, die ich nicht brauche.

Da bisher nichts funktioniert hat, kann ich euch keinen Code zeigen. Kann mir bitte jemand helfen?

LG

1 Antwort

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)

Hallo,

kopiere den folgenden Code in ein allgemeines Modul deiner Arbeitsmappe:

Sub Datumfilter()
Dim intMonat As Integer
Dim intJahr As Integer
Dim lngLZeile As Long
Dim lngLSpalte As Long

'aktuelles Jahr in Variable für Jahr schreiben
intJahr = Year(Now)

'Monat ermitteln
If Day(Now) < 5 Then
  intMonat = Month(Now) - 3
Else
  intMonat = Month(Now) - 2
End If
 
'falls Monat negativ, dann Jahr und Monat anpassen
If intMonat < 1 Then
  intMonat = 12 + intMonat
  intJahr = intJahr - 1
End If

With ActiveWorkbook.ActiveSheet
  'letzte Zeile in Spalte A ermitteln
  lngLZeile = .Cells(Rows.Count, 1).End(xlUp).Row
  'letzte Spalte in Zeile 1 ermitteln
  lngLSpalte = .Cells(1, Columns.Count).End(xlToLeft).Column
  'ggf. vorhandene Filter aufheben
   If .FilterMode Then .ShowAllData
  'nun Autofilter in Spalte A auf entsprechenden Monat (und Jahr) setzen
  .Range(Cells(1, 1), Cells(lngLZeile, lngLSpalte)).AutoFilter Field:=1, Operator:= _
        xlFilterValues, Criteria2:=Array(1, intMonat & "/1/" & intJahr)
End With

End Sub

Hier wird allerdings nichts gelöscht, es wird nur ein Filter auf den betreffenden Monat gesetzt. Hier wird davon ausgegangen, dass das Datum in Spalte A steht.

Gruß

M.O.

...