Automatisches Sortieren bei Eingabe

  • #1
F

Fabruno

Neues Mitglied
Themenersteller
Dabei seit
16.01.2012
Beiträge
4
Reaktionspunkte
0
Hallo Zusammen

Folgendes Problem:
Eine Tabelle soll nach einem Status a oder b sortiert werden.

Nun sollen die Zeilen mit a oben stehen und die Zeilen mit b unten.

Nun sollten diese 2 Bereiche auch noch nach einer Nummer sortiert werden...

Beispiel:

vorher:
D1 b
D3 a
D7 b
D2 a
D4 b

nachher:
D2 a
D3 a
D1 b
D4 b
D7 b

wobei die Zeilen noch länger sind..

Sieht da gerad wer eine Lösung?

MFG Fabruno
 
  • #2
Vorausgesetzt D1/2/3... steht in einer Spalten und a/b in einer anderen, dann sortierst du erst aufsteigend nach der D-Spalte und danach aufsteigend nach der a/b-Spalte.

Wenn die Voraussetzung nicht gegeben ist, solltest du sie schaffen.

Nochwas zum Sortieren, weil du Anfänger zu sein scheinst: um nach einer Spalte zu sortieren, darf nur eine einzige Zelle aus dieser Spalte markiert sein. Auf keinen Fall darf die ganze Spalte markiert sein, sonst sortierst du nur diese Spalte und die anderen Spalten bleiben in der gleichen Reihenfolge wie vorher. Somit reißt du deine Zeilen auseinander.

Probier erstmal mit einer einfachen Beispieltabelle.
 
  • #3
Hallo Fabruno,

kannst du eine kleine Beispieldatei bereitstellen, oder genaue Angaben machen, zu deinem Vorhaben?

Möchtest sicher eine Makrolösung, aber mit deinen sehr ungenauen Angaben? :'(

Immer eine genaue Beschreibung, sonst zieht sich das Ganze über Tage hinweg und erfordert einige Nachfragen und Änderungen.
Das einzige was zur Zeit fest steht, ist die Spalte D mit den Einträgen A und B. :1
Alle anderen Angaben sind in der Schwebe, ebenso deine Excel- Version. :|
 
  • #4
Hallo Zusammen,

Entschuldigt die fehlenden Infos.
Ich benutze Excel 2010

Hier habe ich zwei Beispielsdateien zum Download bereitgestellt. Eine Mappe unsortiert, die andere wie sie sortiert sein sollte (vorher -> nachher).
Die Spalte C enthält lediglich einen zur Zeile dazugehörigen Namen, der mitsortiert werden sollte, halt eben die ganze Zeile -.-
Die Nummerierung in Spalte A ist etwas eigenartig, leider kann ich diese aber nicht ändern. Es steht immer ein D vor der Zahl :), hat wohl etwas verwirrt...

Am schönsten wäre es wenn ein Wert geändert wird, sich die Tabelle gleich anpasst... Keine Ahnung ob das einfach realisierbar ist, sonst eben mit einer Tastenkombination oder einem Button.



Gruss Fabruno
 
  • #5
Hallo Fabruno,

das folgende Makro im Makrobereich der Tabelle1 der Beispieldatei - Datei einfügen.

Da ich nur Excel XP(2000) habe, kann ich dir keine detaillierte Vorgangart dazu geben, wenn du schon mit Makros gearbeitet hast, wäre das eine Hilfe.

Bei Excel XP, geht das folgender Maßen.
Rechtsklick auf den Tabellenreiter (Tabelle1) und Code anzeigen wählen, im Rechten - Makrobereich, den Code einfügen und testen.
Wenn sich Spalte B durch eine Eingabe von a, oder b ändert, dann wird das Makro ausgelöst und Sortiert, bei allen anderen Eingaben <> a, oder b wird nicht Sortiert.

Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  Dim objRange As Range, objCell As Range
  Set objRange = Intersect(Target, Range(B:B))->Bereich anpassen
  If Not objRange Is Nothing And objRange = a Or objRange = b Then
  
Cells.Select
  Selection.Sort Key1:=Range(B2), Order1:=xlAscending, Key2:=Range(A2) _
    , Order2:=xlAscending, Key3:=Range(C2), Order3:=xlAscending, Header:= _
    xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
    xlSortNormal
  Range(D2).Select

  End If
End Sub
 
  • #6
Hallo zusammen,

die Prüfung muß getrennt werden, da in VBA immer alle Bedingungen geprüft werden.
z.B. Eingabe in die nächste frei Zelle in Spalte A führt zu Error, da objRange Nothing ist und dann noch die Ptüfung objRange=a erfolgt.

Also so:
Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  Dim objRange As Range, objCell As Range
  Set objRange = Intersect(Target, Range(B:B))->Bereich anpassen
  If Not objRange Is Nothing Then
   If objRange = a Or objRange = b Then
  
   Cells.Select
   Selection.Sort Key1:=Range(B2), Order1:=xlAscending, Key2:=Range(A2) _
    , Order2:=xlAscending, Key3:=Range(C2), Order3:=xlAscending, Header:= _
    xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
    xlSortNormal
   Range(D2).Select

   End If
  End If
End Sub

Gruß Matjes :)
 
  • #7
Hallo Matjes,

vielen Dank für die Info und Korrektur! :1
 
  • #8
Hallo zusammen,

da ist noch ein Haken: Spalte A (D1, D2, ..., D10) wird leider alphabetisch sortiert (D1,D10,D2 ...)

@Fabruno: Das könnt man ändern, indem man die Zahlen mit führenden Nullen schreibt,
also D0001, D0002, D0010 ergibt sortiert D0001, D0002, D0010.

Gruß Matjes :)
 
  • #9
Abend miteinander,

Ich danke für die ausführlichen Antworten, werde das morgen früh gleich in die Tat umsetzen. Die Nummerierung sollte ich soweit anpassen können.

Ich hoffe mich in diesem Forum mal für die Hilfe revanchieren zu können :-\

MFG Fabruno
 
  • #10
Funktioniert einwandfrei! :D
 
Thema:

Automatisches Sortieren bei Eingabe

ANGEBOTE & SPONSOREN

Statistik des Forums

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