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

Code bitte vereinfachen

Code bitte vereinfachen
02.09.2015 08:42:58
Frank
Hallo Zusammen!
Ich bastle an Fußballtabellen! Einfach weil ich Excel besser verstehen und besser kennen lernen möchte!
Ich habe mal eine Seite aus meiner Datei rauskopiert und werde sie hochladen.
Ich möchte dass wenn ich auf den CommandButton drücke, jeder einzelne Spieltag sortiert wird. Im Button habe ich zwei Sortierbefehle hinterlegt, diese müsste ich aber 38 x schreiben, geht das nicht auch mit einer For Schleife und somit wesentlich kürzer?
Für jede Hilfe dankbar!
Hier die Tabelle, sehr abgespeckt. Ich hoffe es ist ersichtlich was ich will.
https://www.herber.de/bbs/user/99962.xlsm
Gruß Frank H.

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code bitte vereinfachen
02.09.2015 09:33:00
Matthias
Hallo Frank,
da deine Bereiche sich in regelmäßigen Abständen wiederholen, lässt sich die Zeile durch eine berechnete Variable mit der Schrittweite 21 ausführen. Die Schrittweite wird dabei mit dem Schleifenzähler multipliziert:
Private Sub CommandButton1_Click()
Dim Zeile As Long, Schrittweite As Long
Dim rKey1 As Range, rKey2 As Range, rKey3 As Range
For x = 0 To 31
Schrittweite = 21
Zeile = x * Schrittweite
Range("E" & 1 + Zeile & ":AC" & 21 + Zeile).Select
rKey1 = Range("L" & 2 + Zeile)
rKey2 = Range("O" & 2 + Zeile)
rKey3 = Range("M" & 2 + Zeile)
Calculate
Selection.Sort Key1:=rKey1, Order1:=xlDescending, Key2:= _
rKey2, Order2:=xlDescending, Key3:=rKey3, Order3 _
:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom
Next x
Calculate
Range("D2").Select
End Sub

Falls du aber ein Dokument hast, in dem die Bereiche nicht in gleichen Abständen vorliegen, kann man auch wie folgt vorgehen:
Private Sub CommandButton1_Click()
Dim rKey1 As Range, rKey2 As Range, rKey3 As Range
For x = 1 To 32
Select Case x
Case 1
Range("E1:AC21").Select
rKey1 = Range("L2")
rKey2 = Range("O2")
rKey3 = Range("M2")
Case 2
Range("E22:AC42").Select
rKey1 = Range("L23")
rKey2 = Range("O23")
'Case 3
End Select
Calculate
Selection.Sort Key1:=rKey1, Order1:=xlDescending, Key2:= _
rKey2, Order2:=xlDescending, Key3:=rKey3, Order3 _
:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom
Next x
Calculate
Range("D2").Select
End Sub
Dabei kannst du jeden Bereich einzeln definieren.
Eine Frage, warum muss denn das "Calculate" bei dir immer mit drinn sein? Solange die Berechnungsoptionen deiner Mappe auf automatisch stehen, ist das mMn unnötig.
lg Matthias

Anzeige
AW: Code bitte vereinfachen
02.09.2015 09:49:12
Rudi
Hallo,
Private Sub CommandButton1_Click()
Dim i As Integer
i = 1
Do While Cells(i, 1)  ""
Cells(i, 1).Resize(21, 26).Sort _
Key1:=Cells(i + 1, 9), Order1:=xlDescending, _
Key2:=Cells(i + 1, 15), Order2:=xlDescending, _
Key3:=Cells(i + 1, 13), Order3:=xlDescending, _
Header:=xlYes
i = i + 21
Loop
End Sub

Ich würde allerdings zwischen den einzelnen Tabellen eine Leerzeile einfügen. Dann i=i+22
Gruß
Rudi

AW: Code bitte vereinfachen
02.09.2015 10:06:12
Frank
Hallo Rudi!
Dein Code macht bei mir gar nichts! Was mache ich falsch oder was fehlt?
Danke!
Gruß Frank H.

Anzeige
AW: Code bitte vereinfachen
02.09.2015 10:01:54
Frank
Hallo Matthias!
Recht herzlichen Dank! Leider funzt es nicht!
Es kommt die Fehlermeldung: Objektvariable oder With-Blockvariable nicht festgelegt und die Zeile:
rKey1 = Range("L" & 2 + Zeile) wird gelb hinterlegt!
Was läuft da noch schief. Wäre schön wenn du noch einmal schauen kannst. Danke!
Gruß Frank H.

AW: Code bitte vereinfachen
02.09.2015 10:25:57
Matthias
Ahh ein Fehler meinerseits. Hätte mir auffallen müssen wenn ich es getestet hätte. Range-Objekte müssen Werte immer mit "Set" zugewiesen werden.
Set rKey1 = Range("L" & 2 + Zeile)
usw.
lg Matthias

Anzeige
AW: Code bitte vereinfachen
02.09.2015 10:48:29
Frank
Hallo Matthias!
Besten Dank, funzt Super!
Gruß Frank H.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige