Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Tabellenblätter sortieren (EXCEL2003)

114 views
Skip to first unread message

Wolfgang Schirmer

unread,
Apr 25, 2007, 6:48:27 AM4/25/07
to
Hallo zusammen,

ist es möglich innerhalb einer Arbeitsmappe mit ca 30 Tabellenblättern
diese Blätter automatisch zu sortieren? Wenn ja wie?

Danke schon mal für Eure Info

mfG Wolfgang

Robert Gelbmann

unread,
Apr 25, 2007, 6:56:03 AM4/25/07
to
Hallo Wolfgang!

---"Wolfgang Schirmer" <wolfgang....@de.bosch.com> schrieb ...


> ist es möglich innerhalb einer Arbeitsmappe mit ca 30
> Tabellenblättern
> diese Blätter automatisch zu sortieren? Wenn ja wie?

Mit reinen Excel-Bordmitteln nicht.
Dazu müsste schon ein VBA-Makro erstellt werden.

Wonach willst du denn sortieren? Alphabetisch?
Oder brauchst du die Sortierreihenfolge nur zum schnelleren Finden von
Blättern?
Falls das Letztere der Fall ist: Klick mit der rechten Maustaste auf
die Navigationspfeile links neben den Blattregisterkarten.


--
In der Hoffnung geholfen zu haben, verbleibe ich mit einem leisen


Servus aus Wien,
-Robert Gelbmann-
---
The world is quiet here.

Wolfgang Habernoll

unread,
Apr 25, 2007, 11:44:44 AM4/25/07
to
Hallo Wolfgang

"Wolfgang Schirmer" <wolfgang....@de.bosch.com> schrieb im Newsbeitrag
news:f0nb14$61i$1...@news4.fe.internet.bosch.com...


> Hallo zusammen,
>
> ist es möglich innerhalb einer Arbeitsmappe mit ca 30 Tabellenblättern
> diese Blätter automatisch zu sortieren? Wenn ja wie?

ja wie ?, ein OP markierte seine aktuellen Tabs rot und wollte sie dann
immer links haben. Dafür hab ich mal folgendes Makro gemacht.

Sub WSColorSort()
Dim objWSi As Object
For Each objWSi In Application.Worksheets
If objWSi.Tab.ColorIndex = 3 Then objWSi.Move Before:=Sheets(1)
Next
End Sub

wenn du es Alphabetisch brauchst könnte man es sortieren. Aber um nicht
alles neu zu erfinden: Am 3.10.06 hat Eike Bimczok hier in der NG etwas
schönes dafür gemacht. Siehe mal unter Betreff "Alphabetisches Ordnen von
Blättern in Mappen"

--
mfG
Wolfgang Habernoll

[ Win XP Home SP-2 , XL2002 ]


Wolfgang Schirmer

unread,
Apr 26, 2007, 2:00:52 AM4/26/07
to
Moin Wolfgang,

"Wolfgang Habernoll" schrieb:

> Hallo Wolfgang


>
> > ist es möglich innerhalb einer Arbeitsmappe mit ca 30
Tabellenblättern
> > diese Blätter automatisch zu sortieren? Wenn ja wie?
>
> ja wie ?, ein OP markierte seine aktuellen Tabs rot und wollte sie
dann
> immer links haben. Dafür hab ich mal folgendes Makro gemacht.
>
> Sub WSColorSort()
> Dim objWSi As Object
> For Each objWSi In Application.Worksheets
> If objWSi.Tab.ColorIndex = 3 Then objWSi.Move Before:=Sheets(1)
> Next
> End Sub
>
> wenn du es Alphabetisch brauchst könnte man es sortieren. Aber um
nicht
> alles neu zu erfinden: Am 3.10.06 hat Eike Bimczok hier in der NG
etwas
> schönes dafür gemacht. Siehe mal unter Betreff "Alphabetisches
Ordnen von
> Blättern in Mappen"

Vielen Dank erst einmal für Deine Antwort. Ja es geht hier tatsächlich
um ein alphabetisches Ordnen. Leider habe ich hier keinen Zugang zum
Internet sondern nur zur Newsgroup und da kann ich nicht soweit zurück
suchen. Kann mir da eventuell jemand weiterhelfen? (a littel bit
kodschnipsel? ;-)

> --
> mfG
> Wolfgang Habernoll
>
> [ Win XP Home SP-2 , XL2002 ]
>

mfG Wolfgang Schirmer

Wolfgang Habernoll

unread,
Apr 26, 2007, 4:14:08 AM4/26/07
to
Hallo

"Wolfgang Schirmer" <wolfgang....@de.bosch.com> schrieb im Newsbeitrag

news:f0pehr$sej$1...@news4.fe.internet.bosch.com...
> Moin Wolfgang,


>
> Vielen Dank erst einmal für Deine Antwort. Ja es geht hier tatsächlich
> um ein alphabetisches Ordnen. Leider habe ich hier keinen Zugang zum
> Internet sondern nur zur Newsgroup und da kann ich nicht soweit zurück
> suchen. Kann mir da eventuell jemand weiterhelfen? (a littel bit
> kodschnipsel? ;-)

nix kodschnipsel, dann alles. Ich hoffe damit vertsosse ich nicht gegen
irgenetwas. Aber es geht ja klar hervor das es nicht von mir ist.

Aus NG vom 3.10.06

Sub sortSheets()
'10-2006
'E.Bimczok
'http://www.profi-excel.de

Dim names() As String
Dim k As Long
ReDim names(1 To ActiveWorkbook.Worksheets.Count)
k = 1
For Each a In ActiveWorkbook.Worksheets
names(k) = a.Name
k = k + 1
Next a

Call BubbleSort(names)

For k = LBound(names) + 1 To UBound(names)
Worksheets(names(k)).Move _
after:=Worksheets(names(k - 1))
Next k
End Sub

Sub BubbleSort(ByRef sArray As Variant)
'from:
http://www.kurt-aus-kienitz.de/knowhow/access/Beispiele/Module/ArraySortieren.html
'
' BubbleSort()
'
' Sortieren eines Arrays mit dem BubbleSort-Algorithmus
'
' IN: sArray das zu sortierende Array
'
Dim j As Long ' Zähler
Dim i As Long ' noch ein Zähler
Dim vDummy As Variant ' Dummy für Dreiecks-Tausch
'
' Schleife über alle Elemente des Arrays
'
For j = UBound(sArray) - 1 To LBound(sArray) Step -1
'
' Schleife vom Anfang des Arrays bis zum (n - j)'ten
' Element des Arrays
'
For i = LBound(sArray) To j
'
' Prüfen, ob der Nachfolger kleiner als das
' aktuelle Element ist
'
If sArray(i) > sArray(i + 1) Then
'
' Werte der Elemente vertauschen
'
vDummy = sArray(i)
sArray(i) = sArray(i + 1)
sArray(i + 1) = vDummy
End If
Next i
Next j
End Sub

Wolfgang Habernoll

unread,
Apr 26, 2007, 4:17:03 AM4/26/07
to
Hallo

"Wolfgang Schirmer" <wolfgang....@de.bosch.com> schrieb im Newsbeitrag

news:f0pehr$sej$1...@news4.fe.internet.bosch.com...
> Moin Wolfgang,


>
> Vielen Dank erst einmal für Deine Antwort. Ja es geht hier tatsächlich
> um ein alphabetisches Ordnen. Leider habe ich hier keinen Zugang zum
> Internet sondern nur zur Newsgroup und da kann ich nicht soweit zurück
> suchen. Kann mir da eventuell jemand weiterhelfen? (a littel bit
> kodschnipsel? ;-)

nix kodschnipsel, dann alles. Ich hoffe damit verstoße ich nicht gegen
irgendein Gesetz. Aber es geht ja klar hervor das es nicht von mir ist.

Aus NG vom 3.10.06

Call BubbleSort(names)

Wolfgang Schirmer

unread,
Apr 26, 2007, 4:25:42 AM4/26/07
to
Hallo Wolfgang,

vielen Dank für Deine schnelle Hilfe. Werde es gleich mal probieren und
melde mich nochmal.

"Wolfgang Habernoll" schrieb:

> Hallo

mfG Wolfgang (Entschuldigung für das Teil-TOFU)

frankarendt-theilen

unread,
Apr 26, 2007, 4:55:46 AM4/26/07
to
Hallo Wolfgang,
folgende VBA-Prozedur von Philipp v. Wartburg

Sub BlätterSortieren()
Dim intI As Integer, intJ As Integer
For intI = 1 To Sheets.Count
For intJ = 1 To Sheets.Count - 1
If Val(Sheets(intJ).Name) < Val(Sheets(intJ + 1).Name) Then
Sheets(intJ).Move after:=Sheets(intJ + 1)
End If
Next
Next
End Sub


Mit freundlichem Gruß aus der Rattenfängerstadt Hameln
Frank Arendt-Theilen

--
(ehem. MVP für Excel)
Website: www.xl-faq.de

Wolfgang Schirmer

unread,
Apr 26, 2007, 5:34:31 AM4/26/07
to
Hallo Frank,

auch Dir erst einmal recht vielen Dank für Deine Hilfe.

Frank Arendt-Theilen schrieb:

> Hallo Wolfgang,
> folgende VBA-Prozedur von Philipp v. Wartburg
>
> Sub BlätterSortieren()
> Dim intI As Integer, intJ As Integer
> For intI = 1 To Sheets.Count
> For intJ = 1 To Sheets.Count - 1
> If Val(Sheets(intJ).Name) < Val(Sheets(intJ + 1).Name) Then
> Sheets(intJ).Move after:=Sheets(intJ + 1)
> End If
> Next
> Next
> End Sub

Die VBA Prozedur funktioniert einwandfrei, sofern die Tabellenblätter
numeriert sind bzw. zumindest eine Zahl vorangestellt ist. Danke
trotzdem dafür. Ich kann sie aber bei mir nicht anwenden, weil (und Du
ahnst es sicher schon) meine Tabellenblätter keine Numerierung sondern
einen Namen haben. Wolfgang Habernoll sein gepostetes Beispiel ist
genau richtig.

>
>
> Mit freundlichem Gruß aus der Rattenfängerstadt Hameln
> Frank Arendt-Theilen
>
> --
> (ehem. MVP für Excel)
> Website: www.xl-faq.de

mfG Wolfgang Schirmer

Wolfgang Schirmer

unread,
Apr 26, 2007, 5:36:32 AM4/26/07
to
Hallo Namensvetter,

[alles mal gesnippt]

Danke nochmal für Deine Hilfe. Es war genau das richtige was ich
gesucht habe. Frank sein Beispiel ist auch sehr interessant aber nur
auf Blattnamen mit einer Zahl vorangestellt anwendbar.

mfG Wolfgang

Wolfgang Habernoll

unread,
Apr 26, 2007, 5:51:05 AM4/26/07
to
Hallo Frank

<Frank Arendt-Theilen> schrieb im Newsbeitrag
news:t6q033tml8u8vtos4...@4ax.com...

nun wollte ich endlich mal den "BubbleSort" begreifen, da macht es einer
noch kürzer :-) .Es wird zwar nur numerisch absteigend sortiert, aber das
kann man ja schnell durch Anderung in einer Zeile anpassen.

' Original: nur numerische nach links und absteigend
'If Val(Sheets(intJ).Name) < Val(Sheets(intJ + 1).Name) Then

' alphanumerisch von links absteigend
'If Sheets(intJ).Name < Sheets(intJ + 1).Name Then

' alphanumerisch von links aufsteigend
'If Sheets(intJ).Name > Sheets(intJ + 1).Name Then

Danke für den Tip

Wolfgang Habernoll

unread,
Apr 26, 2007, 5:58:01 AM4/26/07
to
Hallo Wolfgang

"Wolfgang Schirmer" <wolfgang....@de.bosch.com> schrieb im Newsbeitrag

news:f0pr67$9v2$1...@news4.fe.internet.bosch.com...

schön das es klappt und danke fürs Feedback. Übrigens: Frank sein Beispiel
ist wesentlich kürzer und klappt mit einer kleiner Anpassung auch für dich.
Siehe dazu meine Antwort an Frank.

Wolfgang Schirmer

unread,
Apr 26, 2007, 6:05:53 AM4/26/07
to
Hallo,

"Wolfgang Habernoll" schrieb:

[snip]


>
> schön das es klappt und danke fürs Feedback. Übrigens: Frank sein
Beispiel
> ist wesentlich kürzer und klappt mit einer kleiner Anpassung auch für
dich.
> Siehe dazu meine Antwort an Frank.

habe ich schon entdeckt. Dass es letztendlich noch einfacher geht hätte
ich garnicht gedacht. Jetzt tut es mir fast leid, dass ich da doch
lieber die andere (weil kürzer) Fassung verwende. Trotzdem nochmal
vielen Dank an Beide.

>
> --
> mfG
> Wolfgang Habernoll
>
> [ Win XP Home SP-2 , XL2002 ]
>

mfG Wolfgang

frankarendt-theilen

unread,
Apr 26, 2007, 7:42:10 AM4/26/07
to
Hallo Wolfgang,
ok, ok, dann also alphanumerisch

absteigende Reihenfolge:


Sub BlätterSortieren()
Dim intI As Integer, intJ As Integer
For intI = 1 To Sheets.Count
For intJ = 1 To Sheets.Count - 1

If UCase(Sheets(intJ).Name) < UCase(Sheets(intJ + 1).Name) Then


Sheets(intJ).Move after:=Sheets(intJ + 1)
End If
Next
Next
End Sub

Möchtst Du es aufsteigend sortiert haben, drehe das < - Zeichen
einfach um.

Wolfgang Schirmer

unread,
Apr 26, 2007, 7:58:39 AM4/26/07
to
Hallo Frank,

<Frank Arendt-Theilen> schrieb:

> Hallo Wolfgang,
> ok, ok, dann also alphanumerisch
>
> absteigende Reihenfolge:
> Sub BlätterSortieren()
> Dim intI As Integer, intJ As Integer
> For intI = 1 To Sheets.Count
> For intJ = 1 To Sheets.Count - 1
> If UCase(Sheets(intJ).Name) < UCase(Sheets(intJ + 1).Name) Then
> Sheets(intJ).Move after:=Sheets(intJ + 1)
> End If
> Next
> Next
> End Sub
>
> Möchtst Du es aufsteigend sortiert haben, drehe das < - Zeichen
> einfach um.

Vielen Dank nochmal. Funktoniert bestens :-)

>
>
> Mit freundlichem Gruß aus der Rattenfängerstadt Hameln
> Frank Arendt-Theilen
>
> --
> (ehem. MVP für Excel)
> Website: www.xl-faq.de

mfG aus Thüringen dem Grünen Herz Deutschlands ;-)

Wolfgang

0 new messages