excel: verknüpfte zellen sortieren

2 Antworten

Dafür könnte ich Dir ein Makro schreiben, aber nur, wenn Du wirklich Interesse daran hast, das ist vermutlich <1h Arbeit, bis es funktioniert.
Schreib, nach welcher Spalte das sortiert werden soll und ob Du das Ergebnis in derselben Tabelle haben willst. Wenn nicht, schreib die Namen des gegenwärtigen und des Neuen Blattes hier auf, sowie wieviele Zeilen das ungefähr betrifft (sind Leerzeilen dazwischen?:das beeinflusst die verwendbaren Befehle), ob es ein zweites Sortierkriterium gibt (auch Zahl oder Text?). Prinzip: Das Makro würde sukzessive Zeilen ausschneiden und an der richtigen Stelle wiedereinfügen, da bleiben dann alle Bezüge erhalten. Sollen die niedrigsten oder die höchsten Zahlen oben stehen? (kein Schwierigkeitsunterschied)

das Thema hat mich nicht losgelassen und ich hab das Makro dann doch noch fertiggestellt. Du mußt eben den Sortierbereich anpassen und aufpassen, dass die erste Zelle des zu extrahierenden Bereichs leer ist (sonst wird der Bereichsanfang mit reinsortiert und eine Endlosschleife kreiert. Würdest Du im Debug.print -Ergebnis sehen

Sub OrdnenMaxUnten() 'soll Bereiche ordnen unter Aufrechterhaltung der Bezüge 'tutet!

'für www.gutefrage.net/frage/excel-verknuepfte-zellen-sortieren

Dim Maxbereich As Range, MaxWert, MaxZell

Set Maxbereich = Worksheets("KW").Range("A29:A40") '<=der Bereich taucht aber nicht bei den Namen auf, ansch. nur temporär!

'die erste Zelle darf nicht in die Sortierung miteinbezogen werden, sonst erweitert sich der Bereich! Leer lassen!

Do

On Error GoTo 0 'hebt On Error Resume Next wieder auf schickt xl bei Fehler ins Nirwana = FEHLER mit unspezifischer Meldung

MaxWert = Application.Worksheetfunction.Max(Maxbereich) 'beachte Funktionsrückgabe MaxWert = !!! (wie bei input-box!

MaxZell = Application.Worksheetfunction.Match(MaxWert, Maxbereich, 0) 'Match = Fkt. Vergleich, Max=7, ist in 4.Zelle Maxbereich MsgBox MaxZell nur zur Info

  Range("A" & Maxbereich.Row + MaxZell - 1).EntireRow.Select    


     Selection.Cut  

  ActiveSheet.Rows("2:2").EntireRow.Select  

     Selection.Insert Shift:=xlDown  'das Shift:=xlDown führt z.Löschung d.Zeile (2 Befehle vorher! u.z.Schaffung e.neuen am Einsetz-Ort)  

        Debug.Print Maxbereich.Address 'nach einmaligem Durchlauf $A$31:$A$40 also von unten her eine Zeile verkleinert! Dient bei Fehlern zur Ablauf-Kontrolle, stört ansonsten nicht.   

On Error Resume Next 'wenn in der folgenden Zeile keine gefüllte Zelle mehr gefunden wird, muss ein Fehler samt Meldung unterdrückt werden.

Loop Until Maxbereich.SpecialCells(xlCellTypeConstants).Count = 0

End Sub 'geht ohne Änderung auch mit Min(..), auch mit leeren Zellen dazwischen (die werden stehengelassen, kommen nicht in die neue Liste)

0
@Iamiam

warum Teile des Codes im Codefenster erscheinen, andere nicht, bleibt das Geheimnis von GF und seinen Editor-Programmierern! Warum sollte man etwas durchsichtig gestalten, wenn man ausreichend User hat?

0

weißt du beim erstellen deiner Tablle welche Zellen denselben Inhalt haben? Also welche Zellen verknüfpt werden? Wenn ja hätte ich eine Idee.

Gruß Mokinid

Gut habe es nun auch mit einem Makro gemacht, wohl auch etwas anders als Lamiam. Beim Makro handelt es sich um ein sehr einfaches Kopiermakro. Das heißt, es kopiert deine "verknüpften Zellen" anstatt sie zu verknüpfen. Dies hat den großen Vorteil, dass du anschließend ganz einfach sortieren kannst wie gewohnt.

Dies sollte wohl was schneller gehen, als ein Makro fürs Sortieren zu machen oder?

0
@Mokinid

schneller ja, aber darauf kommts ja nicht an.
Beim Kopieren/Wiedereinfügen ändern sich die verknüpften Zelladressen, deshalb ausschneiden.

Ausserdem kannst Du beim Ausschneiden (in der Reihenfolge immer Min() oder Max()) die schon bearbeiteten gleich entfernen und dann sofort sortiert einfügen.
Beim nachträglichen Sortieren, werden (wurden?) Bezüge ja nicht mitsortiert! Gruß iamiam (nicht Lamian)

0
@Iamiam

Da hast du recht Iamiam. Man lernt nie aus und solche Tipps sind Gold wert. Danke

0
@Iamiam

@Mokinid:
Konzept: größten Wert der Liste suchen Zeile auswählen, ausschneiden (...entirerow.cut) o'halb Zeile 2 einfügen -Zeile 1 sei f.Ü'schriften- (Range("A2").entirerow.insert)
im Restfeld nach dem nächsten größten Wert suchen Schleife zurück

Brauchst Du natürlich Adressvariable für die Bereichsadressierung fürs finden bzw Max()
(For Each-Schleife dauert wirklich zu lange, wenns nicht nur ein paar zig sind),
Stopp-Option, ggf Zweitkriterium zur Nachbearbeitung
aber kein Hexenwerk.

Kannst mir aber gerne die Programmierarbeit abnehmen! (sofern noch Interesse bei neca86)

0
@Iamiam

hab mich an dem Problem jetzt doch festgebissen (weil der Umgang mit Worksheetfunction für mich neu ist) und schon mal Vorarbeit geleistet (TestlisteA30ff:5,4,2,7,1,6,3), die ich Euch zur Verfügung stelle:

@Mokinid: kannst das gerne verwenden, wenn Du üben willst, ich mach ohne Anforderung nichts weiter!

Sub Maxfinden() 'soll Bereiche ordnen unter Aufrechterhaltung der Bezüge 'funktionieret einzeln: 'Jetzt noch Schleife +Definitionen dafür einrichten!

Dim Maxbereich As Range, answer, MaxZell

Set Maxbereich = Worksheets("KW").Range("A30:A40")

'Schleifenanfang

answer = Application.WorksheetFunction.Max(Maxbereich)  'beachte Funktionsrückgabe answer = !!! (wie bei input-box!  

MaxZell = Application.WorksheetFunction.Match(answer, Maxbereich, 0)  'Match = Fkt. Vergleich, Max=7, ist in 4.Zelle Maxbereich    

MsgBox MaxZell

Range("A" & Maxbereich.Row + MaxZell - 1).EntireRow.Cut Destination:=Range("22:22") 'Hinterlässt Lücke!

Range("A" & Maxbereich.Row + MaxZell - 1).EntireRow.Delete 'Lücke wird entfernt

Range("22:22").EntireRow.Insert 'neue Zeile 22 wird bereitgestellt ginge beides auch in Einem?

Debug.Print Maxbereich.Address 'nach einmaligem Durchlauf $A$31:$A$40 also von unten her eine Zeile verkleinert!

'nach Bedingung: Schleifenende

End Sub

0
@Iamiam

wow, ihr zwei wart ja richtig wild lach hmmm, also wenn das wirklich so viel programmierarbeit ist, ist wirklich fraglich, ob das den aufwand rechtfertigt... dachte einfach, dass es schon nervig ist, dass man die aktualisierungen bei sowas dann letztlich doch selber machen muss, wenn man danach noch ne sortierte liste haben will, aber ein komplettes makro ist für den verwendungszweck schon überdimensioniert, grade, wenn man es nicht mal eben runtertippen kann...

über festgestellte ($) bereiche kann man da nicht arbeiten, oder?

0
@neca86

nein, über $-Bereiche nicht. Ansonsten siehe meine Antwort

0

Was möchtest Du wissen?