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

Brauche dringend Hilfe mit VBA-Sortierung in Excel

Brauche dringend Hilfe mit VBA-Sortierung in Excel
13.03.2017 16:12:30
Yannick
Hallo,
ich komme mit einer Aufgabe nicht weiter und bitte euch um eure Mithilfe !
In Excel habe ich mir eine Aufgabenliste angelegt und möchte diese nun nach 2 Spalten sortieren.
Die erste Spalte enthält die Priorität der Aufgabe und die letzt Spalte ein "erledigt"
wenn erledigt > 0 ist, soll danach sortiert werden.
ich habe eine makroaufnahme gemacht, bekomme es aber nicht auf die Reihe, das der Sortiervorgang dynamisch gemacht wird. Ich möchte die Daten bei jeder Änderung sortieren. Am Besten über VBA.
Vielen lieben Dank schon einmal im Voraus.
Das Makro-Szenario wie ich es mir vorstelle:

Sub sort_it()
' sort_it Makro
ActiveWorkbook.Worksheets("ToDoListe").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("ToDoListe").Sort.SortFields.Add Key:=Range( _
"J2:J64"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("ToDoListe").Sort.SortFields.Add Key:=Range( _
"A2:A64"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("ToDoListe").Sort
.SetRange Range("A1:J64")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveWindow.SmallScroll Down:=-51
End Sub

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Bsp. Mappe Bitte
13.03.2017 16:20:10
Max2
Hallo,
hast du vielleicht eine Beispiel Mappe für uns?
Niemand baut gerne Mappen nach...
Wenn du unbedingt etwas in VBA gemacht haben willst, solltest du dich am besten
selbst damit ein wenig beschäftigen.
Es macht keinen Sinn sich etwas auf schnell Programmieren zu lassen und es dann nur unter
großen Umständen anpassen zu können!
AW: Bsp. Mappe Bitte
13.03.2017 16:41:11
Yannick
Hallo Max,
erst einmal danke für deine Antwort.
Leider ist es mir hier nicht möglich Excelsheets hochzuladen.
http://www.imagebanana.com/view/d3pv6l77/todo.PNG
Auf dem Bild sieht man wie ich es mir vorstelle.
Ich bin dabei mir VBA anzueignen, aber es ist eben noch schwierig.
Über eine Antwort würde ich mich freuen!
Anzeige
warum "hochladen nicht möglich" ?
13.03.2017 16:57:42
robert
AW: warum "hochladen nicht möglich" ?
13.03.2017 16:59:35
Yannick
ich kann keine csv.-Datei hochladen
anders format wählen?
AW: warum "hochladen nicht möglich" ?
13.03.2017 18:36:25
Luschi
Hallo Yannick,
Du hast die Wahl:
- csv-Datei zippen
- csv-Datei-Typ umbenennen in *.txt
Gruß von Luschi
aus klein-Paris
wieso csv-Datei? Code ist doch in Excel-Datei-oT
13.03.2017 19:08:46
robert
AW: wieso csv-Datei? Code ist doch in Excel-Datei-oT
14.03.2017 08:58:36
Yannick
Ich kann auch keine normalen Excel-Dokumente hochladen.
Habe jetzt schon ein paar mal das Format geändert, aber das hilft auch nicht.
Auf dem Bild ist aber eigentlich alles zu erkennen, was ich mit der Funktion bezwecken will.
AW: wieso csv-Datei? Code ist doch in Excel-Datei-oT
14.03.2017 09:05:35
Daniel
Hi
warum sollte das nicht funktionieren?
du musst halt die Bedingungen beachten, wie sie auf der uploadseite beschrieben werden:
a) nur xlsx, xlsm oder xls, aber kein xlsb (warum auch immer)
b) Dateigröße kleiner 300kb
c) keine Leerzeichen im Verzeichnis oder Dateinamen.
Gruß Daniel
Anzeige
AW: wieso csv-Datei? Code ist doch in Excel-Datei-oT
14.03.2017 09:29:37
Yannick
Da ist mir ein Fehler unterlaufen.
Ich hatte nicht "alle Dateien anzeigen" angehakt. Dummer Fehler. Naja, voilà!
https://www.herber.de/bbs/user/112162.xlsx
Hier nochmal aber in deiner Datei
14.03.2017 09:47:01
Max2
Hier: https://www.herber.de/bbs/user/112163.xlsm
Im anderen Post den ich heute morgen hier im Thread gemachte habe steht alles
"wissenswerte".
Einfach in den dann gucken wenn was unklar ist.
Morgen
13.03.2017 17:19:00
Max2
Hallo,
ich habe mal was geschrieben aber es klappt noch nicht ganz...
Morgen mach ich es fertig.
Anzeige
AW: Morgen
13.03.2017 17:22:03
Yannick
Wow. Das freut mich riesig.
Danke!
Hier die Datei u. Code
14.03.2017 09:17:09
Max2
Guten Morgen,
anbei die Datei, ich habe mal alles was ich gemacht habe kommentiert.
Vielleicht hilft es ja den Code besser zu verstehen.
Sollte etwas noch nicht ganz funktionieren oder sonst was, dann geb bescheid.
Drücke ALT + F11 und dann Doppelklick auf "ToDoListe" bzw. Tabelle1.
Dort befindet sich das "Hauptprogramm" welches Unterprogramme und Funktionen aufruft.
Hier die nachgebaute Datei mit Code: https://www.herber.de/bbs/user/112160.xlsm
Gruß Max2
Für alle die nichts Downloaden wollen und nur den Code sehen wollen:
Worksheet_Change():
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Boolean
Dim spalteJ As Long
Dim spalteA As Long
'//Wir übergeben diese Variablen später
'//als Parameter für den Sub "Filter"
spalteJ = 10
spalteA = 1
'//Wir prüfen ob die änderung in Spalte
'//A oder Spalte J stattgefunden hat und
'//der Zellinhalt nicht nichts ist... also Leer
If Target.Column = 1 Or Target.Column = 10 Then
If Target.Value  "" Then
'//Zählt ob in Spalte j die Summe größer 0 ist
'//befindet sich in Modul: "Zählen"
Call counter
'//Falls ja dann Parameter für Spalte J
'//Falls nein dann Parameter für Spalte A
'//Der Sub Filter befindet sich im Modul "Sortieren"
If counter = True Then
Call Filter(spalteJ)
Else
Call Filter(spalteA)
End If
End If
End If
End Sub

Zähler Funktion:
Option Explicit
Function counter() As Boolean
Dim ws As Worksheet
Dim count As Integer
Dim lzeile As Long
Dim i
i = 2
Set ws = ThisWorkbook.Sheets("ToDoListe")
With ws
'//ermittelt die letzte Zeile in Spalte J
lzeile = .Cells(.Rows.count, 10).End(xlUp).Row
'//Wir haben einen Zähler namens "count"
'//dieser wird um eins erhöht wenn eine
'//der Zellen in Spalte J größer 0 ist
Do
If .Cells(i, 10).Value > 0 Then
count = count + 1
End If
i = i + 1
'//das Abbruch kriterium
'//kann auch durch: Loop Until count > 0
'//ersetzt werden
Loop Until i > lzeile
'//Wenn count größer null ist dann
'//setzten wir unsere Function auf True
'//dies entscheidet ob der Filter auf
'//Spalte A oder Spalte J angewendet wird!
If count > 0 Then counter = True
End With
End Function

Sub für den AutoFilter:
Option Explicit
Sub Filter(ByVal x As Long)
Dim ws As Worksheet
Dim lzeile As Long
Set ws = ThisWorkbook.Sheets("ToDoListe")
With ws
'//Wir ermitteln die Letzte benutze Zeile der spalte x
'//x ist der Parameter der übergeben wurde
'//x ist also 1 oder 10
lzeile = .Cells(.Rows.count, x).End(xlUp).Row
End With
'//Wir selecten die Zelle x1 also A1 o. J1
'//und erstellen den AutoFilter
ThisWorkbook.Sheets("ToDoListe").Cells(1, x).Select
Selection.AutoFilter
'//Die Range "Cells(2, x), Cells(lzeile, x)"
'//umfasst den Bereich der Spalte x
ActiveWorkbook.Worksheets("ToDoListe").AutoFilter.sort.SortFields.Add Key:= _
Range(Cells(2, x), Cells(lzeile, x)), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
'//hier sind die Optionen des Filters
'//möchte man das "Sortierverhalten" ändern
'//muss man ".Orientation = ..." abändern
With ActiveWorkbook.Worksheets("ToDoListe").AutoFilter.sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'//dadurch wird der Filter wieder entfernt
Selection.AutoFilter
Cells(lzeile, x).Select
End Sub

Anzeige
AW: Hier die Datei u. Code
14.03.2017 10:31:40
Yannick
Hallo Max,
vielen Dank schon einmal!!
leider habe ich vergessen zu erwähnen, dass der "erledigt-wert" umspringt, wenn ein Buchstabe in "abgenommen" steht. Das habe ich im sheet selbst mit =WENN($I6 > 0;1;0) gemacht.
Außerdem verändert sich die Sortierung nicht, wenn ich etwas in den Prioritäten änder.
Kannst du mir diesbezüglich noch einmal helfen? Das würde mich sehr freuen!
AW: Hier die Datei u. Code
14.03.2017 10:44:32
Max2
Hallo,
in Prio ändert sich nur dann etwas wenn die Summe ALLER Werte in Spalte J gleich Null ist!
So habe ich die Beschreibung der Anforderung verstanden und umgesetzt.
Ich habe die Formel in Spalte J folgend geändert: =WENN($I$zahl"";1;0)
Dadurch wird J gleich 1 wenn irgendetwas in I steht und Null wenn nichts drinnen steht.
Deine Version prüft auf 0, das ist nur dann Sinnvoll wenn tatsächlich auch nichts anderes
reinkommen darf/kann.
Hier die erneut angepasste Datei: https://www.herber.de/bbs/user/112165.xlsm
Anzeige
AW: Hier die Datei u. Code
14.03.2017 11:15:31
Yannick
Hallo Max,
das funktioniert schon gut. Nur würde ich gerne haben, dass die 1 ganz unten ist. Wie kann ich denn die Sortierung umkehren?
und die Sortierung der ersten Spalte war immer gedacht, nur eben zweitrangig. Also erst nach erledigt sortieren und gleichzeitig nach Prio. Die erste Spalte soll also immer nach Prio sortiert sein, und als erledigt angehakte Zeilen, nach unten verschoben werden. Bei den Zeilen mit "erledigt" auf 1 ist die Reihenfolge egal.
Vielen Dank für deine Zeit und Mühe!
AW: Hier die Datei u. Code
14.03.2017 11:18:52
Yannick
Hallo Max,
das funktioniert schon gut. Nur würde ich gerne haben, dass die 1 ganz unten ist. Wie kann ich denn die Sortierung umkehren?
und die Sortierung der ersten Spalte war immer gedacht, nur eben zweitrangig. Also erst nach erledigt sortieren und gleichzeitig nach Prio. Die erste Spalte soll also immer nach Prio sortiert sein, und als erledigt angehakte Zeilen, nach unten verschoben werden. Bei den Zeilen mit "erledigt" auf 1 ist die Reihenfolge egal.
Vielen Dank für deine Zeit und Mühe!
Anzeige
Das nächste mal Bitte genaue Angaben
14.03.2017 12:12:23
Max2
Damit die 1er unten erscheinen, musst du einfach im
"Private Sub Worksheet_Change(ByVal Target As Range)" die Variable
"spalteJ = 9" in "spalteJ = 10" umändern
dann wirft er die 1er nach unten.
Wenn du erst nach erledigt und anschließend nach Prio sortieren willst, muss das Makro
grundlegend geändert werden.
In deinem ersten Post und auch in den weiteren war, zumindest für mich, nicht
klar erkenntlich das du erst nach dem einen und dann nach dem Sortieren willst.
Für mich klang es so, dass du eben entweder nach dem einen oder dem anderen Filtern willst.
Das Makro müsste also folgendes tuen:
Filter nach Spalte J
Dann Suche die erste Null in Spalte J
Sortiere ab diesem Punkt nach Spalte A
Anzeige
AW: Das nächste mal Bitte genaue Angaben
14.03.2017 12:42:58
Yannick
okay..
so ergibt das ganze aber keinen Sinn mehr.
Soll ich nun nochmal ein neues thread aufmachen?
AW: Das nächste mal Bitte genaue Angaben
14.03.2017 12:59:54
Yannick
okay..
so ergibt das ganze aber keinen Sinn mehr.
Soll ich nun nochmal ein neues thread aufmachen?
Ich Arbeite drann... owT
14.03.2017 16:31:10
Max2

Mit Worksheet_Change
14.03.2017 16:51:55
Max2
Hallo,
habe das ganze soweit fertig...
Damit das ganze aber einwandfrei läuft und zwar so wie es laufen soll, muss das ganze über
einen Button gestartet werden.
Momentan ist noch per Worksheet_Change, aber dadurch sind die 1er Einträge am Ende nicht mehr
Sortiert.
https://www.herber.de/bbs/user/112181.xlsm
Anzeige
AW: Mit Button und fertig
15.03.2017 08:27:53
Max2
Hallo und guten Morgen,
habe das ganze jetzt mit einem Button gemacht, dadurch sollte es Fehlerfrei funktionieren.
Es wird erst nach allen erledigten Dingen gefiltert, anschließend wird eine leere Zeile eingefügt um die Daten zu trennen und erneut zu Filtern, diesmal nach Prio.
Die leere Zeile muss eingefügt werden, da der Excel Filter sonst nach sortieren der erledigten, den Filter erneut auf alles anwendet.
Hier die Datei: https://www.herber.de/bbs/user/112193.xlsm
AW: Morgen
13.03.2017 17:30:44
Yannick
Wow. Das freut mich riesig.
Danke!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige