Umwandlung von Text in Datum im bestimmten Format (yyyy/mm)

  • Excel

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von INOPIAE.

    Umwandlung von Text in Datum im bestimmten Format (yyyy/mm)

    Hallo zusammen,

    ich bin in VBA Anfängerin und brauche Hilfe. Ich habe eine ExcelDatei mit einem großen Datensatz. In der in Spalte A stehen über 10000 Zeilen Datum im Textformat (Bsp 2020/12). Nun würde ich gern den Text der ganzen Spalte in ein Datumsformat mit VBA umwandeln.

    Hintergrund ist, in der Spalte A stehen Daten für 24 Monate (Text: 2020/12 - 2022/12). Wenn ich neue Daten einfüge (Bsp. 2023/01), sollen die alten (2020/12) rausfliegen, so dass in der Datei nur Daten für 24 Monate bleiben.

    Vielen herzlichen Dank vorab. :)

    Viele Grüße

    maylee

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „maylee“ ()

    Was steht denn genau ein der Spalte A? Ein Datum oder eine Monatsbezeichnung?

    Wie würdest Du denn die Tabelle manuell aufräumen? Dies sind dann auch die Schritte, die Du im Code ahben musst.
    Ggf. zeichne doch mal auf, was Du manuell machen würdest. Dann siehst Du schon einmal in welche Richtung der Code gehen soll.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Hallo INOPIAE,

    vielen Dank für deine Rückmeldung. :) Es sieht folgendermaßen aus:

    A2: 2020/12
    A3: 2020/12
    usw.
    A100: 2021/01
    A300: 2021/01
    usw.
    A600: 2021/02
    A900: 2021/02
    usw.


    Diese Werte sind im Textformat. Ich brauche die im Datumsformat.
    Manuell würde ich, sobald ich die Daten von 2022/12 hochgeladen habe einfach die Zeilen mit dem Datum 2020/12 löschen. Habe ich bisher auch gemacht, aber per VBA müsste das doch einfacher gehen (per Buttonklick).

    Also wenn Daten für den neuen Monat hochgeladen werden. Datum aktuell minus 24 Monate. Der Rest soll gelöscht werden.
    Wie willst Du aus Jahr und Monat ein Datum machen? Ein Datum besteht immer aus Tag, Monat und Jahr.

    Mache doch aus dem Datum Deine Monatsangabe und suche danach.

    Visual Basic-Quellcode

    1. ​Dim Suche as String
    2. Suche = Format(Date, "YYYY / MM")


    Mache den Import der Daten nicht mit VBA sondern mit PowerQuery (Daten aus einem Ordner einfügen) und setze dort einen entsprechenden Filter bzw. sorge dafür, dass nur 24 Monatsdateien in dem Ordner liegen. Dann müsen die Daten nur noch aktualisiert werden.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „INOPIAE“ ()

    Manueller Weg:

    Visual Basic-Quellcode

    1. Option Explicit
    2. Sub ConvertToDate()
    3. Dim c As Range
    4. For Each c In Intersect(UsedRange, Range("A:A"))
    5. If c.Value Like "####/##" Then
    6. c.Value = DateSerial(Left(c.Value, 4), Right(c.Value, 2), 1)
    7. End If
    8. Next
    9. End Sub
    10. Sub CleanupOldData()
    11. Dim r As Long
    12. For r = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    13. If DateDiff("m", Cells(r, 1).Value, Date) > 23 Then Rows(r).Delete
    14. Next
    15. End Sub
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    maylee schrieb:

    IfDateDiff
    If DateDiff


    Oder hast du noch andere Daten in Spalte A stehen, die kein Datum repräsentieren?

    Visual Basic-Quellcode

    1. If IsDate(Cells(r, 1).Value) Then If DateDiff("m", Cells(r, 1).Value, Date) > 23 Then Rows(r).Delete
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Vollzitat eines Vorposts an dieser Stelle entfernt ~VaporiZed

    Hallo nochmals,

    ich kämpfe mit dieser Auswertung echt lange inzwischen.
    Bei der Text in Datum Umwandlung funktioniert, aber lädt extrem lange. Datensatz besteht aus über 14.000 Zeilen. Gibt es eine Möglichkeit die Ladezeit zu verkürzen?

    Vielen Dank vorab. :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    maylee schrieb:

    Gibt es eine Möglichkeit die Ladezeit zu verkürzen?
    Ladezeit oder Ausführungszeit?
    Von wo lädst du die Daten?

    Ausführungszeit kannst du bei solchen Mengen verkürzen, indem du Application.ScreenUpdating vor der Schleife auf False setzt (und danach wieder auf True).
    Wenn du viele Formeln im Sheet hast, kannst du auch vorübergehend Application.Calculation = xlCalculationManual setzen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Es sind 6 Spalten mit pro Spalte über 12.700 Daten mit Formeln. Die restlichen Spalten sind ohne Formeln.
    Daraus habe ich eine Pivot gebastelt. Die jedes mal aktualisiert werden soll wenn Daten ersetzt werden. Nur braucht die Aktualisierung ewig lang. Was ja verständlich ist, weil das ein riesiger Datensatz ist. Ich hoffe wirklich dass es dafür eine Lösung gibt.
    Überlege mal, ob Du den Import der Daten nicht über PowerQuery erledigen kannst. Damit sind dann auch die Formeln weg und das Aktualisieren ist schneller.

    In PowerQuery kannst Du auch Deine Anpassungen mit der Monatsauswertung unterbringen bzw, gleich nur die Daten für den Monat zur Verfügung stellen.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).