Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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
Antworten 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
Antworten 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
Antworten 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
Antworten Top
#5
Hallo,

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

Gruß Werner
Antworten Top
#6
Hallo Werner,

F200 oder ähnliches war zuvor nirgends definniert! Smile

Gruß Uwe
Antworten 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.
Antworten 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)
Antworten 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
Antworten 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.
Antworten Top


Gehe zu:


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