Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Tabellen sortieren

Forumthread: Tabellen sortieren

Tabellen sortieren
walli
Guten Morgen,
habe mal recherchiert aber leider nicht das RICHTIGE gefunden.
Ich möchte die Zabellennamen von
1-120 sortieren, Tabelle1, Tabelle2, us.w. , leider wird die Tabelle11 oder Tabelle12 z.B
nicht nach Tabelle10 einsortiert sondern nach vorne.
Hat jemand einen Tip.
mfg walli
Anzeige
funktioniert m.E. nur mit Hilfsspalte
21.02.2010 10:41:43
WF
Hi Walli,
die Tabellennamen mit Ziffern hinten stehen in Spalte A.
in B1 (Hilfsspalte) schreibst Du:
=VERWEIS(9^9;1*RECHTS(A1;SPALTE(1:1)))
runterkopieren
Sortieren tust Du jetzt nach Spalte B.
Salut WF
Sorry, ich wollte
21.02.2010 11:04:53
walli
Guten Morgen WF,
sorry habe ich leider nicht so richtig verstanden,
ich möchte die Tabellenblätter in der Datei sortieren,
mfg walli
Anzeige
so gehts ... (auch ohne umbenennen ;-)
21.02.2010 11:13:06
Matthias
Hallo walli
Heißen die Blätter tatsächlich "Tabelle1" bis "Tabelle120" ?
dann so (also 3 Stellen nach dem Wort Tabellexxx)
Option Explicit
Sub Sortieren()
Dim x As Integer, i As Integer
Application.ScreenUpdating = False
For i = 1 To Worksheets.Count
For x = Worksheets.Count To 2 Step -1
If Mid(Worksheets(x).Name, 8, 3) * 1 

Gruß Matthias
Anzeige
Leider nicht ganz
21.02.2010 11:38:22
walli
Guten Morgen Matthias,
wenn ich alle Tabellen drin lasse von 1 bis EINWANDFREI !
Allerdings habe ich noch 2 Tabellen drin
Muster-Tabelle und Alle-Tabellen, da kommt Fehlermeldung,
mfg walli
AW: Leider nicht ganz
21.02.2010 11:47:11
Reinhard
Hallo Walli,
Option Explicit
Sub Sortieren()
Dim x As Integer, i As Integer
Application.ScreenUpdating = False
Worksheets("Muster-Tabelle").Move After:=Worksheets(Worksheets.Count)
Worksheets("Alle-Tabellen").Move After:=Worksheets(Worksheets.Count)
For i = 1 To Worksheets.Count - 2
For x = Worksheets.Count - 2 To 2 Step -1
If Mid(Worksheets(x).Name, 8, 3) * 1 

Gruß
Reinhard
Anzeige
so ...
21.02.2010 11:47:59
Matthias
Hallo
Option Explicit
Sub Sortieren()
Dim x As Integer, i As Integer
On Error Resume Next
Application.ScreenUpdating = False
For i = 1 To Worksheets.Count
For x = Worksheets.Count To 2 Step -1
If Mid(Worksheets(x).Name, 8, 3) * 1  Worksheets("Muster-Tabelle").Move after:=Worksheets(Worksheets.Count)
Worksheets("Alle-Tabellen").Move after:=Worksheets(Worksheets.Count)
Application.ScreenUpdating = True
Worksheets("Tabelle1").Activate
End Sub
Gruß Matthias
Anzeige
Hallo Zusammen danke --))
21.02.2010 13:41:03
walli
Hallo zusammen,
danke an alle für die Unterstützung,
es klöappt so.
Schönen Sonntag noch,
mfg walli
AW: Tabellen sortieren
21.02.2010 11:08:03
Daniel
Hi
benenne die Tabellen um:
Tabelle1 in Tabelle001
Tabelle10 in Tabelle101
usw
dann klappst auch mit dem Sortieren
Gruß,
Daniel
AW: Tabellen sortieren
21.02.2010 11:40:06
walli
Hallo Daniel,
hab emal das Makro von Matthias genommen, bis
auf einen kleinen Fehler, weil noch 2 andere Tabellennamen drin sind,
klappt dies,
mfg walli
Anzeige
das war kein Fehler !
21.02.2010 11:54:21
Matthias
Hallo walli
Zitat
bis auf einen kleinen Fehler
Das war kein Fehler!
Ich hatte eindeutig geschrieben, wenn die Tabellen tatsächlich so heißen Tabelle1-Tabelle120
Gruß Matthias
Enschuldigung Warum so sauer ?
21.02.2010 12:55:31
walli
Hallo Matthias,
bitte um Nachsicht, hatte keine Ahnung sddas Du direkt
sauer bist.
Ist natürlich mein Fehler in der Beschreibung.
mfg walli
Anzeige
AW: Tabellen sortieren
21.02.2010 11:48:57
Tino
Hallo,
habe es mal so gelöst.
kommt als Code in Modul1
Option Explicit 
 
 
Sub TabellenSort() 
Dim meAr(), i As Integer 
 
Redim meAr(Sheets.Count - 1, 1) 
 
For i = 1 To Worksheets.Count 
    meAr(i - 1, 0) = Sheets(i).Name 
    meAr(i - 1, 1) = Ziffer(Sheets(i).Name) 
Next i 
 
QuickSort meAr, Lbound(meAr), Ubound(meAr), 1, False 
 
For i = Ubound(meAr) To Lbound(meAr) Step -1 
 Worksheets(meAr(i, 0)).Move After:=Sheets(i + 1) 
Next i 
 
End Sub 
kommt als Code in Modul2
Option Explicit 
Function Ziffer(ByVal strText$) As Integer 
Dim Regex As Object 
 
Set Regex = CreateObject("Vbscript.Regexp") 
With Regex 
    .Pattern = "\D+\d{0,}\D+" 
    .Global = True 
    strText = .Replace(strText, "") 
    If IsNumeric(strText) Then 
     Ziffer = strText * 1 
    Else 
     Ziffer = 0 
    End If 
End With 
Set Regex = Nothing 
End Function 
 
Sub QuickSort(ByRef sArray, ByVal StartUnten As Long, ByVal EndeOben As Long, _
              ByVal LCol As Long, Optional ByVal Absteigend As Boolean = False) 
Dim iUnten As Long, iOben, iMitte, y 
Dim A As Long 
    iUnten = StartUnten 
    iOben = EndeOben 
    iMitte = sArray((StartUnten + EndeOben) / 2, LCol) 
    While (iUnten <= iOben) 
        If Not Absteigend Then 
            While (sArray(iUnten, LCol) < iMitte And iUnten < EndeOben) 
                iUnten = iUnten + 1 
            Wend 
            While (iMitte < sArray(iOben, LCol) And iOben > StartUnten) 
                iOben = iOben - 1 
            Wend 
        Else 
            While (sArray(iUnten, LCol) > iMitte And iUnten < EndeOben) 
                iUnten = iUnten + 1 
            Wend 
            While (iMitte > sArray(iOben, LCol) And iOben > StartUnten) 
                iOben = iOben - 1 
            Wend 
        End If 
        If (iUnten <= iOben) Then 
          For A = Lbound(sArray, 2) To Ubound(sArray, 2) 
            y = sArray(iUnten, A) 
            sArray(iUnten, A) = sArray(iOben, A) 
            sArray(iOben, A) = y 
          Next A 
            iUnten = iUnten + 1 
            iOben = iOben - 1 
             
        End If 
    Wend 
    If (StartUnten < iOben) Then Call QuickSort(sArray, StartUnten, iOben, LCol, Absteigend) 
    If (iUnten < EndeOben) Then Call QuickSort(sArray, iUnten, EndeOben, LCol, Absteigend) 
End Sub 
 
Gruß Tino
Anzeige
habe den Code noch etwas angepasst.
21.02.2010 12:36:42
Tino
Hallo,
die Tabellen werden erst nach Namen sortiert und danach nach der letzten Ziffer im Namen.
kommt als Code in Modul1
Option Explicit 
 
 
Sub TabellenSort() 
Dim meAr(), i As Integer 
 
Redim meAr(Sheets.Count - 1, 1) 
 
For i = 1 To Worksheets.Count 
    meAr(i - 1, 0) = Sheets(i).Name 
    meAr(i - 1, 1) = Ziffer(Sheets(i).Name) 
Next i 
 
QuickSort meAr, Lbound(meAr), Ubound(meAr), 0, True 
QuickSort meAr, Lbound(meAr), Ubound(meAr), 1, False 
 
For i = Ubound(meAr) To Lbound(meAr) Step -1 
 Worksheets(meAr(i, 0)).Move After:=Sheets(i + 1) 
Next i 
 
End Sub 
kommt als Code in Modul2
Option Explicit 
Function Ziffer(ByVal strText$) As Integer 
Dim Regex As Object 
 
Set Regex = CreateObject("Vbscript.Regexp") 
With Regex 
    .Pattern = "\w+[^\d]" 
    .Global = True 
    strText = .Replace(strText, "") 
    If IsNumeric(strText) Then 
     Ziffer = strText * 1 
    Else 
     Ziffer = 0 
    End If 
End With 
Set Regex = Nothing 
End Function 
 
Sub QuickSort(ByRef sArray, ByVal StartUnten As Long, ByVal EndeOben As Long, _
              ByVal LCol As Long, Optional ByVal Absteigend As Boolean = False) 
Dim iUnten As Long, iOben, iMitte, y 
Dim A As Long 
    iUnten = StartUnten 
    iOben = EndeOben 
    iMitte = sArray((StartUnten + EndeOben) / 2, LCol) 
    While (iUnten <= iOben) 
        If Not Absteigend Then 
            While (sArray(iUnten, LCol) < iMitte And iUnten < EndeOben) 
                iUnten = iUnten + 1 
            Wend 
            While (iMitte < sArray(iOben, LCol) And iOben > StartUnten) 
                iOben = iOben - 1 
            Wend 
        Else 
            While (sArray(iUnten, LCol) > iMitte And iUnten < EndeOben) 
                iUnten = iUnten + 1 
            Wend 
            While (iMitte > sArray(iOben, LCol) And iOben > StartUnten) 
                iOben = iOben - 1 
            Wend 
        End If 
        If (iUnten <= iOben) Then 
          For A = Lbound(sArray, 2) To Ubound(sArray, 2) 
            y = sArray(iUnten, A) 
            sArray(iUnten, A) = sArray(iOben, A) 
            sArray(iOben, A) = y 
          Next A 
            iUnten = iUnten + 1 
            iOben = iOben - 1 
             
        End If 
    Wend 
    If (StartUnten < iOben) Then Call QuickSort(sArray, StartUnten, iOben, LCol, Absteigend) 
    If (iUnten < EndeOben) Then Call QuickSort(sArray, iUnten, EndeOben, LCol, Absteigend) 
End Sub 
 
Gruß Tino
Anzeige
Hallo Tino ebenfalls einwandfrei --))
21.02.2010 13:47:26
walli
Hallo Tino gerade getestet,
super klasse,
DANKE,
schönes Wochenende,
walli
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige