Automatisch Arbeitsblätter sortieren
#1
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. Smile
Top
#2
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?
Huh
Top
#3
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
Top
#4
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
Top
#5
Hallo,

Code:
oWs.Range("A1:F200").Sort Key1:=oWs.Range("B2"), Key2:=oWs.Range("E2"), Header:=xlYes

Gruß Werner
Top
#6
Hallo Werner,

F200 oder ähnliches war zuvor nirgends definniert! Smile

Gruß Uwe
Top
#7
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.
Top
#8
Hallöchen,

könnte es sein, dass das Format DD/MM/YYYY ist oder das Zusammensetzen nicht stimmt?

Arbeitsblatt mit dem Namen 'Tabelle1'
ABCD
1111201901.11.2019

ZelleFormel
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)
Top
#9
Hallo Andy,

zum Umformatieren mittels Text in Spalten siehe z.B. hier: Datum MTJ zu TMJ
Die 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
Top
#10
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.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste