Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1908to1912
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA importierte Liste nach Datum filtern

VBA importierte Liste nach Datum filtern
07.12.2022 10:40:09
Philipp
Hallo Leute,
ich bin gerade dabei, ein Makro zu schreiben, dass importierte Daten automatisch filtert, teilweise löscht und dann Zusammenhänge erstellt.
Jetzt hakt es an der Stelle, wo nach dem Datum gefiltert werden soll. Alle Zeilen sollen gelöscht werden, bei denen das Datum in Spalte AJ später als der 7. Tag des darauffolgenden Monats liegt. Wenn ich das Makro laufen lasse, wird das passende Datum auch im Filter angezeigt (z.B. heute: "größer gleich 07.01.2023"), jedoch werden manche Zeilen gefiltert und andere nicht, scheinbar sehr willkürlich.
Die Spalte AJ ist als Datum formatiert.
Mein Gedanke war, alle Werte aus Spalte AJ in Zahlen umzuwandeln und danach zu filtern, aber irgendwie bekomme ich das nicht hin.
Hat vielleicht jemand eine Idee? Vielen Dank im Voraus! :-)
Viele Grüße
Philipp
Hier mein Makro (auszugsweise):

Sub Auswertung()
' Auswertung Makro
Dim strDatei As String
Dim Target As ListObject
Dim f As Office.FileDialog
Dim DatumBis As Date
Dim strPfadSuchen As String
Dim strDateiSuchen As String
Dim strDateiname As String
Dim strPfad As String
Dim strSheet As String
Dim strBR As String
Dim n As Integer
Dim x As Integer
'n = 1
x = 0
For n = 1 To 12
Start:
If n + x = 1 Then
strBR = "C46"
End If
If n + x = 2 Then
strBR = "C43"
End If
If n + x = 3 Then
strBR = "C41"
End If
If n + x = 4 Then
strBR = "C53"
End If
If n + x = 5 Then
strBR = "C48"
End If
If n + x = 6 Then
strBR = "C47"
End If
If n + x = 7 Then
strBR = "C94"
End If
If n + x = 8 Then
strBR = "C93"
End If
If n + x = 9 Then
strBR = "C40"
End If
If n + x = 10 Then
strBR = "C23"
End If
If n + x = 11 Then
strBR = "C26"
End If
If n + x = 12 Then
MsgBox ("Abgeschlossen mit Fehlern.")
GoTo EndProg
End If
strPfadSuchen = "C:\Testdateien\"
strDateiSuchen = Dir(strPfadSuchen & strBR & "*.csv", vbNormal)
ActiveWorkbook.Worksheets.Add After:=Sheets("Start")
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & strPfadSuchen & strDateiSuchen, Destination:=Range("$A$1"))
'On Error GoTo FehlerKeineDaten
.Name = " "
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 65001
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
Rows("1:1").Select
Selection.AutoFilter
' Ab hier geht es los mit der Filterung nach Datum:
ActiveSheet.Range("$AJ$2:$AJ$99999").NumberFormat = "dd.mm.yyyy"
DatumBis = CDate("07." & ((Month(Now) + 1) Mod 12) & "." & Year(Now) + 1)
ActiveSheet.Range("$A:$AY").AutoFilter Field:=36, Criteria1:=">=" & DatumBis  'Wenn ich hier CDbl(DatumBis) eingebe, bekomme ich immerhin schon mal eine Zahl zum Filtern
Rows("2:999999").Select
Selection.Delete Shift:=xlUp '
Columns("$A:$AY").EntireColumn.AutoFit
ActiveSheet.Name = Range("$A$2")
strPfad = "C:\Positionen\" & Date & "\"
strSheet = Range("$A$2")
If Dir(strPfad, vbDirectory) = "" Then
MkDir (strPfad)
Else
End If
strDateiname = (Range("$A$2") & "_" & Date & ".xlsx")
Worksheets(strSheet).Copy
ActiveWorkbook.SaveAs strPfad & strDateiname
ActiveWorkbook.Close
End With
Next n
FehlerKeineDaten:
ActiveSheet.Name = strBR & " - Fehler!"
x = x + 1
On Error GoTo -1
GoTo Start
MsgBox ("Fertig! Gespeicherte Auswertungen siehe " & strPfad)
EndProg:
End Sub

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA importierte Liste nach Datum filtern
07.12.2022 10:55:11
Oberschlumpf
Hallo,
mit Bsp-Datei, mit Bsp-Daten, mit deinem Code könnten Lösungsideen bestimmt viel einfacher erarbeitet werden.
Ciao
Thorsten
AW: VBA importierte Liste nach Datum filtern
07.12.2022 11:14:54
ralf_b
prüfe ob deine Datumseinträge auch wirklich Datumswerte und keine Texte sind.
In VBA ist gelegentlich das amerikanische Datumsformat notwendig.
sorry Thorsten owt
07.12.2022 11:15:40
ralf_b
alles gut...
07.12.2022 11:23:18
Oberschlumpf
Hi Ralf,
Philipp sollte schon erkennen, dass dein Hinweis für ihn sein soll.
Wenn er das nich erkennt...hmm...dann....?###xxx$$$ :-)
Ciao
Thorsten
AW: VBA importierte Liste nach Datum filtern
07.12.2022 13:30:17
Philipp
Hallo ralf_b,
Wenn ich die Zellen mit dem Makro mit "yyyy/mm/dd" formatieren lasse, erscheint "Benutzerdefiniert" bei der Zellformatierung.
Mit "dd/mm/yyyy" erkennt er die Formatierung als Datum, sollte also korrekt sein.
Da das aber nicht funktioniert, war meine Überlegung, ob ich in der Spalte das Datum als Zahl umwandeln lasse und dann danach filtere. Aber da weiß ich leider nicht wie das geht.
Anzeige
AW: VBA importierte Liste nach Datum filtern
07.12.2022 13:12:51
Philipp
Hallo Thorsten,
sorry, bin noch neu hier. Meinst du das ich die Excel-Datei hier hochladen soll? Bringt das was, wenn das Makro externe csv-Dateien importiert?
AW: VBA importierte Liste nach Datum filtern
07.12.2022 14:27:11
Oberschlumpf
Hi Philipp
ja, vordergründig meinte ich die Excel-Datei, die du hier hochladen könntest, um vielleicht besser helfen zu können.
Aber mit Bsp-DATEN meinte ich nicht nur Daten in der Excel-Datei, sondern du könntest auch zusätzlich eine CSV-Datei mit Bsp-Daten hier hochladen.
Ciao
Thorsten
AW: VBA importierte Liste nach Datum filtern
08.12.2022 07:35:15
Philipp
Guten Morgen,
hier habe ich also mal die (gekürzte) Excel-Datei und eine dazugehörige csv-Datei, die ich auch gekürzt habe. Aber es erfüllt seinen Zweck, zwei Zeilen mit niedrigerem Datum und zwei Zeilen mit höherem Datum, die der Filter aber irgendwie nicht packt :-(
Die txt-Datei muss in .csv umbenannt werden, konnte leider keine csv-Datei direkt hochladen.
Im Makro habe ich den Ordner für die csv-Datei in C:\Excel-Test\ benannt.
https://www.herber.de/bbs/user/156581.xlsm
https://www.herber.de/bbs/user/156582.txt
Anzeige
AW: VBA importierte Liste nach Datum filtern
08.12.2022 14:49:02
Philipp
Wenn ich das Makro laufen lasse, wird bei mir die Spalte AJ (Termin ab) als Datum formatiert!?
AW: VBA importierte Liste nach Datum filtern
08.12.2022 15:13:33
ralf_b
ich weis du bist jetzt PQ-Jünger, aber um dir meine Argumente zu verdeutlichen. Siehe hier die Anpassungen.
Wenn du den Filter-Dropdown aufklickst, steht dort nicht mehr Textfilter, sondern Datumsfilter.
Und das macht nur die 4.

.TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
ActiveSheet.Range("$A:$AY").AutoFilter Field:=36, Criteria1:=">=2022/01/01"  'Soll nur AB dem Datum anzeigen
GoTo EndProg:

Anzeige
AW: VBA importierte Liste nach Datum filtern
14.12.2022 07:32:59
Philipp
Manchmal können Kleinigkeiten große Auswirkungen haben... :-D Funktioniert, danke! :-)
AW: VBA importierte Liste nach Datum filtern
07.12.2022 17:11:32
Yal
Hallo Philipp,
ich verstehe nicht ganz: wenn Du schon deine Datei über eine Power Query Abfrage lädst ("ActiveSheet.QueryTables.Add"), warum dann nicht die Daten komplett innerhalb von Power Query filtern/bereinigen? Dann wären nur die relevante Daten aus dem Datei in Excel geladen und Du müsstest nicht anschliessend überflüssige Daten wieder löschen.
VG
Yal
AW: VBA importierte Liste nach Datum filtern
08.12.2022 07:36:35
Philipp
Guten Morgen Yal,
damit kenne ich mich leider gar nicht aus, aber ich versuche mich mal schlau zu machen, wie ich das bewerkstelligen könnte. Danke für den Tipp! :-)
Viele Grüße
Philipp
Anzeige
AW: VBA importierte Liste nach Datum filtern
08.12.2022 14:51:35
Philipp
So, habe mich heute mal ein bisschen mit PowerQuery auseinandergesetzt. Ist ja schon ganz schick und kann einiges :-) Das Importieren und Filtern klappt jetzt einwandfrei, auch bei dem Datum.
Aber was ich nicht hinbekomme: Nach einem variablen Datum zu filtern. Wenn ich mit PowerQuery ein Datum vorgebe, funktioniert es. Aber wie kann ich eine Variable einsetzen, damit nach dieser gefiltert wird?
Die Variable muss ja bei jedem Lauf berechnen, nach welchem Datum gefiltert werden soll: Also immer bis zum 7. Tag des nächsten Monats.
AW: VBA importierte Liste nach Datum filtern
08.12.2022 17:59:23
Yal
Hallo Philipp,
_ gibt dein Filter-Datum in einer Zelle.
_ Gibt diese Zelle einen Namen.
_ gehe auf "Daten", "Neue Abfrage", "aus anderen Quellen", "Leere Abfrage"
_ in "Start", "erweiterte Editor"
_ füge es so ein:

let
Quelle = Excel.CurrentWorkbook(){[Name="xxx"]}[Content],
in
Quelle
_ ersetze aber xxx durch den Namen deine Zelle
(Alternativ könnte man eine intelligente Tabelle über diese einzige Zelle legen. Ein Spaltenüberschrift wäre dann notwendig)
_ andere den Typ der Spalte in Datum (Rechtklick, "Typ ändern", "Datum")
_ Rechtklick auf die einzige Zelle der Abfrage und "Drilldown"
_ andere den Namen der Abfrage (recht in Abfrageeinstellungen") in "RefDatum" (nur für Konsistenz der Anleitung relevant)
_ in deiner Hauptabfrage (links in dem verborgene "Abfragen" -Bereich), lege in der Vergleich der Datumspalte

= Table.SelectRows(#"Geänderter Typ1", each [Datum] >= RefDatum)
(#"Geänderter Typ1" ist immer der Schritt davor. Bei Dir wird an der Stelle was anderes geben. Der Schritt zum Datumvergleich ist eh schon da. Muss nur angepasst werden.)
Voilà.
VG
Yal
Anzeige
AW: VBA importierte Liste nach Datum filtern
14.12.2022 07:34:09
Philipp
Hallo Yal,
Das funktioniert einwandfrei, vielen Dank für deine Hilfe! :-)
Viele Grüße
Philipp

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige