Excel - Spalten formatieren

  • #1
W

wak66

Neues Mitglied
Themenersteller
Dabei seit
30.12.2006
Beiträge
1
Reaktionspunkte
0
Hi,
ich möchte in einer Tabelle die Spalten sortieren können. Ähnlich wie im Outlook Express, wo ich den Inhalt im Posteingang entweder nach Datum auf u. absteigend, nach Absender alphabetisch auf u. absteigend u.s.w. sortieren kann indem ich eine Schaltfläche in der Überschrift der Spalte anklicke. Im Moment muß ich den gesamten Tabellinhalt markieren und über Fkt: Sortieren neu anordnen. Wenn ich eine Zeile, oder Spalte nicht mitmarkieren geht der ganze Bezug der Tabelle verloren. :|
 
  • #2
Hallo,

mit folgendem Code wird die Spalte über ein Inputbox abgefragt. Folgende Kriterien werden geprüft:

1. Tabellenlänge wird anhand Spalte 1 geprüft!
2. Tabellenbreite anhand von Zeile 2
3. Es wird erst ab Zeile 2 sortiert (Überschriften in Zeile 1)

Es ist eine recht grobe Lösung ohne Komfort aber sie tut ihren Zweck. Wenn du doch etwas feintuning
brauchst sag bescheid.

Code:
Sub Sortieren()
Dim Spalte As Byte

On Error Resume Next

Spalte = 0

Spalte = InputBox( _
Nach welcher Spalte wollen sie sortieren? & Chr(13) & Chr(13) & _
(bitte Nr. eingeben 1, 2, ...,  & Cells(2, 256).End(xlToLeft).Column & ), Sortieren nach)

If Spalte = 0 Or Spalte > Cells(2, 256).End(xlToLeft).Column Then
    MsgBox Falsche Eingabe! Bitte probieren sie es erneut!, vbCritical + vbOKOnly, Fehler
    Exit Sub
        Else
            ActiveSheet.Range(Cells(2, 1), Cells(Cells(65536, 1).End(xlUp).Row, _
            Cells(2, 256).End(xlToLeft).Column)).Sort Key1:=Columns(Spalte) _
            , Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, _
            MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
End If
End Sub

Ciao


Fibo
 
  • #3
Hallo zusammen,

Voraussetzung ist: Die Überschriftenzeile enthält Überschriften

Folgenden Code in ein Modul der Mappe packen:
Code:
Option Explicit
Option Private Module

'Merker für letzten Sortiermodus der Spalte
Dim lColAufsteigend(1 To 256) As Boolean

Function BlattSortieren(ws As Worksheet, lRow As Long, lCol As Long)
    
  Dim lCols As Long, lRows As Long, lRowsAkt As Long, x As Long
  
 ->Spaltenanzahl der Tabelle aus lRow
  lCols = ws.Cells(lRow, ws.Columns.Count).End(xlToLeft).Column
  
 ->größte benutzte Zeilenanzahl der Spalten feststellen
  lRows = 0
  For x = 1 To lCols
    lRowsAkt = ws.Cells(ws.Rows.Count, x).End(xlUp).Row
    If lRowsAkt > lRows Then lRows = lRowsAkt
  Next
  
 ->Wenn nicht mindestens 2 Zeilen zu sortieren sind Hinweis
  If lRows < lRow + 2 Then MsgBox Gibt nichts zu sortieren: Exit Function
  
 ->Sortieren abhängig von letzter Sortierung der spalte
  With ws.Range(ws.Cells(lRow + 1, 1), ws.Cells(lRows, lCols))
    If lColAufsteigend(lCol) Then
      .Sort Key1:=ws.Cells(lRow + 1, lCol), Order1:=xlDescending, Header:=xlNo
      lColAufsteigend(lCol) = False
    Else
      .Sort Key1:=ws.Cells(lRow + 1, lCol), Order1:=xlAscending, Header:=xlNo
      lColAufsteigend(lCol) = True
    End If
  End With
End Function

Jetzt zu den Button:
a) Die Visual-Basic-Symbolleiste sichtbar machen
   (Ansicht->Symbolleisten->Visual Basic)
b) 1. Button setzen
b1) Auf der Visual-Basic-Symbilleiste->Hammer&Schraubenschlüssel' anklicken
b2) Auf der Werkzeugpalette den Command-Button auswählen
b3) Mit dem Cusor in die 1. Überschriften-Zelle einen Command-Button aufziehen (Größe so einrichten, daß auf jeden fall die linke obere Ecke in der Zelle liegt.
b4) Command-Button mit rechter Maus anklicken -> Steuerelement formatieren->Eigenschaften->von Zellposition und -größe abhängig setzen, dann OK
b5) Command-Button mit rechter Maus anklicken -> Eigenschaften
b5.1) unter Caption Überschrift eintragen
b5.2) TakeFocusOnClick auf False setzen

b2 -  b5.2 für alle weiteren Überschriften analog anwenden

b6) für Command-Button Code einfügen
b6.1) Doppelklick auf Command-Button
der Cusor steht in einer Eignisprozedur der Form
Code:
Private Sub CommandButton4_Click()

End Sub
b6.2) Hier den folgenden Code eingeben
Code:
Private Sub CommandButton4_Click()
  Dim ws As Worksheet
  Dim lRow As Long, lCol As Long
  lRow = CommandButton4.TopLeftCell.Row
  lCol = CommandButton4.TopLeftCell.Column
  Set ws = Me
  Call BlattSortieren(ws, lRow, lCol)
AUFRAEUMEN:
  Set ws = Nothing
End Sub

In diesem Beispiel ist es CommandButton4. Für die anderen Command-Button ist ebenso zu verfahren. Dabei sind die Zeilen
Code:
  lRow = CommandButton4.TopLeftCell.Row
  lCol = CommandButton4.TopLeftCell.Column
entsprechend dem CommandButton anzupassen, also z.B. für CommandButton1
Code:
  lRow = CommandButton1.TopLeftCell.Row
  lCol = CommandButton1.TopLeftCell.Column

b7) Knöpfe für->Werkzeugleiste' und->Editiermodus' auf der Visual-Basic-Symbolleiste ausschalten.

Jetzt sollte schon sortiert werden, wenn man eine Button drückt.

Den letzte Sortiermodus (aufsteigend oder absteigend ) merkt sich das Makro und bei wiederholter Betätigung des Buttons wird dann entgegengesetzt sortiert.

@wak66: Entspricht das so deinen Wünschen ?

Gruß Matjes :)
 
Thema:

Excel - Spalten formatieren

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben