Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Sortierung Datum nach Text | Herbers Excel-Forum


Betrifft: Sortierung Datum nach Text von: walter mg
Geschrieben am: 26.10.2008 10:28:00

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

  

Betrifft: Zusätzlicher Hinweis von: walter mg
Geschrieben am: 26.10.2008 11:12:19

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


  

Betrifft: AW: Sortierung Datum nach Text von: Dirk aus Dubai
Geschrieben am: 26.10.2008 11:15:50

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


  

Betrifft: Hallo Dirk, geht nicht von: walter mg
Geschrieben am: 26.10.2008 11:30:03

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


  

Betrifft: Hallo Dirk hier Musterdatei von: walter mg
Geschrieben am: 26.10.2008 11:44:28

Hallo Dirk,
hier habe ich eine Musterdatei.
https://www.herber.de/bbs/user/56283.xls

mfg walter mb


  

Betrifft: AW: Hallo Dirk hier Musterdatei von: Dirk aus Dubai
Geschrieben am: 26.10.2008 12:38:03

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 ;-)


  

Betrifft: Hallo Dirk Wo finde nichts von: walter mg
Geschrieben am: 26.10.2008 12:43:10

Hallo Dirk,
finde nichts zum schauen ?

mfg walter mg


  

Betrifft: AW: Hallo Dirk Wo finde nichts von: Dirk aus Dubai
Geschrieben am: 26.10.2008 12:45:43

Sorry!

Zu schnell getippt ;-)

http://www.wer-weiss-was.de/theme156/article3153360.html

Dirk aus Dubai


  

Betrifft: AW: Hallo Dirk hier Musterdatei von: Daniel
Geschrieben am: 26.10.2008 12:47:31

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.


  

Betrifft: Hey Daniel hast Recht aber von: walter mg
Geschrieben am: 26.10.2008 13:35:48

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


  

Betrifft: AW: Hallo Dirk hier Musterdatei von: Erich G.
Geschrieben am: 26.10.2008 13:00:20

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


  

Betrifft: AW: Code - Korrektur von: Erich G.
Geschrieben am: 26.10.2008 13:04:15

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


  

Betrifft: Danke Erich aber von: walter mg
Geschrieben am: 26.10.2008 13:19:20

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


  

Betrifft: AW: Danke Erich aber von: Dirk aus Dubai
Geschrieben am: 26.10.2008 13:28:07

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


  

Betrifft: Danke Dirk von: walter mg
Geschrieben am: 26.10.2008 13:31:52

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


  

Betrifft: Hallo Dirk, Daniel u. Erich ich habe die Lösung ! von: walter mg
Geschrieben am: 26.10.2008 13:46:44

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


  

Betrifft: AW: Hallo Dirk, Daniel u. Erich ich habe die Lösung ! von: Daniel
Geschrieben am: 26.10.2008 13:54:27

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


  

Betrifft: Aber ich weiß doch die ... von: walter mg
Geschrieben am: 26.10.2008 14:19:26

Hallo Daniel,
ich weiß doch nicht wie Lang der Bereich ist ?

mfg walter mg


  

Betrifft: AW: Aber ich weiß doch die ... von: Daniel
Geschrieben am: 26.10.2008 14:32:49

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


  

Betrifft: Hallo Daniel von: walter mg
Geschrieben am: 26.10.2008 15:22:01

Hallo Daniel,
werde noch weiter probieren müssen, danke für den Hinweis,
mfg walter mg


  

Betrifft: AW: Aber ich weiß doch die ... von: Peter Feustel
Geschrieben am: 26.10.2008 14:39:10

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


  

Betrifft: AW: Aber ich weiß doch die ... von: Peter Feustel
Geschrieben am: 26.10.2008 14:42:56

Hallo Walter,

wenn du jetzt noch einen Punkt vor das Range setzt, ist es noch besser.

Destination:=.Range("L4"), _

Gruß Peter


  

Betrifft: Meine Datumswerte wurden.. von: walter mg
Geschrieben am: 26.10.2008 15:13:09

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


  

Betrifft: Hier die akt.Testdatei von: walter mg
Geschrieben am: 26.10.2008 15:20:26

Hallo Peter,
es soll die Datumsspalte sortiert werden, habe mal farbig eingefärbt.

https://www.herber.de/bbs/user/56295.xls

mfg walter


  

Betrifft: AW: Hier die akt.Testdatei von: Peter Feustel
Geschrieben am: 26.10.2008 15:51:34

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


  

Betrifft: Hallo Peter, leider nicht von: walter mg
Geschrieben am: 26.10.2008 16:13:51

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


  

Betrifft: So kopiere ich die Daten von: walter mg
Geschrieben am: 26.10.2008 16:18:24

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


  

Betrifft: AW: So kopiere ich die Daten von: Peter Feustel
Geschrieben am: 26.10.2008 17:13:21

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


  

Betrifft: AW: Hallo Peter, leider nicht von: Peter Feustel
Geschrieben am: 26.10.2008 17:15:41

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


  

Betrifft: Hallo Peter von: walter mg
Geschrieben am: 26.10.2008 19:18:00

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


  

Betrifft: AW: Datenbank? - Text zu Datum von: Erich G.
Geschrieben am: 26.10.2008 19:49:30

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


  

Betrifft: Hallo Erich Danke -) von: walter mg
Geschrieben am: 26.10.2008 20:24:13

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


Beiträge aus den Excel-Beispielen zum Thema "Sortierung Datum nach Text"