Registriert seit: 08.02.2018
Version(en): 2016
28.10.2019, 10:37
(Dieser Beitrag wurde zuletzt bearbeitet: 28.10.2019, 11:18 von Andy_S_PB.)
Hallo, nach längerer Abwesenheit habe ichmal wieder eine Frage: Ich importiere wöchentlich CSV-Dateien, um die Arbeitsauslastung unseres Teams zu optimieren. Diese kommen direkt aus den Outlook-Kalendern der Mitarbeitern, werden per Makro bereits in Tabellenspalten vorsortiert, und als Arbeitsblatt der Gesamttabelle angefügt. Soweit so gut. jetzt hätte mein Chef es gerne, dass die Daten dieser Tabellen vor übertragen auf die Übersichtstabelle (Hauptblatt) bereits nach Datum und Kategorie (zwei der Spalten der CSV) vorsortiert werden. Ich habe das mit dem Makro Recorder auch schon für eine einzelne Tabelle hinbekommen. Und zwar sieht das dann so aus: Code: Sub Vorsortieren() ' ' Vorsortieren Makro ' Sortierung der CSV-Tabellen nach Datum und Kategorie '
' Range("A2:F200").Select ActiveWorkbook.Worksheets("A.SXXXXXX_KW44.CSV").Sort.SortFields.Clear ActiveWorkbook.Worksheets("A.SXXXXXX_KW44.CSV").Sort.SortFields.Add Key:= _ Range("B2:B200"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortTextAsNumbers ActiveWorkbook.Worksheets("A.SXXXXXX_KW44.CSV").Sort.SortFields.Add Key:= _ Range("E2:E200"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("A.SXXXXXXX_KW44.CSV").Sort .SetRange Range("A1:F200") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
Wie kriege ich das geändert, dass er das mit allen *.CSV-Arbeitsblättern automatisch macht? Die Spalten sind bei allen CSV gleich. Kann ich die Dateinamen einfach mit Platzhaltern versehen, so dass alle Blätter mit Endung CSV sortiert werden? Danke schonmal im Voraus.
Registriert seit: 08.02.2018
Version(en): 2016
Hab noch mal weitergesucht und bin auf folgendes gestoßen, was ich auch schon angepasst habe: Code: Sub Sortieren()
'Nach Spalte D (Datum) sortieren & anschließend nach Spalte E (Kategorie) sortieren Range("A1:F").Sort Key1:=Range("B2"), Key2:=Range("E2"), Header:=xlYes 'Header:=xlYes -> Kopfzeile nicht mitsortieren
End Sub
Wie krieg ich da jetzt eine For-Schleife drum, dass er diesen Prozess bei allen auf *.csv endenden Tabellenblättern hinereinander ausführt?
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Andy, so vielleicht: Sub Sortieren() Dim oWs As Worksheet For Each oWs In Worksheets If Right(UCase(oWs.Name), 4) = ".CSV" Then 'Nach Spalte D (Datum) sortieren & anschließend nach Spalte E (Kategorie) sortieren oWs.Range("A1:F").Sort Key1:=oWs.Range("B2"), Key2:=oWs.Range("E2"), Header:=xlYes 'Header:=xlYes -> Kopfzeile nicht mitsortieren End If Next oWs End Sub Gruß Uwe
Registriert seit: 08.02.2018
Version(en): 2016
Ja, das sieht eigentlich schlüssig aus. Habe nur das Problem Laufzeitfehler '1004': Die Methode 'Range' für das Objekt'_Worksheet' ist fehlgeschlagen, der Debugger markiert mir die Zeile Code: oWs.Range("A1:F").Sort Key1:=oWs.Range("B2"), Key2:=oWs.Range("E2"), Header:=xlYes
oWs oder ähnliches war zuvor nirgends definniert
Registriert seit: 05.09.2017
Version(en): 2013
Hallo, Code: oWs.Range("A1:F200").Sort Key1:=oWs.Range("B2"), Key2:=oWs.Range("E2"), Header:=xlYes
Gruß Werner
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Werner, F200 oder ähnliches war zuvor nirgends definniert! Gruß Uwe
Registriert seit: 08.02.2018
Version(en): 2016
28.10.2019, 15:27
(Dieser Beitrag wurde zuletzt bearbeitet: 28.10.2019, 15:39 von Andy_S_PB.)
Werner M. perfekt, das war's. Danke euch beiden :100:
Oh, ein Problem hab ich noch. Die Sortierung in Key1 bezieht sich auf das Datum. Nun haben wir einige internationale Mitarbeiter, die die Schreibweise MM/DD/YYY im Kalender nutzen. Diese kann ich zwar über "Text in Spalten" in das Datumsformat DD.MM.YYY bringen, komischerweise macht er mir aus dem 01.11.2019 denn 11.01.2019. Kann ich das noch irgendwie ändern? Ansonsten würd ich Key1 weglassen und nur nach Kategorien (Key2) suchen.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, könnte es sein, dass das Format DD/MM/YYYY ist oder das Zusammensetzen nicht stimmt? Arbeitsblatt mit dem Namen 'Tabelle1' | | A | B | C | D | 1 | 11 | 1 | 2019 | 01.11.2019 |
Zelle | Formel | D1 | =DATUM(C1;A1;B1) |
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016 | Diese Tabelle wurde mit Tab2Html (v2.6.2) erstellt. ©Gerd alias Bamberg |
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Andy, zum Umformatieren mittels Text in Spalten siehe z.B. hier: Datum MTJ zu TMJDie Frage ist, ob und wenn ja wie das in den Code eingebunden werden soll, weil ja entschieden werden muss, um welche Mitarbeiter es sich handelt, bei denen eine Umformatierung notwendig ist. Gruß Uwe
Registriert seit: 08.02.2018
Version(en): 2016
30.10.2019, 12:09
(Dieser Beitrag wurde zuletzt bearbeitet: 30.10.2019, 12:09 von Andy_S_PB.)
Das mit den Text in Spalten habe ich bislang immer händisch gemacht, das klappt soweit auch. Es soll mit in den Cod,der die CSV Dateien anhängt, irgendwie wie eine Art For/Next mit IF. also alle checken, ob das Datumsformat passt, wenn icht umwandeln, wenn ja, alles gut. Also so grob erklärt. :)
EDIT: Das "falsche Format lautet DD/MM/YYY. es müsste also quasi nur . statt / gesetzt werden.
|