Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1012to1016
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

Zeilen autom nach Werten d. Spalte C sortieren

Zeilen autom nach Werten d. Spalte C sortieren
02.10.2008 09:16:11
obelix-xxl
Hallo,
ich bitte um Unterstützung bei der Lösung mittels Makro für nachfolgende Aufgabenstellung.
Im aktuellen Tabellenblatt "Raum 1" sind in der Spalte C einer jeden Zeile ganze Zahlen von 1 bis 30 eingetragen. Diese Zeilen sollen automatisch nach Eingabe des Wertes in Spalte C sortiert werden.
Ein Beispiel: In Zeile 10-12 steht der Wert 5 in Spalte C. In Zeile 13-18 steht der Wert 7 in Spalte C.
In der neuen Zeile, ganz unten in der Tabelle, trage ich in Spalte C den Wert 6 ein. Nun sollte das Makro automatisch die letzte Zeile mit dem Wert 6 zwischen die Zeilen mit den Wert 5 und 7 einsortieren.
Ist das so zu lösen?
Alternativ könnte auch folgende Lösung möglich sein.
Markierte Zeilen werden nach den ganzen Zahlenwerten in Spalte C absteigend sortiert.
Für Euro Unterstützung danke ich recht herzlich und werde die fertige Makrolösung hier einstellen.
Liebe Grüsse
obelix

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

Betreff
Datum
Anwender
Anzeige
AW: Zeilen autom nach Werten d. Spalte C sortieren
02.10.2008 10:10:00
fcs
Hallo obelix,
das folgende Makro führt eine entsprechende Sortierung durch.
Einfügen muss du es im VBA-Editor unter der Tabelle in der Sortiert werden soll.
Gruß
Franz

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lngZeileLast As Long
Const SpalteSort As Long = 3 'Spalte nach der Sortiert werden soll
Const lngZeile1 As Long = 2 '1. Datenzeile in Sortierspalte
If Target.Column = SpalteSort And Target.Row >= lngZeile1 And Target.Cells.Count = 1 Then
With Me
lngZeileLast = .Cells(.Rows.Count, SpalteSort).End(xlUp).Row
If lngZeileLast > lngZeile1 Then
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
.Range(.Rows(lngZeile1), .Rows(lngZeileLast)).Sort Key1:=.Cells(lngZeile1, SpalteSort),  _
_
order1:=xlAscending, header:=xlNo
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End With
End If
End Sub


Anzeige
AW: Zeilen autom nach Werten d. Spalte C sortieren
02.10.2008 10:23:00
Felix
Ein ganz kleiner Schnipsel:
Range("A1:" & ActiveSheet.Range("A1").SpecialCells(xlLastCell).Address).Sort Key1:=Range("C2"), Order1:=xlAscending, Header:=xlGuess
Gruß
Felix
AW: Zeilen autom nach Werten d. Spalte C sortieren
02.10.2008 11:02:00
obelix-xxl
Hallo Franz,
danke für die schnelle Hilfe.
Ich stehe aber trotzdem etwas auf dem Schlauch. Diese Zeile ist bei mir in ROT dargestellt, wenn ich Sie als Modul einfüge (Aufruf Visual Basic mit Alt + F11 , Menue Einfügen - Modul).
.Range(.Rows(lngZeile1), .Rows(lngZeileLast)).Sort Key1:=.Cells(lngZeile1, SpalteSort), _
_
order1:=xlAscending, header:=xlNo
Ich denke hier ist der Grund für die Fehlermeldung:
SpalteSort), _
_
order1
Bitte schau Dir das noch einmal an.
Sorry, dass ich so viel Mühe bereite.
mfg
obelix
Anzeige
AW: Zeilen autom nach Werten d. Spalte C sortieren
02.10.2008 11:16:40
fcs
Hallo Obeelix,
da ist der Code beim Posten unglücklich zerrissen worden.

.Range(.Rows(lngZeile1), .Rows(lngZeileLast)).Sort Key1:=.Cells(lngZeile1, _
SpalteSort), order1:=xlAscending, header:=xlNo


Gruß
Franz

AW: Zeilen autom nach Werten d. Spalte C sortieren
02.10.2008 11:49:36
obelix-xxl
Hallo Franz,
ich habe jetzt den kompletten Makrocode nach Aufruf des VisualBasic-Editor meinert Tabelle3(Raumbuch) zugeordnet.
Wie kann ich nun die Funktion des Makros starten? Liege ich da falsch?
Ich habe einige Zeilen markiert und nach dem soeben eingetragenen Makro gesucht. Dieses habe ich nicht unter Makros gefunden und kann somit auch keine Zuordnung STRG + x treffen ?
Liebe Grüsse
obelix
Anzeige
AW: Zeilen autom nach Werten d. Spalte C sortieren
02.10.2008 12:06:44
obelix-xxl
Hallo Franz,
hier noch einmal die Kopie des makros, so wie ich es jetzt als gespeichert habe.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lngZeileLast As Long
Const SpalteSort As Long = 3 'Spalte nach der Sortiert werden soll
Const lngZeile1 As Long = 2 '1. Datenzeile in Sortierspalte
If Target.Column = SpalteSort And Target.Row >= lngZeile1 And Target.Cells.Count = 1 Then
With Me
lngZeileLast = .Cells(.Rows.Count, SpalteSort).End(xlUp).Row
If lngZeileLast > lngZeile1 Then
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
.Range(.Rows(lngZeile1), .Rows(lngZeileLast)).Sort Key1:=.Cells(lngZeile1, _
SpalteSort), order1:=xlAscending, Header:=xlNo
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End With
End If
End Sub


liebe Grüsse
obelix

Anzeige
AW: Zeilen autom nach Werten d. Spalte C sortieren
02.10.2008 13:44:00
hary
Hallo Obelix
Du hattest doch geschrieben der Befehl soll automatisch ausgefuehrt werden. Das passiert durch WorkSheet_Change Ereigniss. Der Code ist ja in der Tabelle hinterlegt, deshalb kannst Du es auch nicht unter Makros finden. Wie ich es rauslese markierst Du jetzt die Spalte und der Code wird nach druecken der EnterTaste ausgefuehrt. Ansonsten muesstest Du den Code in ein Modul einfuegen, dann steht es auch unter Makros zur verfuegung.
Gruss Hary
AW: Zeilen autom nach Werten d. Spalte C sortieren
02.10.2008 14:37:00
obelix-xxl
Hallo Franz, Felix und Hary,
recht herzlichen Danke für eure intensive Unterstützung.
Nachfolgendes Makro habe ich jetzt in Nutzung und starte dieses mit STRG + s.
Nach dem Sortieren erscheinen die ausgewählten Zeilen in folgender Sortierung:
1
1
10
2
3
4
....
Was muss ich ändern, damit die Sortierung so ausgeführt wird?
1
1
2
3
4
5
6
7
8
9 und dann erst die
10
11
....
Die Lösung mit der automatischen Makroausführung habe ich nicht verstanden einzubinden. Es wird aber irgendwann einmal klappen. Ich bleibe dran.
liebe Grüße
obelix

Sub Selektion_Nach_Spalte_C_Sortieren()
Dim lngZeileLast As Long, wks As Worksheet, Bereich As Range
Const SpalteSort As Long = 3 'Spalte nach der Sortiert werden soll
Dim lngZeile1 As Long '1. Datenzeile in selektion
Set wks = ActiveSheet
Set Bereich = Selection
lngZeile1 = Bereich.Row
lngZeileLast = Bereich.Row + Bereich.Rows.Count - 1
With wks
If lngZeileLast > lngZeile1 Then
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
.Range(.Rows(lngZeile1), .Rows(lngZeileLast)).Sort Key1:=.Cells(lngZeile1, _
SpalteSort), order1:=xlAscending, Header:=xlNo
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End With
End Sub


Anzeige
AW: Zeilen autom nach Werten d. Spalte C sortieren
02.10.2008 14:47:00
fcs
Hallo Obelix,
scheinbar stehen die Zahlen als Text in den Zellen bzw. die Zellen der zu sortierenden Spalte sind als Text formatiert.
Ändere die Zahlen-Formatierung in Standard. Anschließend muss du die Zahlen erneut eingeben oder mit Kopieren einer Zelle mit Wert 1 und "Inhalte einfügen" die Zellen mit 1 multiplizieren.
Gruß
Franz
AW: Zeilen autom nach Werten d. Spalte C sortieren
02.10.2008 13:47:04
fcs
Hallo Obelix,
das Makro startet automatisch, wenn du in Spalte C in einer Zelle einen Wert einträgst oder änderst.
Falls du die Sortierung manuell starten willst, dann muss du eine der folgenden beiden Varianten verwenden.
Gruß
Franz

Sub Nach_Spalte_C_Sortieren()
Dim lngZeileLast As Long, wks As Worksheet
Const SpalteSort As Long = 3 'Spalte nach der Sortiert werden soll
Const lngZeile1 As Long = 2 '1. Datenzeile in Sortierspalte
Set wks = ActiveSheet
With wks
lngZeileLast = .Cells(.Rows.Count, SpalteSort).End(xlUp).Row
If lngZeileLast > lngZeile1 Then
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
.Range(.Rows(lngZeile1), .Rows(lngZeileLast)).Sort Key1:=.Cells(lngZeile1, _
SpalteSort), order1:=xlAscending, Header:=xlNo
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End With
End Sub
Sub Selektion_Nach_Spalte_C_Sortieren()
Dim lngZeileLast As Long, wks As Worksheet, Bereich As Range
Const SpalteSort As Long = 3 'Spalte nach der Sortiert werden soll
Dim lngZeile1 As Long '1. Datenzeile in selektion
Set wks = ActiveSheet
Set Bereich = Selection
lngZeile1 = Bereich.Row
lngZeileLast = Bereich.Row + Bereich.Rows.Count - 1
With wks
If lngZeileLast > lngZeile1 Then
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
.Range(.Rows(lngZeile1), .Rows(lngZeileLast)).Sort Key1:=.Cells(lngZeile1, _
SpalteSort), order1:=xlAscending, Header:=xlNo
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End With
End Sub


Anzeige
AW: Zeilen autom nach Werten d. Spalte C sortieren
02.10.2008 14:54:11
obelix-xxl
Hallo Franz, Felix und Hary,
recht herzlichen Dank für Euro Unterstützung.
Ich habe (noch) nicht verstanden, wie ich das automatische Makro einbinden kann. Ich mache mich aber noch schlau.
Gut funktioniert das Makro von Franz. Dieses starte ich mit Strg + s. Das Sortierergebnis ist noch nicht wie gewünscht.
so wird jetzt sortiert:
1
10
2
3
....
Gerne würde ich das Sortierergebnis so ausgegeben haben:
1
2
3
4
..
9 und dann die
10
...
Was muss ich dazu noch eintragen?
Hier das eingesetzte Makro:

Sub Selektion_Nach_Spalte_C_Sortieren()
Dim lngZeileLast As Long, wks As Worksheet, Bereich As Range
Const SpalteSort As Long = 3 'Spalte nach der Sortiert werden soll
Dim lngZeile1 As Long '1. Datenzeile in selektion
Set wks = ActiveSheet
Set Bereich = Selection
lngZeile1 = Bereich.Row
lngZeileLast = Bereich.Row + Bereich.Rows.Count - 1
With wks
If lngZeileLast > lngZeile1 Then
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
.Range(.Rows(lngZeile1), .Rows(lngZeileLast)).Sort Key1:=.Cells(lngZeile1, _
SpalteSort), order1:=xlAscending, Header:=xlNo
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End With
End Sub


Liebe Grüsse
obelix

Anzeige
AW: 2 Beispielmappen
02.10.2008 19:25:57
obelix-xxl
Hallo Hary,
danke für die aufschlussreichen Makros.
Das Makro mit Strg + s gefällt mir für meinen Anwendungsfall am Besten.
Es wird allerdings noch nicht das gewünschte Sortierergebnis ausgegeben: 1,2,3,4, ...
sondern es wird ausgegeben 1,10,11, .. ,2,3,4, ..
Kann man das mit wenig Mühe noch ändern?
Hier das eingesetzte Makro:

Sub Selektion_Nach_Spalte_C_Sortieren()
Dim lngZeileLast As Long, wks As Worksheet, Bereich As Range
Const SpalteSort As Long = 3 'Spalte nach der Sortiert werden soll
Dim lngZeile1 As Long '1. Datenzeile in selektion
Set wks = ActiveSheet
Set Bereich = Selection
lngZeile1 = Bereich.Row
lngZeileLast = Bereich.Row + Bereich.Rows.Count - 1
With wks
If lngZeileLast > lngZeile1 Then
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
.Range(.Rows(lngZeile1), .Rows(lngZeileLast)).Sort Key1:=.Cells(lngZeile1, _
SpalteSort), order1:=xlAscending, Header:=xlNo
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End With
End Sub


Für die Unterstützung danke ich.
liebe Grüsse
obelix

Anzeige
AW: 2 Beispielmappen
02.10.2008 22:48:00
obelix-xxl
Hallo,
sorry, ich hab mich heute abend etwas bei der Eingabe des Makros verhauen.
Funktioniert tadellos.
Nochmals tausend Dank an alle, die geholfen haben.
liebe Grüsse
obelix

316 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige