Thema Datum  Von Nutzer Rating
Antwort
19.03.2009 20:15:23 sebas
NotSolved
21.03.2009 09:06:45 Holger
NotSolved
Rot Aw:Aw:KNIFFLIG! Matrix auf Gleichheit sortieren
22.03.2009 19:26:38 sebas
NotSolved
23.03.2009 16:38:14 Holger
NotSolved
24.03.2009 17:05:28 sebas
NotSolved
26.03.2009 11:54:34 Sebastian
NotSolved

Ansicht des Beitrags:
Von:
sebas
Datum:
22.03.2009 19:26:38
Views:
1034
Rating: Antwort:
  Ja
Thema:
Aw:Aw:KNIFFLIG! Matrix auf Gleichheit sortieren
Hallo Holger,

deine 2 Beispiele sind beide gleichwertig. Es kommt nur auf die Anzahl der Wertewechsel (vertikal) an.
Mal schauen ob ich die Spezifikation besser formulieren kann:

- Die Zeilen sollen gleich bleiben und nur in der Reihenfolge verändert/getauscht werden
- So wenig vertikale Wertewechsel wie möglich
- Die links liegenden Spalten haben höhere Priorität als die rechts liegenden Spalten
- Die Reihenfolge kann verändert werden, wenn in späteren Spalten Werte stehen, welche die Anzahl der Wertewechsel noch weiter minimieren

Somit würde dein drittes Beispiel optimiert so aussehen:
--> in der Dritten Spalte nun 3 statt 5 Wertewechsel
a b c c c
a c b b b
a a a a a
b a a c a
b c a d d
b b b b b


Bin nun (nach tagelangem Testen) auf keinen wirklich perfekten Algorithmus gekommen. Meistens klappts für die ersten Spalten, jedoch finde ich dann wieder eine Datenkonstellation bei der es nicht funktioniert. Womöglich ist die einzigste Möglichkeit (was jedoch die schlechteste, da langsamste wäre) alle möglichen Kombinationen auszuprobieren und bei jedem Durchgang die Anzahl der Wertewechsel zu berechnen, dabei immer die Konstellation der kleinsten Anzahl zu speichern und am Ende diese Kombi auszugeben.

Gruß Sebas


Holger schrieb am 21.03.2009 09:06:45:

Hallo sebas,
deine Spezifikation der Sortierreihenfolge ist unklar.
Was zeichnet
a a
a b
a c
b c
b b
b a
vor
a a
a b
a c
b c
b a
b b
aus?
Könnte die Reihenfolge dadurch noch verändert werden, weil in späteren Spalten Werte stehen, die Anzahl der Wertewechsel noch weiter minimieren, z.B.
a a a a a
a b c c c
a c b b b
b c a d d
b b b b b
b a a c a?
Gruß
Holger






sebas schrieb am 19.03.2009 20:15:23:

Hallo Profis,

habe in einer Excel Tabelle z.B. 10x10 Zellen mit Daten und möchte diese (zeilenweise) auf Gleichheit (NICHT nur alphabetisch!) sortieren. Zunächst soll nach Spalte A, dann nach B usw. sortiert werden, jedoch ohne dass die Zeile verändert wird und so, dass so wenig wie möglich Werte-Wechsel zwischen den Zeilen vorkommen.
Die "normale" Sortierfunktion von Excel oder anderer Ausführungen im Netz reicht hier leider nicht aus da folgender "Sortierfehler" auftritt (siehe Bsp)
Mit dem Code den ich bisher programmiert habe kann ich wie Excel auch sortieren, jedoch nach beliebiger Anzahl an Spalten. Jedoch soll das Programm verfeinert werden um so gleiche Elemente in der Matrix zusammen bringen. (Code am Ende)

Würde mich über jede Anregung freuen!!!!!

Gruß Sebas


Bsp: unsortiert

a c
a a
b b
b c
a b
b a

Bsp: nach Excel Sortierweise:

a a
a b
a c
b a
b b
b c


Bsp: nach Gleichheit sortieren
-> im Vergleich zu Excel-Weise ist hier Zeile 4 mit 6 vertauscht und somit sind die C's zusammen :)
a a
a b
a c
b c
b b
b a


CODE:

For x = erste_spalte To letzte_spalte
'Schleife über jedes Element im der Spalte(vom Erstem bis zum Voreltzten)
For y = erstesy To letztesy - 1
'Schleife über jedes folgende Element in der Spalte
For y2 = y + 1 To letztesy
'Untersuchen ob Elemente gleich sind
If tbl.Cells(y, x) = tbl.cells(y2, x) Then
'nur wenn scharf, soll Verschoben werden (Damit nicht Verschoben wird, wenn lauter gleiche Daten)
If scharf = True Then
'Abstand zwischen den zu betrachteten Elementen berechnen
abstand = y2 - y
'auswählen des momentan betrachteten Elementes
form_agregar.lb_ausw.ListIndex = y - 3
'Verschieben des momentan betrachteten Elementes bis es über dem gleichen Element steht
Do While abstand > 1
'Externe Funktion, welche Elemente tauscht
Call move_down
abstand = abstand - 1
Loop
' nach Verschieben nicht next sondern gleiche Poistion noch einmal
y = y - 1
scharf = False
Exit For
End If
Else
'Wenn keine gleichen Komponenten ->scharf stellen
scharf = True
End If
End If
Next y2
Next y
Next







Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
19.03.2009 20:15:23 sebas
NotSolved
21.03.2009 09:06:45 Holger
NotSolved
Rot Aw:Aw:KNIFFLIG! Matrix auf Gleichheit sortieren
22.03.2009 19:26:38 sebas
NotSolved
23.03.2009 16:38:14 Holger
NotSolved
24.03.2009 17:05:28 sebas
NotSolved
26.03.2009 11:54:34 Sebastian
NotSolved