Array sortieren in Excel 2003-VBA

Hallo,

Ich möchte automatisiert 13 Dateien umbenennen, die fortlaufende Dateinamen haben. Die Dateinamen lese ich mittels Application.GetOpenFilename (MultiSelect) in ein Datenfeld (String) ein. Unter Excel 97 funktionierte das prima. Nun mit Excel 2003 sind die Dateinamen nicht mehr richtig sortiert (Liste13, Liste1, Liste2,…, Liste 12). Also möchte ich das Datenfeld umsortieren, um der richtigen Datei den richtigen neuen Namen zuweisen zu können. Wer kann mir bitte weiterhelfen?
Danke

Gruß
Arnold

Hallo,

Ich möchte automatisiert 13 Dateien umbenennen, die
fortlaufende Dateinamen haben. Die Dateinamen lese ich mittels
Application.GetOpenFilename (MultiSelect) in ein Datenfeld
(String) ein. Unter Excel 97 funktionierte das prima. Nun mit
Excel 2003 sind die Dateinamen nicht mehr richtig sortiert
(Liste13, Liste1, Liste2,…, Liste 12).

Das ist richtig sortiert. Im Dateinamen sind die Zahlen nur Zeichen. Übersetze die Zahlen mal in Buchstaben, also 1 in a, 2 in b, dann wird deutlicher, wie sortiert wird. a kommt dann vor aa und ab kommt vor b, wie in Lexikon. 12 kommt dann also vor 2, das ist richtig so. Wenn Du möchstest, daß 2 vor 12 kommt und die Ziffern als Zeichen, nicht als Zahl betrachtet werden Musst Du führende Nullen verwenden, also Liste001, Liste002 … Liste012, dann wird sortiert, wie Du
es möchtest.

Also möchte ich das
Datenfeld umsortieren, um der richtigen Datei den richtigen
neuen Namen zuweisen zu können. Wer kann mir bitte
weiterhelfen?

Tauf die Dateien um, dann werden sie richtig sortiert.
20 Dateien würde ich noch von Hand umtaufen, für mehr lohnt sich ein Programm. In B6 gibt es dafür ‚Name AlterPfadname As NeuerPfadname‘, der Rest sind nur ein paar Stringmanipulationen.

Gruß, Rainer

Sorry Rainer,
das mit Liste1 und Liste2 waren nur Beispielnamen. In den tatsächlichen Namen sind natürlich führende Nullen enthalten. Daran liegt´s leider nicht.
Excel 2003 liest diese Dateinamen in der folgenden Reihenfolge ein: letzter Wert, erster Wert, zweiter Wert, dritter Wert… usw. Dieses Phänomen kann ich mir nicht erklären. Habe das in Excel 97 mit dem gleichen Code und den gleichen Dateien getestet - es funktionierte richtig.
Ich muß aber auf jeden Fall die richtige Reihenfolge haben, um später mit dem von Dir genannten „Name alt As neu“ den Dateien den richtigen Namen zu geben.
Einfach sturr umsortieren ist mir zu gefährlich. Wer sagt mir, dass Excel 2003 das immer so macht?

Gruß
Arnold

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Arnold,

also sehe ich das Richtig, das die Daten in einem Array vorliegen?
Wenn das dem Fall ist, so nutze einfach die Sub Quicksort die ich dir hier poste :smile:

Public Sub QuickSort(SortArray() As String, Optional ByVal varStart As Long, Optional ByVal varEnd As Long)
 Dim i As Long, J As Long, RandIndex As Long, Partition As String
 Dim Low As Long, High As Long
 Low = IIf(varStart = 0, LBound(SortArray), varStart)
 High = IIf(varEnd = 0, UBound(SortArray), varEnd)
 If Low UCase(SortArray(High)) Then
 Swap SortArray(Low), SortArray(High)
 End If
 Else
 RandIndex = Rnd() \* (High - Low) + Low
 Swap SortArray(High), SortArray(RandIndex)
 Partition = UCase(SortArray(High))
 Do
 i = Low: J = High
 Do While (i i) And (UCase(SortArray(J)) \>= Partition)
 J = J - 1
 Loop
 If i 

Bedenke aber das die Sub Deine Daten so sortiert, wie es Dir Rainer beschrieben hat. Der Source läuft unter VB6, sollte aber eigentlich auch Problemlos unter VBA laufen :smile:



> Einfach sturr umsortieren ist mir zu gefährlich. Wer sagt mir,  
> dass Excel 2003 das immer so macht?


Rufe einfach die Sub auf. Ist das Array nicht sortiert so wird es sortiert und wenn es schon sortiert ist, so bekommst du den Ursprung wieder zurueck :smile:

MfG Alex

Danke Alex,
Sowas habe ich gesucht.
Ich werde das Morgen sofort ausprobieren.
Hätte aber nicht gedacht, das es so kompliziert ist - naja, jetzt ja nicht mehr (brauche den Code ja nur noch einfügen) :wink:
Danke nochmal

Gruß
Arnold