02.12.2015, 15:10
Hallo zusammen,
Ihr seid einfach genial. Super gut.
Vielen Dank Euch allen!
Ihr seid einfach genial. Super gut.
Vielen Dank Euch allen!
![]() Forum des Excel-Verein 2015 e.V. |
Das Clever-Excel-Forum-Treffen
findet vom 19.09. - 21.09.2025 in Bad Arolsen statt. Zu den Infos kommt Ihr oben über den Link. |
Excel VBA Sortierproblem
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
02.12.2015, 15:10
Hallo zusammen,
Ihr seid einfach genial. Super gut. Vielen Dank Euch allen!
05.12.2015, 15:29
(Dieser Beitrag wurde zuletzt bearbeitet: 06.12.2015, 11:52 von Rabe.
Bearbeitungsgrund: Zitat auf Relevantes gekürzt
)
(02.12.2015, 12:09)RPP63 schrieb: Hallo Ralf, mein Sortierproblem hat sich leider etwas verschäft und vielleicht hast Du noch ne Idee wie man auch dieses lösen könnte. Vorab die Bemerkung dass ich wohl weiß dass Leerzeilen ein "no go" sind. Trotzdem möchte ich fragen ob folgende Aufgabe per VBA zu lösen ist und ob man die Leerzeile doch belassen kann. Was möchte ich tun? In Anlehnung an Deine oben gezeigte Sortiermethode, die ich cool finde, würde ich gerne wieder nach aufsteigendem Datum sortieren ....aber nur innerhalb eines jeden Datenblockes einer Kategorie, der Datenblock sollte getrennt sein durch die Leerzeile.... d.h. die Leerzeile sollte zwischen den Datenblöcken erhalten bleiben! Hättest Du hierzu einen Lösungsansatz für mich? Tabelle11
Vielen Dank!
Hallo Erich!
Ich habe keinen Ansatz, sondern eine Lösung. :19: Leerzeilen sind Mist, aber man kann sie ja überlisten. Ist vielleicht nicht so leicht zu verstehen wie mein erstes Makro, aber Du kannst ja zur Not nachfragen ... Modul Modul1 Option Explicit Sub SortSpezRPP() Dim Zeile() As Long, cnt As Long, i As Long Dim Spalte As Integer Spalte = Cells(1, Columns.Count).End(xlToLeft).Column + 1 Redim Zeile(0) Zeile(0) = 2 cnt = 1 i = 1 Application.ScreenUpdating = False With ActiveSheet Do Until cnt = 2 ^ 20 Redim Preserve Zeile(i) cnt = .Cells(cnt, 1).End(xlDown).Row If cnt < 2 ^ 20 Then Zeile(i) = cnt i = i + 1 Loop cnt = 0 For cnt = 0 To Ubound(Zeile) - 2 Step 2 Range(.Cells(Zeile(cnt), Spalte), .Cells(Zeile(cnt + 1), Spalte)).FormulaR1C1 = _ "=--(MID(RC1,FIND(""!"",RC1)+1,3)&MID(RC1,FIND(""_"",RC1)+3,2))" .Range(.Cells(Zeile(cnt), 1), .Cells(Zeile(cnt + 1), Spalte)).Sort _ Key1:=.Cells(Zeile(cnt), Spalte), Order1:=xlAscending, Header:=xlNo Next .Columns(Spalte).Delete End With End Sub Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Jetzt erst gesehen ...
Deine Strings stehen ja in Spalte G. Da ich nicht weiß, ob Du mein Makro problemlos anpassen kannst, habe ich das mal für Dich getan. Modul Modul1 Option Explicit Sub SortSpezRPP() Dim Zeile() As Long, cnt As Long, i As Long Dim Spalte As Integer Spalte = Cells(1, Columns.Count).End(xlToLeft).Column + 1 Redim Zeile(0) Zeile(0) = 2 cnt = 1 i = 1 Application.ScreenUpdating = False With ActiveSheet Do Until cnt = 2 ^ 20 Redim Preserve Zeile(i) cnt = .Cells(cnt, 7).End(xlDown).Row If cnt < 2 ^ 20 Then Zeile(i) = cnt i = i + 1 Loop cnt = 0 For cnt = 0 To Ubound(Zeile) - 2 Step 2 Range(.Cells(Zeile(cnt), Spalte), .Cells(Zeile(cnt + 1), Spalte)).FormulaR1C1 = _ "=--(MID(RC7,FIND(""!"",RC7)+1,3)&MID(RC7,FIND(""_"",RC7)+3,2))" .Range(.Cells(Zeile(cnt), 1), .Cells(Zeile(cnt + 1), Spalte)).Sort _ Key1:=.Cells(Zeile(cnt), Spalte), Order1:=xlAscending, Header:=xlNo Next .Columns(Spalte).Delete End With End Sub Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius) ![]() (05.12.2015, 16:37)RPP63 schrieb: Ich habe keinen Ansatz, sondern eine Lösung. :19: Hallo Ralf, es ist vermessen immer nach einer Lösung zu fragen, wenn es dann doch eine gibt um so besser ![]() Es ist schon klasse welche Hilfe man hier bekommt, super gut. Du bist klasse, vielen Dank! Dein Makro funktioniert super und bevor ich frage warum das so ist werde ich es mir ganz genau ansehen und versuchen es zu verstehen. Ich wünsche noch ein schönes WE!
Wenn die Daten in Spalte A:
Code: Sub M_snb() Wenn die Jahren auch sortiert werden müssen: Code: Sub M_snb() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|