Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1016to1020
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
Sortierung Datum nach Text
walter
Guten Morgen Allerseits,
ich habe eine Tabelle, es werden die Daten reinkopiert und anderem auch die
Datumswerte.
Nun hatte ich festgestellt das die Spalte der Datumswerte nicht sortiert wird, habe
mal aufgezeichnet und da klappt es.
Wenn ich nun das aufgezeichnete wieder ablaufen lasse, klappt es nicht,
WIESO?
Selection.Sort Key1:=Range("L4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortTextAsNumbers
mfg walter mg
Zusätzlicher Hinweis
walter
Hallo Zusammen,
habe gerade festgestellt, wenn ich den gesamten Bereich selektieren und
das Menü unter "Daten" Sortieren und dann in der
"Sortierwarnung" auf: "Alles was wie eine Zahl aussieht, als Zahl sortieren"
auswählen, klappt es.
mfg walter mg
AW: Sortierung Datum nach Text
Dirk
Hallo!
Ist dein Bereich selektiert, indem Du die Datumswerte sortieren moechtest? Falls Nein solltest Du das in Deiner Formel erledigen.
Zb:

Sub sorting()
Range("L4").Sort Key1:=Range("L4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortTextAsNumbers
End Sub


Falls Du eine kopfzeile hast, welche nicht mitsortiert werden soll, reduziere den Wert fuer die startzelle (Range("L3").sort)
Gruss
Dirk aus Dubai

Anzeige
Hallo Dirk, geht nicht
walter
Guten Morgen Dirk,
bist Du wirklich in Dubai?
Hie mein Makro, es wird selektiert und dann sortiert genau wie dein Makro.
Dim z As Long
z = Range("G3").End(xlDown).Row
ActiveSheet.Range(Cells(4, 4), Cells(z, 31)).Select
Selection.Sort Key1:=Range("L4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortTextAsNumbers
mfg walter mg
AW: Hallo Dirk hier Musterdatei
Dirk
Hallo!
Jetzt sehe ich Dein Problem. Hatte sowas auch schon mal. Musst auf den wert pruefen, ob er wie ein Datum aussieht und dann ggf umformatieren.
Schau mal hier, das hat mir damals auch geholfen.
Gruss
Dirk aus Dubai (ja, ich bin in Dubai bei z.Z. 35 Grad ;-)
Hallo Dirk Wo finde nichts
walter
Hallo Dirk,
finde nichts zum schauen ?
mfg walter mg
AW: Hallo Dirk hier Musterdatei
Daniel
Hi
ändere mal das Zahlenformat in Spalte L nach "Standard" und du wirst erkennen, daß in den 3 Zeilen mit dem Datum 30.04.2008 kein Datum, sondern Text enthalten ist.
wenn du diese Texte in ein Datum umwandelst (dazu Zelle aktivieren, 1x in die Bearbeitungszeile klicken und ENTER drücken), dann funktioniert auch die Sortierfunktion richtig.
Gruß, Daniel
btw, so wie du die Daten selektierst, würde ich die Sortieroption "Header" von "xlGuess" auf "xlNo" umstellen.
Anzeige
Hey Daniel hast Recht aber
walter
Hallo Daniel,
hast Recht aber wenn ich die Menge an Zahlen einsetze kann ich nicht
jede einzelne Zelle bearbeiten.
Habe gerade mal die Spalte in "Standard" aufgezeichnet, sortiert und später wieder
die Spalte "L" in Datum umformatiert.
Habe mal aufgezeichnet, müßte man doch irgendwie ins Makro einbauen können ?
Range("L4:L53").Select
Selection.NumberFormat = "General"
z = Range("G3").End(xlDown).Row
Range(Cells(4, 4), Cells(z, 31)).Sort _
Key1:=Range("L4"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortTextAsNumbers
Range("L4:L53").Select
Selection.NumberFormat = "m/d/yyyy"
Range("L3").Select
mfg walter mg
Anzeige
AW: Hallo Dirk hier Musterdatei
Erich
Hallo Walter,
hier auch gleich noch ein Vorschlag, wie du den Code ohne Select schreiben könntest:

Option Explicit
Private Sub CommandButton2_Click()
Dim z As Long
z = Range("G3").End(xlDown).Row
'  ------------------- sortieren nach Typ Aufsteigend ----------------------
Range(Cells(4, 4), Cells(z, 31)).Sort _
Key1:=Range("G4"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub
Private Sub CommandButton1_Click()
Dim z As Long
z = Range("G3").End(xlDown).Row
'  ------------------- sortieren nach Datum Aufsteigend --------------------
ActiveSheet.Range(Cells(4, 4), Cells(z, 31)).Sort _
Key1:=Range("L4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortTextAsNumbers
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Code - Korrektur
Erich
Hi Walter,
die zweite Prozedur hatte noch 2 Haken drin
(nicht falsch, aber unschön und evtl. störend)

Private Sub CommandButton1_Click()
Dim z As Long
z = Range("G3").End(xlDown).Row
'  ------------------- sortieren nach Datum Aufsteigend --------------------
Range(Cells(4, 4), Cells(z, 31)).Sort _
Key1:=Range("L4"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortTextAsNumbers
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Danke Erich aber
walter
Hallo Erich,
danke für die Kürzung, funktioniert.
Leider werden aber noch aus dem Monat April nach unten gesetzt.
Da ich später mehr als 50 Zeilen habe, ist es sehr mühsam dies mittels jede einzelne
Zelle zu bearbeiten.
mfg walter mg
Anzeige
AW: Danke Erich aber
Dirk
HAllo!
Falls Du die letzte Zeile nicht festlegen willst kannst Du das ja mal so probieren:
Range(Cells(4, 4), Cells(z, Cells.SpecialCells(xlCellTypeLastCell).row)).Sort _
Key1:=Range("L4"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortTextAsNumbers
Damit sollte dann immer die letzte belegte zelle in dieser spalte ermittelt werden und damit in der Suche enthalten sein.
Gruss
Dirk aus Dubai
Danke Dirk
walter
Hallo Dirk,
danke für die Information.
Das Problem habe ich leider noch nicht bewältigt.
Habe mal dies eingesetzt: Range("L4:L53").Select
Selection.NumberFormat = "General"
z = Range("G3").End(xlDown).Row
Range(Cells(4, 4), Cells(z, 31)).Sort _
Key1:=Range("L4"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortTextAsNumbers
Range("L4:L53").Select
Selection.NumberFormat = "m/d/yyyy"
Range("L3").Select
z = Range("G3").End(xlDown).Row
Range(Cells(4, 4), Cells(z, 31)).Sort _
Key1:=Range("L4"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortTextAsNumbers
weiß allerdings noch nicht wie ich die Spalte "L" das Format direkt nach dem ich den gesamten
Bereich selektiert habe.
Aber so müßte es doch gehen oder ?
mfg walter mg
Anzeige
Hallo Dirk, Daniel u. Erich ich habe die Lösung !
walter
Hallo Dirk, Daniel und Erich,
bitte mal schauen, ich glaub ich habe die Lösung !
Habe mal das Makro so geändert:
Dim z As Long
z = Range("a3").End(xlDown).Row
ActiveSheet.Range(Cells(4, 4), Cells(z, 31)).Select
'----- sortieren nach Erstzulassung Aufsteigend ------------
' Selection.Sort Key1:=Range("L4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("L4:L65000").Select
Selection.NumberFormat = "General"
z = Range("G3").End(xlDown).Row
Range(Cells(4, 4), Cells(z, 31)).Sort _
Key1:=Range("L4"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortTextAsNumbers
Range("L4:L65000").Select
Selection.NumberFormat = "m/d/yyyy"
Range("L3").Select
Range(Cells(4, 4), Cells(z, 31)).Sort _
Key1:=Range("L4"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortTextAsNumbers
es ist zwar etwas umständlich, ich hatte jetzt alles richtig Sortiert,
mfg walter mg
Anzeige
AW: Hallo Dirk, Daniel u. Erich ich habe die Lösung !
Daniel
Hi
wenn du TEXT-Datums in echte Datums umwandeln willst, dann geht das auch recht einfach über die Funktion DATEN - TEXT IN SPALTEN
oder als Code:

Range("L4:L53").TextToColumns Destination:=Range("L4"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 4), TrailingMinusNumbers:=True


Gruß, Daniel

Aber ich weiß doch die ...
walter
Hallo Daniel,
ich weiß doch nicht wie Lang der Bereich ist ?
mfg walter mg
AW: Aber ich weiß doch die ...
Daniel
Hi
du stellst doch die Länge des bereiches mit der in der Variablen z fest.
du sollest den Code, den du verwendest, schon besser kennen.
in einen Range-Bereich kann man die Variable Z auf diese Weise einbauen:
Range("L4:L" & z)
ansonsten ist es für die TEXT in SPALTEN-funktion kein Problem, wenn der Bereich grösser gewählt wird als tatsächlich Daten vorhanden sind: leere Zellen bleiben leere Zellen.
Gruß, Daniel
Anzeige
Hallo Daniel
walter
Hallo Daniel,
werde noch weiter probieren müssen, danke für den Hinweis,
mfg walter mg
AW: Aber ich weiß doch die ...
Peter
Hallo Walter,
das ist doch eine deiner leichtesten Übungen:

Public Sub InDatumWandeln()
Dim WkSh    As Worksheet
Dim lZeile  As Long
Set WkSh = ThisWorkbook.Worksheets("Tabelle1")
With WkSh
.Range("L4:L" & .Cells(Rows.Count, 12).End(xlUp).Row).TextToColumns _
Destination:=Range("L4"), _
DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, _
FieldInfo:=Array(1, 4)  ', TrailingMinusNumbers:=True
End With
End Sub


Gruß Peter

AW: Aber ich weiß doch die ...
Peter
Hallo Walter,
wenn du jetzt noch einen Punkt vor das Range setzt, ist es noch besser.
Destination:=.Range("L4"), _
Gruß Peter
Meine Datumswerte wurden..
walter
Hallo Peter,
danke aber meine Datumswerte wurden verändert, aus 20.05.2008 wurde
20.08.2008, leider nicht sortiert.
Bitte Teste das doch mal mit meiner Musterdatei,
danke im voraus,
herzlichst walter mg
Hier die akt.Testdatei
walter
Hallo Peter,
es soll die Datumsspalte sortiert werden, habe mal farbig eingefärbt.

Die Datei https://www.herber.de/bbs/user/56295.xls wurde aus Datenschutzgründen gelöscht


mfg walter
AW: Hier die akt.Testdatei
Peter
Hallo Walter,
bei mir sortiert es (meine ich einwandfrei) so, wie im angehängten Beispiel - siehe Sort im Modul1
https://www.herber.de/bbs/user/56297.xls
Gruß Peter
Hallo Peter, leider nicht
walter
Hallo Peter,
wieso bei mir nicht, habe meine Orginal Daten reinkopiert.
Erst einmal nach Typ sortieren, dann nach Datum.
https://www.herber.de/bbs/user/56299.xls
mfg walter mg
So kopiere ich die Daten
walter
Hallo Peter,
so kopiere ich die Daten von meiner UF ist die Datenbank, vielleicht muß ich da das
Format einbringen ?
ActiveCell.Offset(0, 8) = TextBox8 ' Datum
und von meiner 2.UF aus so:
ActiveCell.Offset(0, 8) = Label95 'Datum
mfg walter mg
AW: So kopiere ich die Daten
Peter
Hallo Walter,
entweder du fragst deine Eingabfelder vorher ab, ob sie gefüllt sind UND ein Datum enthalten
If Trim(TextBox8.Value) "" then
if IsDate(TextBox8.Value) then
ActiveCell.Offset(0, 8) = CDate(TextBox8).value)
Else
MsgBox "Die TextBox enthält kein kalendarisch richtiges Datum."
End If
Else
MsgBox "Es wurde nichts eingegeben."
End If
Oder du bist sicher, dass etwas vernünftiges eingegeben wurde, dann übernimm es gleich mit CDate(TextBox8.Value).
Gruß Peter
AW: Hallo Peter, leider nicht
Peter
Hallo Walter,
das sollte nach der vielen Zeit, in der du mit VBA arbeitest kein Problem sein.
Dreh die beiden Keys einfach um:
Range("D4:AD" & .Cells(Rows.Count, 12).End(xlUp).Row).Sort _
Key1:=.Range("G4"), Order2:=xlAscending, _
Key2:=.Range("L4"), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom
Gruß Peter
Hallo Peter
walter
Hallo Peter,
habe dies durchgeführt:
ActiveCell.Offset(0, 8) = CDate(TextBox8).value)
ActiveCell.Offset(0, 8) = CDate(Label95)
klappt soweit.
Nur dies konnte ich nicht umsetzen:
Datenbank.Offset(0, 8).Value = Cells(ActiveCell.Row, 11)
kann doch nicht soviel wie Du glaubst. Ohne Deine Hilfe läuft eigentlich nicht soviel,
vielleich kannst Du mir dies noch umsetzen,
danke im voraus,
mfg walter mg
AW: Datenbank? - Text zu Datum
Erich
Hi Walter,
Peter bin ich zwar nicht, aber vielleicht kann ich dir trotzdem weiterhelfen.
Bei
ActiveCell.Offset(0, 8) = CDate(TextBox8).value)
stört das .value)
Entweder so:
ActiveCell.Offset(0, 8) = CDate(TextBox8)
oder so:
ActiveCell.Offset(0, 8) = CDate(TextBox8.value)
Was soll die folgende Zeile tun?
Datenbank.Offset(0, 8).Value = Cells(ActiveCell.Row, 11)
Was ist Datenbank? Wenn das ein Bereich wäre Datenbank.Offset(0, 8) der um 8 8 Spalten nach rechts
verschobene Bereich. Dem kannst du aber so keinen einzelnen Wert zuweisen.
Ohne deine Mappe wird nicht so recht klar, was du brauchst.
Woher kommt eigentlich ActiveCell? Da scheint es unnötige "Selects" zu geben...
Noch eine Bemerkung zur Umwandlung von Text in Datum:
Bei der TextToColumns-Methode werden richtige Datumse teilweise geändert, was sicher nicht sein soll.
Wenn in einer Spalte Datum und Text-Datum durcheinander vorkommen,
kannst du die Texte damit in Datumse überführen:

Sub TextZuDatum()
Dim lngZ As Long, rng As Range
lngZ = Cells(Rows.Count, 12).End(xlUp).Row
For Each rng In Range(Cells(4, 12), Cells(lngZ, 12))
Select Case VarType(rng)
Case vbDate
' ist schon Datum, also ok
Case vbString
If IsDate(rng) Then
rng = CDate(rng)
Else
MsgBox "Zelle " & rng.Address(0, 0) & ": kein gültiges Datum: " & rng
End If
Case Else
MsgBox "Zelle " & rng.Address(0, 0) & ": weder Text noch Datum: " & rng
End Select
Next rng
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Hallo Erich Danke -)
walter
Guten Abend Erich,
danke für die Unterstützung und die Hinweise.
Diese Zeile:
Datenbank.Offset(0, 8).Value = Cells(ActiveCell.Row, 11)
da kopiere von der aktiven Tabelle in die Datenban-Tabelle, habe aber gerade festgestellt
das ich diese Zeile so stehen lassen kann.
Das Datum von der Aktiven Tabelle ist ja hinterlegt in den anderen Zeilen
hatte ich das Datum von der UF kopiert, deshalb wurde dies per Text in die
Datenbanktabelle eingefügt.
Ich habe ja die 2 Zeilen geändert, so werden jetzt die Datumswerte Sauber eingefügt.
Danke nochmals an ALLE anderen ebenfalls
und
noch einen schönen Abend,
mfg walter mb

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige