Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Sortierung nach Datum mit VBA funktioniert nicht

Forumthread: Sortierung nach Datum mit VBA funktioniert nicht

Sortierung nach Datum mit VBA funktioniert nicht
04.11.2004 18:53:49
Guido
Einen schönen guten Abend,
ich hoffe mal wieder auf Eure Hilfe.
Also es werden Daten automatisch in eine Tabelle (Name: Daten) geschrieben. In Spalte A wird ein Datum übertragen. Die Datumsspalte ist TT.MM.JJJJ formatiert.
Mit dem unten stehenden Code möchte ich, dass, sobald eine neue Zeile in die Tabelle geschrieben wird, diese nach Spalte A (Datum) aufsteigend sortiert wird.
Dies klappt auch "fast".
Es wird zwar sortiert, jedoch erfolgt die Sortierung lediglich nach den Tagen, nicht nach Monat bzw. Jahr. Also nach der Sortierung habe ich folgende Reihenfolge
01.01.2004
01.02.2004
02.01.2004
03.01.2004
03.02.2004 usw.
Monats- und Jahresangaben werden ignoriert. Was ist falsch an dem Code?
Herzlichen Dank für Eure Hilfe und
Gruß Guido

Private Sub Worksheet_Change(ByVal Target As Range)
Range("A1").CurrentRegion.Sort _
Key1:=Range("A2"), _
Order1:=xlAscending, _
Header:=xlYes, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlSortColumns, _
DataOption1:=xlSortNormal
End Sub

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sortierung nach Datum mit VBA funktioniert nicht
04.11.2004 19:27:46
PeterW
Hallo Guido,
die Daten liegen nicht als Daten sondern als Text vor, also liegt der Fehler in der Übertragung! Wie werden die "Daten" denn übertragen?
Gruß
Peter
AW: Sortierung nach Datum mit VBA funktioniert nicht
04.11.2004 20:38:52
Guido
Hallo Peter,
die Daten werden mittels Code aus einer Textbox in eine andere Tabelle geschrieben. Es muss in diese Textbox im Format TT.MM.JJJJ eingegeben werden.Von dort werden die Daten gewissermaßen in eine Mastertabelle (Name Daten) übertragen.
In beiden Tabellen ist die Formatierung der Spalte (A) TT.MM.JJJJ.
Wenn das Datum als Text vorliegt, müsste ich dann nicht mit der Sortierung Erfolg haben, wenn ich DataOption1:=xlSortTextAsNumber verwende? Funktionierte aber auch nicht.
Gruß Guido
Die Daten werden folgendermaßen in die Tabelle Daten übertragen, weil ich einmal eine Gesamttabelle und monatlich getrennte Tabellen benötige.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim iRow As Integer, iRowL As Integer
If Target.Column <> 6 Then Exit Sub
If IsEmpty(Target) Then Exit Sub
iRow = Target.Row
With Worksheets("Daten")
If IsEmpty(.Range("A1")) Then
iRowL = 1
Else
iRowL = .Cells(Rows.Count, 1).End(xlUp).Row + 1
End If
Range(Cells(iRow, 1), Cells(iRow, 6)).Copy .Cells(iRowL, 1)
End With
Range("A1").CurrentRegion.Sort _
Key1:=Range("A2"), _
Order1:=xlAscending, _
Header:=xlYes, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom
End Sub

Anzeige
AW: Sortierung nach Datum mit VBA funktioniert nicht
04.11.2004 20:45:39
PeterW
Hallo Guido,
der Fehler liegt beim Übertragen der Werte aus der Textbox. In Textboxen steht immer TEXT, deswegen heißen die so. :-)
Mach beim Übertragen aus den Texten ein Datum - CDate wäre wohl das Schlüsselwort. Leider lässt sich aus deinem Code nicht erahnen, wie die Texte der Textboxen ursprünglich in eine Tabelle geschreiben werden.
Gruß
Peter
Anzeige
AW: Sortierung nach Datum mit VBA funktioniert nicht
04.11.2004 20:50:18
Guido
Hallo Peter,
da kann ich weiterhelfen...
Der Text aus den Textboxen wird folgedermaßen übertragen:
Private Sub cmdDatenübernahme_Click()
Dim NeueZeile As Long
With Worksheets(Format(txtBuchungsdatum.Value, "MMM"))
NeueZeile = .Range("B65536").End(xlUp).Row + 1
.Cells(NeueZeile, 1) = txtBuchungsdatum.Value
.Cells(NeueZeile, 2) = txtEmpfänger.Value
.Cells(NeueZeile, 3) = txtVerwendungszweck.Value
.Cells(NeueZeile, 4) = txtEinnahmen.Value
.Cells(NeueZeile, 5) = txtAusgaben.Value
.Cells(NeueZeile, 6) = cboKategorie.Value
Also müsste ich in der Zeile, in der ich den Inhalt aus txtBuchungsdatum an die Tabelle übergebe, den "Text" mittel CDate in ein Datum wandeln?
Gruß Guido
Anzeige
AW: Sortierung nach Datum mit VBA funktioniert nicht
04.11.2004 20:54:06
PeterW
Hallo Guido,
so würde ich das auch sehen:
.Cells(NeueZeile, 1) = CDate(txtBuchungsdatum.Value)
Gruß
Peter
AW: Sortierung nach Datum mit VBA funktioniert nicht
04.11.2004 20:56:39
Guido
Hallo Peter,
da such ich wie ein Blöder... und das Gute liegt so nah. Ich danke Dir recht herzlich und wünsche einen schönen Abend.
Gruß Guido
AW: Sortierung nach Datum - Ergänzung!!
04.11.2004 20:58:33
PeterW
Hallo Guido,
und bevor du jetzt alle schon in der Tabelle stehenden Daten neu eingibst markliere eine leere Zelle, kopiere sie (STRG+C), markiere die schon vorhandenen "Daten" (die keine sind), rechte Maustaste, Inhalte einfügen, Werte, Addition.
Gruß
Peter
Anzeige
AW: Sortierung nach Datum - Ergänzung!!
04.11.2004 21:10:55
Guido
Hallo Peter,
klasse Tip... habe allerdings momentan nur Testdaten. Normalerweise hättest Du Dir spätestens jetzt ein großes "Bier" verdient.
Besten Dank
Guido
AW: Sortierung nach Datum mit VBA funktioniert nicht
04.11.2004 19:31:34
andre
Hallo Guido,
sieht so aus, als ob Dein Datum keins ist. Beim Datum stehen die Werte standardmäßig rechts, ist das so? Formatiere mal Spalte B oder wo frei ist als Datum, schreibe in B2 =Wert(A2), nach unten ziehen, alles kopieren und Werte einfügen und dann mal die Spalte sortieren ...
Anzeige
AW: Sortierung nach Datum mit VBA funktioniert nicht
04.11.2004 20:45:42
Guido
Hallo Andre,
herzlichen Dank für die Antwort. Scheinbar wird der Zellwert nicht als Datum interpretiert, denn Du hast recht - das "Datum" ist links ausgerichtet. Wenn ich Deinen Vorschlag verfolge, kommen ich zu dem gleichen Ergebnis.

Danke und Gruß Guido
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Sortierung nach Datum in Excel mit VBA


Schritt-für-Schritt-Anleitung

  1. Vorbereitung der Tabelle: Stelle sicher, dass deine Datumsspalte korrekt formatiert ist (TT.MM.JJJJ). Überprüfe, ob die Werte als Datum und nicht als Text gespeichert sind.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Code einfügen: Füge den folgenden Code in das Worksheet-Modul ein, welches die Daten enthält:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Target.Column = 1 Then ' Spalte A für Datum
           Range("A1").CurrentRegion.Sort _
           Key1:=Range("A2"), _
           Order1:=xlAscending, _
           Header:=xlYes, _
           OrderCustom:=1, _
           MatchCase:=False, _
           Orientation:=xlTopToBottom
       End If
    End Sub
  4. Datenübertragung: Stelle sicher, dass beim Übertragen der Daten aus der Textbox das Datum korrekt umgewandelt wird. Verwende CDate, um den Text in ein Datum zu konvertieren:

    .Cells(NeueZeile, 1) = CDate(txtBuchungsdatum.Value)
  5. Testen: Füge ein Datum in die Textbox ein und beobachte, ob die Tabelle korrekt nach Datum sortiert wird.


Häufige Fehler und Lösungen

  • Excel nach Datum sortieren funktioniert nicht: Wenn die Daten als Text gespeichert sind, funktioniert die Sortierung nicht richtig. Stelle sicher, dass die Zellen als Datum formatiert sind.

  • Excel sortiert Datum nicht richtig: Wenn die Sortierung nur nach Tagen und nicht nach Monaten oder Jahren erfolgt, überprüfe die Formatierung der Zellen.

  • Datenübertragung: Achte darauf, dass beim Übertragen der Daten aus der Textbox die Umwandlung in ein Datum erfolgt. Andernfalls wird das Datum als Text behandelt, was die Sortierung beeinträchtigt.


Alternative Methoden

  • Manuelle Sortierung: Du kannst auch manuell sortieren, indem du die Daten auswählst, dann auf "Daten" und "Sortieren" klickst. Wähle die Datumsspalte aus und sortiere sie aufsteigend.

  • Excel Filter: Verwende den Filter, um nach bestimmten Datumsbereichen zu filtern. Achte darauf, dass der Filter korrekt auf die Datumsspalte angewendet wird.


Praktische Beispiele

  • Beispiel für korrekten Code:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Intersect(Target, Me.Range("A:A")) Is Nothing Then
           Application.EnableEvents = False
           Me.Range("A1").CurrentRegion.Sort _
           Key1:=Me.Range("A2"), _
           Order1:=xlAscending, _
           Header:=xlYes
           Application.EnableEvents = True
       End If
    End Sub
  • Übertragung von Daten:

    Private Sub cmdDatenübernahme_Click()
       Dim NeueZeile As Long
       With Worksheets("Daten")
           NeueZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
           .Cells(NeueZeile, 1) = CDate(txtBuchungsdatum.Value)
           ' Weitere Datenübertragungen
       End With
    End Sub

Tipps für Profis

  • Datenvalidierung: Implementiere eine Datenvalidierung für die Textbox, um sicherzustellen, dass nur gültige Datumsformate eingegeben werden.

  • Fehlerbehandlung: Füge eine Fehlerbehandlung im VBA-Code hinzu, um mögliche Laufzeitfehler abzufangen, insbesondere bei der Umwandlung von Text in Datum.

  • Automatische Aktualisierung: Stelle sicher, dass das Arbeitsblatt nach jeder Änderungen automatisch aktualisiert wird, um die Sortierung nach Datum jederzeit zu gewährleisten.


FAQ: Häufige Fragen

1. Warum wird mein Datum nicht korrekt sortiert?
Das Datum könnte als Text gespeichert sein. Überprüfe die Formatierung der Zellen und verwende CDate, um den Text in ein Datum zu konvertieren.

2. Was kann ich tun, wenn Excel nach Datum filtern nicht funktioniert?
Stelle sicher, dass die Filter korrekt auf die Datumsspalte angewendet werden und die Daten als Datum und nicht als Text formatiert sind.

3. Wie kann ich die Sortierung nach Datum automatisieren?
Verwende VBA, um die Sortierung automatisch auszuführen, wenn neue Daten eingegeben werden. Achte dabei darauf, die Umwandlung von Text in Datum zu berücksichtigen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige