ich habe in Excel das Problem, das ich von Spalte B bis Spalte S in einem Bereich von Zeile 5 bis Zeile 28 sortieren muss.
In den Zellen sind Eurobeträge enthalten.
Habe ich z. B. den Bereich von B5:B28, so kann das Makro unten wie gewünscht sortieren.
Jetzt wollte ich mit einer Schleife, die Spalten "B" bis "S", in den identische Zeilen, durchlaufen lassen und im Makro die Spalte per Variable der Schleife ersetzten. Soweit ja ok.
Hier stehe ich nun etwas auf dem Schlauch, da die Spalten ja Buchstaben sind, und keine Ziffern.
Die Schleife müsste also nacheinander B5:B28, C5:C28, D5:D28 usw. generieren.
Wie kann man denn das Problem lösen?
Danke schon mal im Voraus für eure Hilfe!
MfG
Code:
Sub Makro3() ' ' Makro3 Makro '
' Range("B5:B28").Select ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add2 Key:=Range( _ "B5:B28"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("Tabelle1").Sort .SetRange Range("B5:B28") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
lade bitte eine Beispieldatei hoch. Anhand des Quelltextes wird die niemand nachbauen wollen. Aus deiner Beschreibung wird man auch nicht so richtig schlau.
Viele Grüße Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
neben der Zelladressierung A1, B1 usw. gibt es in VBA noch die Möglichkeit sowohl Spalte als auch Zeile numerisch anzusprechen. Gerade für FOR-Schleifen ein gutes Feature.
Die Syntax ist etwas anders als bei der A1-Adresse, hier steht nicht die Spalte sondern die Zeile vorne. Beispiele:
Code:
With ActiveWorksheet .Cells(1,1) ' =A1 .Cells(2,1) ' =A2 .Cells(1,2) ' =B1 End With
Viel Erfolg!
d`r Bastler von den VBAsteleien.de Win 10 & 11, Office 2019 & 2021 & macOS X.15, XL 2019
07.05.2022, 18:05 (Dieser Beitrag wurde zuletzt bearbeitet: 07.05.2022, 18:19 von Klaus-Dieter.)
Hallo Python,
denkbar wäre auch so ein Lösungsansatz:
Code:
Option Explicit
Sub Spalten_sortieren() Dim varDatArr As Variant Dim intAnz As Integer Dim strSp As String varDatArr = Array("B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S") For intAnz = 0 To 17 strSp = varDatArr(intAnz) & "5:" & varDatArr(intAnz) & "28" ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add2 Key:=Range( _ strSp), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("Tabelle1").Sort .SetRange Range(strSp) .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Next intAnz End Sub
Allerdings hat es sich für mich nicht erschlossen, aus welchem Grund du die Spalten einzeln sortieren möchtest. Stelle doch bitte eine Beispieldatei mit dem händisch eingetragenen Wunschergebnis ein. Ich bin (fast) sicher, dass es einen einfacheren Weg gibt.
Viele Grüße Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
Sub Spalten_sortieren() Dim varDatArr As Variant Dim intAnz As Integer Dim strSp As String For intAnz = 66 To 83 strSp = Chr(intAnz) & "5:" & Chr(intAnz) & "28" ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add2 Key:=Range( _ strSp), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("Tabelle1").Sort .SetRange Range(strSp) .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Next intAnz End Sub
Viele Grüße Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
08.05.2022, 05:42 (Dieser Beitrag wurde zuletzt bearbeitet: 08.05.2022, 05:42 von Astrophytum.)
Hallo,
danke für eure zahlreichen Antworten und Hilfe!
Ja, ich weiß, es immer schwierig sich in so ein Beschreibung hinein zu versetzen.
Anbei die Beispiel.xlsx, um mein Anliegen zu verdeutlichen.
• Jede Spalte hat eine Überschrift, hier eben "Spalte X", hellgrau hinterlegt.
• In der letzten Zeile ist eine Summe der Beträge in der Spalte, hellgrau hinterlegt.
• Nicht jede Spalte hat die gleiche Anzahl an ausgefüllten Zeilen, mache Spalten können auch leer sein.
Ziel soll sein, die Werte jeder der Spalten, ab eine Zeile unterhalb der Spaltenüberschrift, bis zur Summe am Ende, der Größe nach aufsteigend zu sortieren.
Die Sortierung soll nicht direkt während/nach der Eingabe geschehen, sondern nur per Makro, welches per Button angesprochen wird. Wie das geht ist klar.