Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1168to1172
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

Formatierung automatisch

Formatierung automatisch
Isolde
Hallo,
Sorry, dass ich damit noch mal kommen muss: aber leider gab es bis jetzt noch keine richtige Lösung, weshalb ich das Problem noch ein Mal formuliere und mir denke, "das muss doch möglich sein"?!
Bitte schaut euch mal die hier im Forum hoch geladene Tabelle an:

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

Als erstes soll aufsteigend nach Datum sortiert werden, als zweites aufsteigend nach Schicht und als drittes Kriterium aufsteigend nach Uhrzeit.
Dafür haben mir nette Forumsmitglieder bereits Makros erstellt (siehe am Ende dieses Textes).
Das Problem, weshalb diese nicht richtig funktionieren, liegt an der Formatierung der Datumsspalte. Man muss die Datumswerte markieren und dann bei dem gelben Ausrufezeichen (links an jeder Zelle) auf das Format „20XX“ umstellen.
Warum das so ist kann ich mir nicht erklären.
Dies manuell zu machen bringt mir nichts: da später noch Daten hinzukommen und das dann per Makro alles automatisch funktionieren soll, also das Sortieren automatisch funktionieren soll.
Ich habe schon versucht mit dem Makrorekorder aufzuzeichnen, wie ich die Zellen markiere und an dem, gelben Ausrufezeichen auf „20XX“ umstelle.
Das zeichnet er aber nicht auf (diese Umformatierung wird ignoriert).
Man merkt sofort, dass die jeweiligen Sortier-Makros nicht klappen. Weil das Datum nicht fortlaufend (14.01.10…15.01.10…….16.01.10) sondern in Sprüngen:(1.02.10…01.03.10…1.04.10) sortiert wird (wegen Formatierung).
Ich möchte, das in den Zellen das Format: 14.01.10 steht und oben in der Bearbeitungsleiste bzw. Zeile müsst es dann aber 14.01.2010 anzeigen, damit es auch mit dem Sortieren richtig klappt.
Makros der Mitglieder:
Sub YUSUF_2()
Columns("M:M").NumberFormat = "General"
Range("A4:U714").Sort Key1:=Range("M4"), Order1:=xlAscending, Key2:=Range("O4"), Order2:=xlAscending, Key3:=Range("N4"), Order3:=xlAscending, _
Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortTextAsNumbers, DataOption2:=xlSortNormal _
, DataOption3:=xlSortTextAsNumbers
Columns("M:M").NumberFormat = "dd/mm/yy"
End Sub
Sub sortierTino()
With ActiveSheet
.Range("A4:U" & .Rows.Count).Sort _
Key1:=.Range("M4"), Order1:=xlAscending, _
Key2:=.Range("O4"), Order2:=xlAscending, _
Key3:=.Range("N4"), Order3:=xlAscending, _
Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:= _
xlTopToBottom, DataOption1:=xlSortTextAsNumbers, _
DataOption2:=xlSortNormal, DataOption3:=xlSortTextAsNumbers
End With
End Sub

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Lösung zweiter Versuch
27.07.2010 14:12:03
Klaus
Hallo Isolde,
Da du A-U sortierst, gehe ich davon aus das Spalte V leer ist.
Folgendes Makro generiert in Spalte V das Datum mit 4-stelligen Jahreszahlen, ersetzt die "falschen" Datumswerte in Spalte M gegen die richtigen und sortiert dann ganz normal mit vierstelligen Jahreszahlen.
Diese Lösung ist nicht elegant, nicht schlank und nicht schlau programmiert - aber funktionieren tut sie vielleicht.
Sub BrutaleVariante()
Dim lRow As Long
lRow = Range("M65536").End(xlUp).Row
Range("V4:V" & lRow).FormulaR1C1 = "=DATE(YEAR(RC[-9]),MONTH(RC[-9]),DAY(RC[-9]))"
Range("M4:M" & lRow).Value = Range("V4:V" & lRow).Value
Range("V4:V" & lRow).ClearContents
Range("A4:U" & Rows.Count).Sort _
Key1:=Range("M4"), Order1:=xlAscending, _
Key2:=Range("O4"), Order2:=xlAscending, _
Key3:=Range("N4"), Order3:=xlAscending, _
Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:= _
xlTopToBottom, DataOption1:=xlSortTextAsNumbers, _
DataOption2:=xlSortNormal, DataOption3:=xlSortTextAsNumbers
End Sub
Grüße,
Klaus M.vdT.
Anzeige
Schon besser!!!
27.07.2010 14:49:57
Isolde
Hi Klaus,
in der Beispieldatei welche ich hoch geladen hatte, klappt es makellos.
Auch bei Änderung einer Uhrzeit sortiert es alles neu und richtig.
Meine Originaldatei hat aber ein paar (viele) Spalten mehr, dort meldet die Ausführung einen Fehler in der Zeile - DEBUGGEN:
Range("M4:M" & lRow).Value = Range("V4:V" & lRow).Value
Vielleicht kannst Du mir mit ein paar Kommentarzeilen erläutern, was die einzelnen Schritte bedeuten,
damit ich weis wo ich die Start- und Endspalten der Tabelle in VBA eintragen muss.
Die Tabelle beginnt in Spalte A und endet in BD.
In M steht nach wie vor Datum und in Spalte N die Startzeit und in O nach wie vor die Schicht.
Anzeige
AW: Schon besser!!!
27.07.2010 15:31:44
Klaus
Hi Isolde,
Sub BrutaleVariante()
Dim lRow As Long
'dimensionieren
lRow = Range("M65536").End(xlUp).Row
'letzte Zeile in Spalte M ermitteln
Range("BE4:BE" & lRow).FormulaR1C1 = "=DATE(YEAR(RC[-44]),MONTH(RC[-44]),DAY(RC[-44]))"
'in die ungenutze Zeile BE die Umwandlungsformel eintragen. Spalte BE minus 44 = Spalte M (RC1  _
Bezug)
Range("M4:M" & lRow).Value = Range("BE4:BE" & lRow).Value
'Werte in Spalte M durch Werte in Spalte BE ersetzen (.Value heisst quasi "Werte, nicht Formeln! _
)
Range("BE4:BE" & lRow).ClearContents
'Spalte BE löschen
Range("A4:U" & Rows.Count).Sort _
Key1:=Range("M4"), Order1:=xlAscending, _
Key2:=Range("O4"), Order2:=xlAscending, _
Key3:=Range("N4"), Order3:=xlAscending, _
Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:= _
xlTopToBottom, DataOption1:=xlSortTextAsNumbers, _
DataOption2:=xlSortNormal, DataOption3:=xlSortTextAsNumbers
'Bereich A4:U(ende) sortieren
End Sub

Anzeige
AW: Formatierung automatisch
27.07.2010 13:43:14
Tino
Hallo,
wegen Deiner Formatierung habe ich jetzt erst gesehen
das Deine Datumsspalte kein Datum sondern Text ist.
Versuch mal so
Sub sortierTino()

    With ActiveSheet
            .Range("M4", .Cells(.Rows.Count, 13).End(xlUp)).TextToColumns _
            Destination:=.Range("M4"), DataType:=xlFixedWidth, _
            FieldInfo:=Array(0, 4), TrailingMinusNumbers:=True
            
            .Range("A4:U" & .Rows.Count).Sort _
            Key1:=.Cells(1, 13), Order1:=xlAscending, _
            Key2:=.Cells(1, 14), Order2:=xlAscending, _
            Key3:=.Cells(1, 15), Order3:=xlAscending, _
            Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:= _
            xlTopToBottom, DataOption1:=xlSortNormal, _
            DataOption2:=xlSortNormal, DataOption3:=xlSortTextAsNumbers
    
    End With

End Sub
Gruß Tino
Anzeige
AW:ne noch nicht
27.07.2010 13:59:13
Isolde
das kuriose ist, wie bei den anderen Makros auch:
ändere einfach eine Uhrzeit z.B. von 6 Uhr auf 23 Uhr dann wird aus Frühschicht eine Nachtschicht, was so auch richtig ist.
Lässt man nun das Makro erneut ausführen, dann stimmt die Schicht-Reihenfolge innerhalb des Datums nicht mehr,
also erst zum 14.01.10 alle Frühschichten, dann darunter zum 14.01.10 alle Spätschichten und dann alle Nachtschichten und das gleiche soll dann mit dem 15.01.10 und 16.01.10 etc , weiter gehen.
Das Makro müsste ja dann wieder alles neu und richtig sortieren, wenn man eine Uhrzeit ändert wodurch sich dann die Schicht ändert.
Liebe Grüße
Anzeige
ok. noch ein Versuch
27.07.2010 16:49:25
Tino
Hallo,
Du solltest aber denoch versuchen die Texte Datumsangaben aus Deiner Tabelle raus zu halten.
Sub sortierTino()

    With ActiveSheet
            .Range("M4", .Cells(.Rows.Count, 13).End(xlUp)).TextToColumns _
            Destination:=.Range("M4"), DataType:=xlFixedWidth, _
            FieldInfo:=Array(0, 4), TrailingMinusNumbers:=True
             
             .Range("N4", .Cells(.Rows.Count, 14).End(xlUp)).TextToColumns _
            Destination:=.Range("N4"), DataType:=xlFixedWidth, _
            FieldInfo:=Array(0, 4), TrailingMinusNumbers:=True
            
            .Range("A4:U" & .Rows.Count).Sort _
            Key1:=.Cells(1, 15), Order3:=xlAscending, _
            Key2:=.Cells(1, 14), Order2:=xlAscending, _
            Header:=xlNo, OrderCustom:=1, DataOption1:=xlSortTextAsNumbers, DataOption2:=xlSortNormal

            
            .Range("A4:U" & .Rows.Count).Sort _
            Key1:=.Cells(1, 13), Order1:=xlAscending, _
            Header:=xlNo, OrderCustom:=1, DataOption1:=xlSortNormal

    
    End With

End Sub
Gruß Tino
Anzeige
AW: ok. noch ein Versuch
28.07.2010 10:10:31
Isolde
Hallo Tino,
die erste Zeile beim Datum war falsch formatiert der Rest aber nicht als Text.
Ich meine damit, dass ich nicht mehr machen kann, als die Spalte rechts anzuklicken und auf Format Datum umzustellen.
Nun zu Deinem Makro,
du kannst es spaßeshalber auch gerne mal selber testen (ich hab ja dafür die Tabelle hochgeladen), nur falls es dich hoffentlich auch interessiert, denn wie Du weist kann man ja nur dazu lernen.
Das interessante bei Deinem Makro ist, dass es bei jedem 2. Mal ausführen richtig sortiert und bei ebenso jedem 2. Klick falsch sortiert.
Also ich führe Dein Mako aus und es sortiert sofort richtig, führe ich das Makro anschließend noch mal aus (unabhängig davon, ob Uhrzeiten/Schichten geändert wurden) sortiert es falsch.
Klick ich wieder drauf, dann stimmt die Sortierung wieder und so weiter.
Bei dem Makro von Klaus passt jetzt alles. Da Klaus aber die brutale Variante gewählt hat wäre es interessant zu wissen, ob es da nicht einen Mittelweg (einfachere Lösung) als Makro gibt.
Vielen Dank euch Genies
Anzeige
Danke für die Rückmeldung! o.w.T.
28.07.2010 10:23:21
Klaus
.
eine andere Frage noch hierzu
28.07.2010 11:21:08
Isolde
Hallo Ihr,
für eine kleine Sache bräuchte ich bitte noch kurz eure Hilfe.
Wobei auch das ein seltsamer Excel-Fehler ist:
Wenn Ihr in der hochgeladenen Tabelle mal auf die Spalte „Schicht“ geht und den Auto-Filter aktiviert und „FALSCH“ auswählt,
dann werdet Ihr schnell feststellen, dass es gar keine Uhrzeiten gibt, die keiner Schicht zugeordnet ist und es bei wenigen Uhrzeiten „FALSCH“ anzeigt.
Macht man nun einen Doppelklick in die Uhrzeit-Zelle und drückt ENTER dann geht das „FALSCH“ weg und die richtige Schicht steht dahinter.
Kann man dafür ein Makro schreiben, damit diese unnützen „Falsch“ sozusagen herausgefiltert und auf diese Weise geändert werden.
Ich kann das Beseitigen von „Falsch“ zwar auch mit dem Recorder aufnehmen, aber da noch Daten hinzukommen können, würde dann der markierte Bereich nicht mehr passen.
Liebe Grüße
Anzeige
hab den Fehler gefunden
28.07.2010 12:31:04
Tino
Hallo,
, Text in Spalte wandelt echtes Datum falsch um.
Daher darf die Wandelung von Text in Datum nur einmal gemacht werden.
Wenn Du dafür sogen könntest das Deine Datumswerte und Zeitwerte kein Text ist könnte man sich dies sparen und das sortieren würde immer funzen. ;-)
Entweder Text in Spalte verwenden oder
in eine Zelle eine 1 schreiben diese Zelle kopieren
Deinen Bereich mit Datum markieren und über Inhalt einfügen Multiplizieren einfügen.
Sub Makro1()

With ActiveSheet

    If Len(.Cells(.Rows.Count, 13).End(xlUp)) < 10 Then
        .Range("M4", .Cells(.Rows.Count, 13).End(xlUp)).TextToColumns _
        Destination:=.Range("M4"), DataType:=xlFixedWidth, _
        FieldInfo:=Array(0, 4), TrailingMinusNumbers:=True
    End If
         
     .Range("N4", .Cells(.Rows.Count, 14).End(xlUp)).TextToColumns _
    Destination:=.Range("N4"), DataType:=xlFixedWidth, _
    FieldInfo:=Array(0, 4), TrailingMinusNumbers:=True
    
    
    .Range("A4:O" & .Rows.Count).Sort _
    Key1:=.Range("M4"), Order1:=xlAscending, DataOption1:=xlSortNormal, _
    Key2:=.Range("O4"), Order2:=xlAscending, DataOption2:=xlSortNormal, _
    Key3:=.Range("N4"), Order3:=xlAscending, DataOption3:=xlSortNormal, _
    Header:=xlNo, SortMethod:=xlStroke

End With

End Sub
Gruß Tino
Anzeige
AW: hab den Fehler gefunden
28.07.2010 14:14:52
Isolde
Also Dein Makro scheint jetzt auch tadellos zu funktionieren!
Ich bitte um eine Erläuterung der einzelnen Schritte und was diese Zahlen wohl in dem Code bedeuten?
Dein Makro funktioniert auch ohne das ich umformatieren muss, hast du das mit eingebaut? Wenn ja, wo?
Danke Dir !
AW: hab den Fehler gefunden
28.07.2010 18:44:05
Tino
Hallo,
wie schon geschrieben wandle ich das Textdatum in ein für Excel richtiges Datum um
mit der Funktion Text in Spalte.
(Es gibt auch andere Möglichkeiten, siehe vorhergehender Beitrag)
Da aber dies nicht mehr funktioniert wenn dies schon ein richtiges Datum ist,
prüfe ich die letzte Zelle ob deren Inhalt nicht 10 Stellig ist und führe nur dann diese Funktion aus.
Wenn Du natürlich anders dafür sorgen kannst das dieses Datum nicht als Text vorliegt,
kannst Du Dir diese Code- Zeilen sparen.
Gruß Tino

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige