Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1852to1856
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

Beide Richtungen Sortieren

Beide Richtungen Sortieren
29.10.2021 06:31:35
Oraculix
Hallo
Ich habe endlich eine Sortierfunktion gefunden wo ich per Doppelklick in die erste Zeile eine beliebige Spalte anklicke und danach von A-Z sortiert wird.
Frage:
Aber wie sortiere ich mit dem nächsten Doppelklick in die andere Reihenfolge Z-A?
Also ein Doppelklick für A-Z und der Nächste Doppelklick Z-A?
Danke
https://www.herber.de/bbs/user/148845.xls

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Dim Bereich1 As Range
Dim LSpalte As Integer
Dim LZeile As Long
Dim SelectHeadline As Variant
LSpalte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
LZeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
Set Bereich1 = Range(Cells(1, 1), Cells(1, LSpalte))
If Intersect(Target, Bereich1) Is Nothing Then
Exit Sub
Else: SelectHeadline = ActiveCell.Address(RowAbsolute:=False, columnAbsolute:=False)
Range(Cells(1, 1), Cells(LZeile, LSpalte)).Sort Key1:=Range(SelectHeadline), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End If
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
Range("B2").Select
End Sub
Gruß
Oraculix

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Beide Richtungen Sortieren
29.10.2021 06:44:05
ede
Guten Morgen,
dann mach dir eine Hilfsvariable, die du zur Laufzeit auswertest:

Dim my_sort As Boolean
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Dim Bereich1 As Range
Dim LSpalte As Integer
Dim LZeile As Long
Dim SelectHeadline As Variant
LSpalte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
LZeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
Set Bereich1 = Range(Cells(1, 1), Cells(1, LSpalte))
If Intersect(Target, Bereich1) Is Nothing Then
Exit Sub
Else
If my_sort Then
SelectHeadline = ActiveCell.Address(RowAbsolute:=False, columnAbsolute:=False)
Range(Cells(1, 1), Cells(LZeile, LSpalte)).sort Key1:=Range(SelectHeadline), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
my_sort = False
Else
SelectHeadline = ActiveCell.Address(RowAbsolute:=False, columnAbsolute:=False)
Range(Cells(1, 1), Cells(LZeile, LSpalte)).sort Key1:=Range(SelectHeadline), Order1:=xlDescending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
my_sort = True
End If
End If
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
Range("B2").Select
End Sub
gruss
ede
Anzeige
AW: Beide Richtungen Sortieren
29.10.2021 06:50:34
Hajo_Zi
Hallo Ede,
ich würde schreiben 16384 Variablen. Da der nächste Doppelklick in einer anderen Spalte sein könnte?
GrußformelHomepage
In diesem Forum bekomme nur selten eine Mailbenachrichtigung, weitere Antworten sind zufällig.
AW: Beide Richtungen Sortieren
29.10.2021 06:54:41
Oraculix
Danke für Deine rasche Antwort!
Was meinst du damit?
Meinst das es nicht funktioniert so wie ich mir das vorstelle?
Gruß
Oraculix
Anzeige
AW: Beide Richtungen Sortieren
29.10.2021 07:16:26
ede
Er meint es so, dass für jede Spalte ein Variable gebraucht wird, die sich merkt, ob für diese Spalte auf- oder absteigend sortiert wurde. Mein Beispiel interessiert die Spalte nicht, es wird unabhängig gewechselt, egal auf welche Spalte du doppelt klickst.
ede
AW: Beide Richtungen Sortieren
29.10.2021 06:51:35
Oraculix
Danke
Aber dann kann ich nicht mehr zurück sortieren von A-Z mit deiner Variante?
Gruß
Oraculix
AW: Beide Richtungen Sortieren
29.10.2021 07:05:02
Oraculix
Danke
meist Du ich soll beide VBA code untereinander schreiben oder wie?
weil ich bekomme mit Deinem Code nur von Z-A sortiert?
Gruß
Oraculix
Anzeige
AW: Beide Richtungen Sortieren
29.10.2021 07:09:11
ede
du solltest die Variable deklarieren:

Dim my_sort As Boolean
und danach die

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

vom Inhalt her ersetzen.
gruss
ede
Jetzt geht es Dank Deiner Genialen Beschreibung!!
29.10.2021 07:21:08
Oraculix
Danke für Deine Mühe zu solch Zeitiger Stunde mit einem Anfänger!
Jetzt geht es Dank Deiner Genialen Beschreibung!!
Gruß
Oraculix
AW: Jetzt geht es Dank Deiner Genialen Beschreibung!!
29.10.2021 08:12:30
Luschi
Hallop Excel-Fan's,
hier mal eine leicht gekürzte Variante vom User ede:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Dim Bereich1 As Range
Dim LSpalte As Integer
Dim LZeile As Long
Dim SelectHeadline As Variant
LSpalte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
LZeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
Set Bereich1 = Range(Cells(1, 1), Cells(1, LSpalte))
If Intersect(Target, Bereich1) Is Nothing Then
Exit Sub
Else
SelectHeadline = ActiveCell.Address(RowAbsolute:=False, ClumnAbsolute:=False)
Range(Cells(1, 1), Cells(LZeile, LSpalte)).Sort Key1:=Range(SelectHeadline), _
Order1:=IIf(my_sort, xlAscending, xlDescending), Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
my_sort = Not my_sort
End If
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
Range(SelectHeadline).Offset(1, 0).Select
End Sub
Gruß von Luschi
aus klein-Paris
Anzeige
es ist Freitag
29.10.2021 10:11:12
Yal
... und Freitag ist Klugscheissertag :-) (auf mich bezogen, selbstverständlich)
Hallo zusammen,
wenn es darum geht, noch schöner, kürzer und weil es Oraculix darum geht, neues zu entdecken:
(Alles nur Vorschlag. Ist eh meistens Geschmacksache. Ausser Exit Sub: Fehler)
_ Variablendeklaration unmittelbar nach der Sub/Function-Titel ist standard. Es ist eine VBA-Krankheit, "Dim" überall zu erlauben
_ es handelt sich um eine Ereignis-Procedure, also es kann nur eine ActiveSheet geben. "Me" verwenden oder weglassen.
_ Lieber Objekt-Variablen verwenden als Werte-Variablen
Version Wert-Variablen

Dim LSpalte As Integer
Dim LZeile As Long 'warum ein Long und ein Int?
LSpalte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
LZeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
Range(Cells(1, 1), Cells(LZeile, LSpalte)).Sort
Version Objekt-Variable

Dim LZelle As Range
Set LZelle = Me.UsedRange.SpecialCells(xlCellTypeLastCell)
Range(Cells(1, 1), LZelle).Sort
_ Ein Intersect kann mehr als 2 Argumente annehmen. Die Deklaration von Bereich1 ist überflüssig, weil zu nichts anderes verwendet

If Not Intersect(Target, Me.UsedRange, Me.Rows(1)) Is Nothing Then
_ SelectHeadline ist nicht anderes als Target

Target.Offset(1, 0).Select
_ der Exit Sub darf nicht sein: es werden Einstellungen vorgenommen, die IMMER zurückgenommen werden sollen:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim LZelle As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Set LZelle = Me.UsedRange.SpecialCells(xlCellTypeLastCell)
If Not Intersect(Target, Me.UsedRange, Me.Rows(1)) Is Nothing Then
Range(Cells(1, 1), LZelle).Sort _
Key1:=Range(SelectHeadline), _
Order1:=IIf(my_sort, xlAscending, xlDescending), _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
my_sort = Not my_sort
Target.Offset(1, 0).Select
End If
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Forum.KlugscheisserModus = False
An allen ein schönen Freitag und verlängerte Wochenende
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige