Autor
|
Thema: Sortieren mit Makro (5749 mal gelesen)
|
Kayyy Mitglied Konstrukteur
Beiträge: 210 Registriert: 05.04.2005 SW10 / SP2.1 Excel 2003 SP3
|
erstellt am: 25. Jul. 2012 07:26 <-- editieren / zitieren --> Unities abgeben:
Hallo Exceler, ich habe ein Makro erstellt, welches mir nur die Werte einer Tabelle (ohne Formeln) in ein neues Tabellenblatt kopiert und nach Spalte "Datum" aufsteigend sortiert: 01.03.12 02.03.12 03.03.12 02.04.12 02.05.12 02.06.12 Das klappt beim Aufnehmen des Makros wunderbar, Lasse ich das Makro dann aber anwenden, sind die Datumsangaben nur nach dem Tag aufsteigend sortiert 01.03.12 01.06.12 02.03.12 02.04.12 02.05.12 03.03.12 Die Sortierwarnung-Optionen habe ich getestet; beim Aufnehmen des Makros gibt´s Unterschiede, kein Unterschied aber beim Anwenden des Makros. Was mache ich falsch? Danke!
------------------ Geht nicht gibt's nicht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 25. Jul. 2012 09:08 <-- editieren / zitieren --> Unities abgeben: Nur für Kayyy
|
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 25. Jul. 2012 09:12 <-- editieren / zitieren --> Unities abgeben: Nur für Kayyy
|
Kayyy Mitglied Konstrukteur
Beiträge: 210 Registriert: 05.04.2005 SW10 / SP2.1 Excel 2003 SP3
|
erstellt am: 25. Jul. 2012 16:21 <-- editieren / zitieren --> Unities abgeben:
Hallo Beverly und Paul, Beverly: Excel 2003 SP3 Der Code: Cells.Select Selection.Copy Sheets("Sortiert nach Datum").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Uhrzeit-Normal").Select Application.CutCopyMode = False Cells.Select Selection.Copy Sheets("Sortiert nach Datum").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Rows("1:2").Select Selection.Delete Shift:=xlUp Range("A2").Select ActiveWindow.FreezePanes = True Range("D2").Select Range("A1:T173").Sort Key1:=Range("D2"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortTextAsNumbers Sheets("Uhrzeit-Normal").Select Range("A3").Select End Sub Paul: Habe folgendes versucht: Vorher die Zellen im Einfügebereich als Datum formatieren und im Makro das Format mitkopieren. Die neuen Zellen sind je als Datum formatiert, das Sortier-Ergebnis ist aber beim Anwenden des Makros trotzdem in beiden Fällen falsch ------------------ Geht nicht gibt's nicht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 25. Jul. 2012 16:43 <-- editieren / zitieren --> Unities abgeben: Nur für Kayyy
|
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 26. Jul. 2012 09:36 <-- editieren / zitieren --> Unities abgeben: Nur für Kayyy
Hi Kay, versuche es mal anders herum: kopiere zuerst alles in die andere Tabelle und wandle dann dort die Formeln in Werte um:
Code: Sub KopierenSortieren() Dim strStart As String strStart = ActiveCell.Address With Sheets("Sortiert nach Datum") Dim wndTabelle As Object Sheets("Uhrzeit-Normal").UsedRange.Copy .Range("A1") .UsedRange.Copy .Range("A1").PasteSpecial Paste:=xlValues .Rows("1:2").Delete Shift:=xlUp Application.Goto reference:=.Range("A2") ActiveWindow.FreezePanes = True .Range("A1:T173").Sort Key1:=.Range("D2"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortTextAsNumbers End With Application.Goto reference:=Worksheets("Uhrzeit-Normal").Range(strStart) End Sub
------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kayyy Mitglied Konstrukteur
Beiträge: 210 Registriert: 05.04.2005 SW10 / SP2.1 Excel 2003 SP3
|
erstellt am: 27. Jul. 2012 13:46 <-- editieren / zitieren --> Unities abgeben:
Hello again, Paulchen Die Zellen sind aber nach dem Einfügen schon (noch) als Datum formatiert!?! Ich habe es natürlich trotzdem getestet...beim Aufnehmen des Makros ok, beim Ausführen des Makros leider die gleiche, falsche Sortierung als Ergebnis. Beverly Leider die gleiche, falsche Sortierung als Ergebnis. Ich danke aber für jeden weiteren Tipp!!! ------------------ Geht nicht gibt's nicht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kayyy Mitglied Konstrukteur
Beiträge: 210 Registriert: 05.04.2005 SW10 / SP2.1 Excel 2003 SP3
|
erstellt am: 27. Jul. 2012 14:41 <-- editieren / zitieren --> Unities abgeben:
Onkel Google hat´s mir gezeigt Ein anderes Forum und ein relativ alter Beitrag mit dem gleiche Problem Datumsangaben zu sortieren: Man muss das Datum in Tag- u. Monatsspalten zerlegen, dann sortieren und die Spalten wieder löschen. Hörte sich nicht schön an, klappt aber. Habe mit meinen mehr als Laienhaften VBA-Kenntnissen das gefundene Makro angepasst, eingefügt und wen es interessiert: Option Explicit ' ' das nachfolgende Makro sortiert eine Geburtstagsliste nach Monat ' und innerhalb der Monate nach Tag ' ' dazu wird vor die Spalte A eine neue Spalte eingefügt, in die die ' Geburtsmonate und Tage eingestellt werden. ' anschließende wird aufsteigend sortiert. ' dann wird die eingefügte Spalte wieder gelöscht. ' ' hier wird davon ausgegangen, dass das Geburtsdatum in Spalte A ' nachfolgend, durch die eingefügte Spalte in B steht. ' desweiteren wird angenommen, dass das erste Datum in Zeile 4 steht ' die Anzahl der Datumswerte in der Spalte ist beliebig, sie wird ' ermittelt. ' Sub Sort_Geburtstage() Dim lLetzte As Long ' letzte belegte Zeile Dim lZeile As Long ' For/Next Schleifen-Index Dim iMonat As Integer ' Monat aus dem Geburtstag Dim iTag As Integer ' Tag aus dem Geburtstag Application.ScreenUpdating = False ' kein Bildschirm-Update ' die Geburtstage stehen in Tabelle1 With Worksheets("Tabelle1") ' letzte belegt Zeile in Spalte A ermitteln lLetzte = IIf([A65536] > "", 65536, [A65536].End(xlUp).Row) ' eine Spalte vor Spalte A einfügen Columns("A:A").Insert Shift:=xlToRight ' ab Zeile 4 bis zur letzten belegten Zeile For lZeile = 4 To lLetzte ' aus der ehemaligen Spalte A - jetzt B - den Monat holen iMonat = Month(Range("B" & lZeile).Value) ' ist der Monat einstellig, wird er mit Vornull ausgegeben If iMonat < 10 Then Range("A" & lZeile).Value = "0" & iMonat Else Range("A" & lZeile).Value = iMonat End If ' aus der ehemaligen Spalte A - jetzt B - den Tag holen iTag = Day(Range("B" & lZeile).Value) ' ist der Tag einstellig, wird er mit Vornull ausgegeben If iTag < 10 Then Range("A" & lZeile).Value = Range("A" & lZeile).Value & "0" & iTag Else Range("A" & lZeile).Value = Range("A" & lZeile).Value & iTag End If Next lZeile ' sortieren Spalte A bis Z, von Zeile 4 bis zur letzten belegten Range("A4:Z" & lLetzte).Sort _ Key1:=Range("A4"), _ Order1:=xlAscending, _ Header:=xlNo, _ OrderCustom:=1, _ MatchCase:=False, _ Orientation:=xlTopToBottom ' die eingefügte Spalte wieder löschen Columns("A:A").Delete Shift:=xlToLeft End With Application.ScreenUpdating = True ' wieder Bildschirm-Update End Sub Danke Paulchen und Beverly Da ich echt keine Ahnung vom Makro Programmieren habe; Wer das Makro erweitern kann, sodass zus. nach den Jahren sortiert wird, ich wäre dankbar!!!
------------------ Geht nicht gibt's nicht. [Diese Nachricht wurde von Kayyy am 27. Jul. 2012 editiert.] [Diese Nachricht wurde von Kayyy am 27. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 29. Jul. 2012 10:26 <-- editieren / zitieren --> Unities abgeben: Nur für Kayyy
Hi Kay, ich habe meinen Code jetzt mal in Excel2003 getestet - auch dort wird korrekt sortiert. Ich würde deshalb darauf tippen, dass dein Datum kein "richtiges" Datum sondern Text ist und deshalb nicht wie ein Datum sortiert werden kann. ------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kayyy Mitglied Konstrukteur
Beiträge: 210 Registriert: 05.04.2005 SW10 / SP2.1 Excel 2003 SP3
|
erstellt am: 30. Jul. 2012 14:26 <-- editieren / zitieren --> Unities abgeben:
|
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 30. Jul. 2012 17:22 <-- editieren / zitieren --> Unities abgeben: Nur für Kayyy
Zitat: Original erstellt von Kayyy: Die Zellen sind aber als Datum deklariert!
Das heisst erstmal nichts, wenn der der Inhalt Text ist Datum wird Rechtsbündig, Text wird linksbündig dargestellt (Aussgenommen Formatierungen der Zelle LI RE ZENTIERT) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 30. Jul. 2012 23:48 <-- editieren / zitieren --> Unities abgeben: Nur für Kayyy
Hi Kay, was die Zellformatierung angibt muss nicht immer korrekt sein. Mache folgendes: schreibe eine 1 in eine als Standard formatierte Zelle (am besten in einer neu erstellten Arbeitsmappe), kopiere diese Zelle (Strg+C), markiere die Zellen mit dem "falschen" Ausgangs-Datum und füge Inhalte ein (Vorgang: Multiplizieren) - das wandelt ein Text-Datum definitiv in ein richtiges Datum um. Führe anschließend den Code aus und die Sortierung sollte korrekt sein. ------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kayyy Mitglied Konstrukteur
Beiträge: 210 Registriert: 05.04.2005 SW10 / SP2.1 Excel 2003 SP3
|
erstellt am: 31. Jul. 2012 07:42 <-- editieren / zitieren --> Unities abgeben:
Hi, das war mit schon mal neu ...wie soll ich sagen...jetzt geben mir alle "Datwert"-Formeln, die sich auf das Datum beziehen, einen Fehler an Ich überschütte dich mit Unities und gelobe Excel-Nachhilfe ------------------ Geht nicht gibt's nicht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 31. Jul. 2012 11:17 <-- editieren / zitieren --> Unities abgeben: Nur für Kayyy
|
Kayyy Mitglied Konstrukteur
Beiträge: 210 Registriert: 05.04.2005 SW10 / SP2.1 Excel 2003 SP3
|
erstellt am: 31. Jul. 2012 13:19 <-- editieren / zitieren --> Unities abgeben:
Hi Beverly, ich hoffe die Formel reicht...die Arbeitsmappe darf ich so nicht veröffentlichen Spalte D: Datum Spalten F u. G: Uhrzeit WENN(D18="";"";WENN(NICHT(DATWERT(D18)=DATWERT(D17)+1);">11";WENN(ODER(ZEITWERT(F18)<=ZEITWERT(G17);I17="");(ZEITWERT(F18)-ZEITWERT(G17)+1)*24;(ZEITWERT(F18)-ZEITWERT(G17))*2 4))))
------------------ Geht nicht gibt's nicht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 31. Jul. 2012 13:43 <-- editieren / zitieren --> Unities abgeben: Nur für Kayyy
|
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 31. Jul. 2012 14:54 <-- editieren / zitieren --> Unities abgeben: Nur für Kayyy
Hi Kay, die Funktion DATWERT() wandelt ein Text-Datum in einen Datumswert um. Wenn es kein Text-Datum ist, erzeugt diese Funktion den Fehler #WERT. Falls du die Text-Datumswerte inzwischen wie oben beschrieben in ein "richtiges" Datum umgewandelt hast, benotigst du die Umwandlungsfunktion in deiner Formel nicht mehr. Dasselbe trifft auf die Funktion ZEITWERT() zu. ------------------ Bis später, Karin [Diese Nachricht wurde von Beverly am 31. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kayyy Mitglied Konstrukteur
Beiträge: 210 Registriert: 05.04.2005 SW10 / SP2.1 Excel 2003 SP3
|
erstellt am: 01. Aug. 2012 12:15 <-- editieren / zitieren --> Unities abgeben:
|
carsten-3m Mitglied Dipl.-Ing. Mbau (Produktmanagement, Patent- und Normwesen)
Beiträge: 950 Registriert: 08.05.2007 Excel 2010
|
erstellt am: 01. Aug. 2012 12:41 <-- editieren / zitieren --> Unities abgeben: Nur für Kayyy
|
Kayyy Mitglied Konstrukteur
Beiträge: 210 Registriert: 05.04.2005 SW10 / SP2.1 Excel 2003 SP3
|
erstellt am: 01. Aug. 2012 12:47 <-- editieren / zitieren --> Unities abgeben:
|
carsten-3m Mitglied Dipl.-Ing. Mbau (Produktmanagement, Patent- und Normwesen)
Beiträge: 950 Registriert: 08.05.2007 Excel 2010
|
erstellt am: 01. Aug. 2012 12:48 <-- editieren / zitieren --> Unities abgeben: Nur für Kayyy
|
Kayyy Mitglied Konstrukteur
Beiträge: 210 Registriert: 05.04.2005 SW10 / SP2.1 Excel 2003 SP3
|
erstellt am: 01. Aug. 2012 12:51 <-- editieren / zitieren --> Unities abgeben:
|