Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1136to1140
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
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
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
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
Anzeige
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
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

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige