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

Selection sortieren

Selection sortieren
20.08.2018 11:44:00
Berni
Hallo Excelprofis,
ich habe mir ein kleines Makro geschrieben, bei dem diverse Zellen abgearbeitet und nacheinander ausgewertet werden. Ein teil deieser Zellen ist mit Namnesbezug bereits vorgewählt, ein anderer Teil wird einfach selektiert. Beides fasse ich mit Union zusammen.
Union(Range("Stufe_2"), Selection).Select
Wichtig istfür den Makroablauf , dass die Zellen von oben nach unten abgearbeitet werden. (z.B. A5; B6; A8; B8; A11; C12 ...)
Genau hier ist mein Problem: Excel arbeitet die Zellen genau in der Reihenfolge ab, wie sie selektiert wurden. (z.B. B8; A5; B3 ...)
Frage: gibt es eine Möglichkeit(Befehl), bevor ich in eine Schleife gehe, eine Sortierung durchzuführen?
For Each ze ...
Wie muss ich das eingeben?
M.f.G.
Berni

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nicht möglich, Select ist meist überflüssig! (owT)
20.08.2018 12:08:13
EtoPHG

AW: Nicht möglich, Select ist meist überflüssig! (owT)
20.08.2018 15:04:00
Berni
EtoPHG,
du sitz vor dem PC und entscheidest die Zellen A3; B2 und A1 sollen gelb werden.
Ich selektiere die 3 Zellen und klicke anschließen auf Zellfarbe gelb.
Wie sagst du es dem Programm?
Ich möchte euch nicht mit dem ganzen Programm Code langweilen.
Ganz weit gekürzt möchte ich von den mir für richtig erscheinenden Zellen (Select)einen Rechenablauf durchführen und die Zellen von oben nach unten durchnummerieren. Ein Kollege hat aber vielleicht vorher schon Zellen ausgewählt. die ich aber nicht vernachlässigen will. Deshalb sind diese Zellen bereits in einem Namensbezug gespeichert. Deshalb kommt Union ins Spiel. Beides zusammen wird wieder in einen Namesbezug gespeichert.
Gruß Berni
Anzeige
AW: nur mit tricksen
20.08.2018 13:04:24
Fennek
Hallo,
wenn dein Selbsteinschätzung "VBA gut" zutrifft, kannst du die selektierten Zellen in eine ArrayList übergeben, dort sortieren, bearbeiten und dann wieder zurück schreiben.
Je nach Vorkenntnis kann es auch besser sein, sich einen anderen Ansatz im Arbeitsblatt zu überlegen.
mfg
Definiere: Von oben nach unten, z.b. für
20.08.2018 13:13:18
EtoPHG
die Range("C4:C11,E8:E17"), Berni,
IMHO gibt es keine Begründung für eine solche Forderung, es sei denn du nennst einen wirklich trifftigen Grund! Das .Select ein mehr oder minder unnötiger Befehl in VBA ist, sollte bei deinem Level bekannt sein.
Gruess Hansueli
AW: Definiere: Von oben nach unten, z.b. für
20.08.2018 14:23:16
Berni
Hallo EtoPHG,
OK, VBA gut ist vielleicht etwas übertrieben, aber Anfänger bin ich auch nicht. Stellt sich auch die Frage, wann ist man gut. Muss man in einem Array selektierte Bezüge einlesen, sortieren und dann wieder auslesen können – dann bin ich blutiger Anfänger! (Ich habe noch nie eine Array benötigt).
Bekommt man hier erst Hilfe wenn man alles beherrscht?
Es mag auch sein, dass Select in vielen Fällen überflüssig ist, aber manchmal ist es einfach einfach.
Ich handle nach dem System KISS! (Keep it simple, stupid) Was in diesem Fall Prinzipiell auch funktioniert. Nur die Reihenfolge ist halt leider exakt wie die Reihenfolge wie sie selektiert wurde.
Von oben nach unten ist schlicht und ergreifend Zeilenweise von Zeile 1 - n und innerhalb der Zeile von A-Z. Das Positive Bsp. habe ich bereits genannt A5; B6; A8; B8; A11; C12 ...
Ach ja, da hätte ich wahrscheinlich schon das nächste Problem mit dem Array. Wenn ich sortiere bekomme ich doch bestimmt erst alle A- Spalten dann B –Spalten u.s.w. Das heißt ich muss nun auch noch alle Bezüge in Spalten und Zeilen zerlegen um die Reihenfolge richtig zu bekommen. Oder?
Gruß Berni
Anzeige
KISS heisst nicht "Keep it stupid, Simpel!"
20.08.2018 15:15:41
EtoPHG
Hallo Berni,
Also KISS ist für dich aufgezeichneter Code? oder was?
Du hast weder eine Begründung für die Forderung "Select beibehalten", noch für "Sortiert abarbeiten" geliefert.
Du hast nicht auf meine Frage geantwortet, aber vielleicht hat sie dich auf deine Schlussfrage gebracht. Ja DU musst dir im Klaren sein, wie die Abarbeitung erfolgen soll oben-nach-unten-links-nach-rechts, oder links-nach-rechts-oben-nach-unten oder diagonal!
und Nein. Man muss nicht alles verstehen bei VBA gut. Aber dazu gehören Grundlagen (kein Select, Sortieren, Array) denn darüber kann man sich mit XL-Hilfe und Forumsrecherche schnell schlau machen.
Gruess Hansueli
Anzeige
AW: KISS heisst nicht "Keep it stupid, Simpel!"
20.08.2018 16:13:06
Berni
Also ehrlich gesagt, weiß ich nicht was ich noch sagen soll. Ich finde ich habe die Frage schon längst beantwortet.
Über aufgezeichnetem Code bin ich schon darüer hinaus und dass VBA gut etwas übertrieben ist habe ich auch schon zugegeben.
Ich versuche es noch einmal:
Kollege »A« bearbeitet die Mappe und ist der Meinung dass die Zellen "A1; B5; A10" relevant sind. Was soll er anderes tun als diese Zellen zu selektieren. Nun startet er das Makro, die Zellen werden gelb, es wird etwas berechnet, die Zellen werden von oben nach unten durchnummeriert und die Zelladressen werden in einem Namen ("Stufe_1")gespeichert.
in der Zelle "A1" steht dann "Zelle 1 Blabla"
in der Zelle "B5" steht dann "Zelle 2 Blabla"
in der Zelle "A10" steht dann "Zelle 3 Blabla"
Nun kommt Kollege »B« und findet die Zelle "B3" auch noch relevant. Er selektiert diese Zelle und startet das Makro. ( ... For Each ze In Union(Range("Stufe_1"), Selection).Cells ...)
Nur ohne sortieren ist nun meine Berechnung und meine Zellennummerierung falsch, da die
Abarbeitung von Excel in der Reihenfolge der Eingabe abläuft.
Somit steht in der Zelle "B3" nicht "Zelle 2 Blabla" sondern "Zelle 4 Blabla" weil diese als letztes hinzugefügt wurde.
Abarbeiten soll in der Reihenfolge
von oben nach unten also Zeilenweise von Zeile 1 - n und innerhalb der Zeile von A-Z erfolgen. Das Positive Bsp. habe ich bereits mehrfach genannt » A5; B6; A8; B8; A11; C12 ... «
und was ausser selection soll ich in diesem Fall eingeben?
Gruß Berni
Anzeige
AW: KISS heisst nicht "Keep it stupid, Simpel!"
20.08.2018 17:14:33
Robert
Hallo Berni,
nachstehendes Makro sortiert die Zellbezüge der aktuell ausgewählten Zellen (Selection) in dem Array cl2 nach Zeilen- und Spalten-Nr. Ich bin mal davon ausgeganegen, dass es nicht mehr als 1000 Spalten werden. Zur Kontrolle werden die Zellbezüge am Schluß im Direktbereich ausgegeben.
Sub AuswahlSortieren()
Dim cl As Range, cl2(), i As Integer, j As Integer, vTemp(1)
For Each cl In Selection
'Zellbezüge einlesen
ReDim Preserve cl2(2, i)
cl2(0, i) = cl.Address
'Zum Sortieren die Zeilen-Nr. und 1/1000 der Spalten-Nr einlesen
cl2(1, i) = cl.Row + cl.Column / 1000
i = i + 1
Next cl
'Array nach Zeilen- und Spalten-Nr. sortieren
For j = UBound(cl2, 2) - 1 To LBound(cl2, 2) Step -1
' Alle links davon liegenden Zeichen auf richtige Sortierung
' der jeweiligen Nachfolger überprüfen:
For i = LBound(cl2, 2) To j
' Ist das aktuelle Element seinem Nachfolger gegenüber korrekt sortiert?
If cl2(1, i) > cl2(1, i + 1) Then
' Element und seinen Nachfolger vertauschen.
vTemp(0) = cl2(0, i)
vTemp(1) = cl2(1, i)
cl2(0, i) = cl2(0, i + 1)
cl2(1, i) = cl2(1, i + 1)
cl2(0, i + 1) = vTemp(0)
cl2(1, i + 1) = vTemp(1)
End If
Next i
Next j
'zur Kontrolle Ausgabe im Direktbereich
For i = 0 To UBound(cl2, 2)
Debug.Print cl2(0, i)
Next
End Sub
Gruß
Robert
Anzeige
AW: KISS heisst nicht "Keep it stupid, Simpel!"
20.08.2018 18:50:40
Berni
Hallo Robert,
DANKE
Jetzt habe ich erste Einblicke in eine virtuelle Tabelle und auch gesehen wie man sie sortiert.
Wahnsinnsaufwand. Das hätte ich nicht erwartet. Vor allem hätte ich nicht gedacht, dass man beim Sortieren in VBA bis herunter zu den Basics, jedes Element mit jedem vergleichen, muss.
M.f.G.
Berni

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige