so automatisch sortieren lassen, dass wenn ich in Spalte A einen weiteren Wert eingebe (z.b. 12) , mir dieser automatisch zwischen 10 und 16 geschoben wird.
also aus:
A B C D
10 2 1 50
16 2 1 59
35 4 1 71
41 2 1 59
12
soll werden:
A B C D
10 2 1 50
12
16 2 1 59
35 4 1 71
41 2 1 59
und beim Verschieben der anderen Zeilen sollen die Werte aus B/C/D immer mit dem dazugehörigen A-Wert mitgehen.
Hallo Artur,
das ist eine Standard-Sortieraufgabe. Du kannst den Bereich Deiner Daten markieren und dann nach Spalte A sortieren.
Wenn Du es automatisiert haben willst, kannst Du VBA verwenden.
Z. B. kopierst Du folgenden Code in den Code-Bereich des Tabellenblattes:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
’ startet, sobald sich ein Wert in einer Zelle ändert
If target.column 1 then Exit Sub ’ bricht ab bei allen Spalten außer A
Call sortieren
End Sub
Das Sortierprogramm kopierst Du in ein Modul Deiner Arbeitsmappe:
Option Explicit
Sub sortieren
With ActiveSheet
If .FilterMode Then .ShowAllData
End With
Cells.EntireColumn.Hidden = False
Cells.EntireRow.Hidden = False
Range(Cells(1, 1), Cells(activecell.row, 4)).Sort Key1:=Range(Cells(1, 1), Cells(activecell.row, 4)), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortTextAsNumbers
End Sub
Mit VBA klappt es bestens. Einen „Wunsch“ dazu hätte ich allerdings:
Wenn ich in Spalte A z. B. „Huber“ eingebe, befindet sich „Huber“ richtig sortiert an einer neuen Stelle in Spalte A. Der Cursor befindet sich in Spalte A an unterster Stelle auf einer leeren Zelle.
Ich möchte zu „Huber“ noch weitere Eingaben machen in Spalten B, C und D. Ich muss „Huber“ nun aber zuerst an seiner neuen Stelle suchen. Wie kriegt man das hin, dass die Eingabezelle „Huber“ markiert/aktiviert bleibt, damit ich diese Huber-Zelle nicht lange suchen muss?
Ich habe es mit Kommentaren versucht:
Am Anfang des Makros gebe ich ein
ActiveCell.AddComment
ActiveCell.Comment.Text Text:=„xyz“
Am Ende des Makros:
Selection.SpecialCells(xlCellTypeComments).Select
Selection.ClearComments
Aber der Kommentar wird an der untersten (leeren) Zelle in Spalte A eingetragen, nicht bei „Huber“. Und auch wenn es klappen würde mit dem Kommentar: Wenn ich andere Kommentare in verschiedenen andern Zellen habe, ist es mit dieser Lösung nicht optimal.
Eine andere Variante wäre: zuerst die „Huber“-Werte in den Spalten B, C und D einzugeben. Und dann erst in Spalte A den „Huber“. Aber das finde ich nicht besonders Anwender-freundlich.
Kennst Du eine bessere Lösung?
Vielen Dank! Niclaus
Ich möchte allerdings noch Eingaben in Spalte B oder C oder D machen und muss deshalb in Spalte A den
Hallo Niclaus,
Du willst also den Cursor sozusagen mitsortieren lassen. Ist bestimmt manchmal hilfreich, aber eine Patentlösung fällt mir da nicht ein.
Wenn es nur einen „Huber“ gäbe, wäre es einfach, nach dem Inhalt der Startzelle zu suchen, aber darauf bist Du sicher auch schon gekommen.
Der Ansatz mit dem Kommentar wäre vielleicht ausbaufähig, indem Du vor den evtl. vorhandenen Kommentar eine seltene Zeichenkette setzt und danach suchst. Oder den alten Kommentarinhalt in eine Variable speichern, ihn durch ´was exotisches ersetzen und nach der erfolgreichen Suche wieder zurückschreiben. Dann kann es auch nicht zum Overflow wegen Kommentarlänge kommen.
Viel Erfolg
Thomas
Du willst also den Cursor sozusagen mitsortieren lassen. Ist
bestimmt manchmal hilfreich, aber eine Patentlösung fällt mir
da nicht ein.
Der Ansatz mit dem Kommentar wäre vielleicht ausbaufähig,
Hallo Thomas
Ich habe mich mit der Kommentar-Lösung beschäftigt. Ich gehe dabei einmal davon aus, dass in der Spalte A keine Kommentare vorhanden sind.
Sub sortieren()
Application.MoveAfterReturn = False
' Bringt an dieser Stelle nichts, muss vorher gestartet werden!
ActiveCell.AddComment
ActiveCell.Comment.Text Text:="xyz&zyx"
With ActiveSheet
If .FilterMode Then .ShowAllData
End With
Cells.EntireColumn.Hidden = False
Cells.EntireRow.Hidden = False
Range(Cells(1, 1), Cells(ActiveCell.Row, 4)).Sort Key1:=Range(Cells(1, 1), \_
Cells(ActiveCell.Row, 4)), Order1:=xlAscending, Header:=xlNo, \_
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, \_
DataOption1:=xlSortTextAsNumbers
Range("A:A").SpecialCells(xlCellTypeComments).Select
Selection.ClearComments
Application.MoveAfterReturn = True
End Sub
Das funktioniert, aber nur wenn ich die „Markierung nach Drücken der Eingabetaste verschieben“ ausschalte.
Sub move\_EinAus()
Application.MoveAfterReturn = False
End Sub
Und zwar muss ich diese Ausschaltung machen, bevor ich eine Eingabe in der Spalte A mache. Ich habe es versuchsweise in das Makro Sub sortieren() eingebaut, ohne Erfolg. Ich muss die „Markierung …“ zwingend vorher ausschalten.
Hast Du eine Ahnung, wie man dieses „Ausschalten“ in die Makros
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
oder Sub sortieren() einbauen könnte?
anscheinend funktioniert die Codezeile ja prinzipiell. Vielleicht hilft es, dem Makro mehr Zeit zu geben oder den Befehl in ein Unter-Makro zu schreiben ..?
Es gibt auch einen Befehl, die bisherigen Änderungen / Einstellungen zu übernehmen, fällt mir aber momentan nicht ein
Vielleicht hilft es, dem Makro mehr Zeit zu geben oder den
Befehl in ein Unter-Makro zu schreiben ..?
Ich hatte beides versucht, das half aber nicht.
Falls es Dich interessiert: Ich habe doch noch eine Lösung gefunden: Ich habe einen zweiten Code in den Code-Bereich des Tabellenblattes eingefügt, mit dem die Cursor-Bewegung ausgeschaltet wird:
Private Sub Worksheet\_SelectionChange(ByVal Target As Range)
If Target.Column 1 Then
Application.MoveAfterReturn = True
Exit Sub
Else
Application.MoveAfterReturn = False
End If
End Sub