Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
968to972
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
968to972
968to972
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Vokabeln spaltenübergreifend sortieren

Vokabeln spaltenübergreifend sortieren
Werner
Hallo, Freunde:
Habe mir kürzlich den Kopf über folgende Frage zerbrochen:
Angenommen, es existiert eine ungeordnete Liste mit Vokabeln in den Spalten A bis J (d.h. Spaltennummern 1 bis 10) einer Tabelle, jeweils in Zeile 2 beginnend (Zeile 1 ist Überschriftenzeile). In jeder dieser Spalten stehen z.B. 50 Vokabeln. Jetzt möchte ich die Vokabeln in aufsteigender alphabetischer Reihenfolge so sortieren, dass der niedrigste Wert in Cells(2,1) und der höchste Wert in Cells(51, 10) steht, d.h. die Sortierung soll spaltenübergreifend erfolgen: in Cells(2, 2) steht dann der auf den Inhalt von Cells(51, 1) folgende nächsthöhere Wert, auf den Wert von Cells(51, 2) folgt als nächsthöherer Wert der Wert in Cells(2, 3) usw. D.h., immer wenn jeweils die Zeile 51 erreicht ist, wird zur Zeile 2 der nächsten Spalte gesprungen.
Warum diese Anordnung? Die Vokabeln lassen sich so übersichtlicher und papiersparender ausdrucken, als wenn sie alle in einer einzigen Spalte stünden.
Gibt es für dieses Problem, vielleicht schon irgendwo im Internet veröffentlicht, eine Sortiermethode?
Dank im voraus! Werner

AW: Vokabeln spaltenübergreifend sortieren
24.04.2008 07:51:00
Oberschlumpf
Moin Werner
Versuch es mal so:
1. Schreib mit VBA ALLE Vokabeln in EINE Spalte
2. Sortiere die Spalte nun
3. Ermittel die Anzahl aller Vokabeln und dividiere sie durch 10 (Anzahl deiner definierten Spalten)
4. Nun teile die Vokabeln gleichmäßig auf die 10 Spalten auf
Dein Problem sollte gelöst sein, oder?
Ciao
Thorsten

AW: Vokabeln spaltenübergreifend sortieren
Werner
Hallo Ciao Thorsten:
zugegeben, das ist eine durchaus brauchbareLösung, die sich auch über VBA realisieren lässt, z.B. nach folgendem Verfahren:
1. Vokabeln in einer Spalte eingeben.
2. Mit VBA sortieren lassen (unter Zuhilfenahme des Makrorecorders).
3. Vokabeln durch Zuweisung an die entsprechenden Zellen verschieben oder kopieren.
4. Vokabeln, die aus der ersten Spalte verschoben wurden, dort löschen.
Am besten schreibt man die Vokabeln vor der Sortierung in Worksheet1 und dann die sortierten Vokabeln
auf die von dir beschriebene Weise in Worksheet2. Danach kann man den Inhalt des gesamten Worksheet1 löschen oder auch beibehalten, falls man nachträglich noch weitere Vokabeln hinzufügen will.
Dank für den Vorschlag! Werner

Anzeige
AW: Vokabeln spaltenübergreifend sortieren
24.04.2008 08:07:00
Erich
Hi Werner,
probiers mal damit:

Option Explicit
Sub Sort_50_10()
Dim varA, varB(1 To 500) As String, ss As Long, zz As Long, arrK
varA = Range(Cells(2, 1), Cells(51, 10)).Value
For ss = 1 To 10
For zz = 1 To 50
varB(zz + 50 * (ss - 1)) = varA(zz, ss)
Next zz
Next ss
Call QuickSortStr(varB(), 1, 500)
For ss = 1 To 10
For zz = 1 To 50
varA(zz, ss) = varB(zz + 50 * (ss - 1))
Next zz
Next ss
Range(Cells(2, 1), Cells(51, 10)) = varA
End Sub
Private Sub QuickSortStr(ByRef mA() As String, _
ByVal LL As Long, ByVal UU As Long)
Dim ii As Long, jj As Long, M As String, Tmp As String
If UU  M:     jj = jj - 1:     Loop
If ii  jj
If LL 

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Vokabeln spaltenübergreifend sortieren
Werner
Hallo Erich,
Dank für den Codevorschlag. Ich habe es mal mit deinem Code ausprobiert: Er sortiert die Vokabeln zwar teilweise wie gewünscht, von Zelle "A2" bis Zelle "C6" aufsteigend alphabetisch, doch ab Zelle "C7" beginnt die Sortierung ein zweites Mal bei "a" und von da an wieder aufsteigend in alphabetischer Reihenfolge.
Wenn ich die Frage noch als offen markiert habe, dann nur in Bezug auf diesen Code, das andere
Verfahren ist ja geklärt.
Werner

AW: Vokabeln spaltenübergreifend sortieren
24.04.2008 09:01:00
Erich
Hi Werner,
das kann ich nicht so recht nachvollziehen. Probier mal:
https://www.herber.de/bbs/user/51818.xls
Was ist bei deiner Tabelle anders?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Vokabeln spaltenübergreifend sortieren
24.04.2008 09:08:34
Renee
Hi Werner,
Die Sortierung dürfte etwas mit deiner Installation/Ländereinstellungen/Sortierung etc. zu tun haben.
Siehe auch hier: https://www.herber.de/forum/messages/971789.html
Kannst du uns mal sagen, was für eine Windows/Office/Excel Version, Release, Sprache, Ländereinstellung du hast.
GreetZ Renée

AW: Vokabeln spaltenübergreifend sortieren
24.04.2008 09:17:00
Erich
Hi Renée und Werner,
die Routine sortiert Kleinbuchstaben hinter Großbuchstaben, "a" kommt nach "Z".
Das stört hier vermutlich. (Werner hat allerdings nicht angegeben, wie sortiert werden soll.)
Hier eine Alternative, die Klein- wie Großbuchstaben sortiert:

Option Explicit
Sub SortU_50_10()
Dim varA, varB(1 To 500, 1 To 2), ss As Long, zz As Long
varA = Range(Cells(2, 1), Cells(51, 10)).Value
For ss = 1 To 10
For zz = 1 To 50
varB(zz + 50 * (ss - 1), 1) = varA(zz, ss)
varB(zz + 50 * (ss - 1), 2) = UCase(varA(zz, ss))
Next zz
Next ss
prcSort Array(2), varB()
For ss = 1 To 10
For zz = 1 To 50
varA(zz, ss) = varB(zz + 50 * (ss - 1), 1)
Next zz
Next ss
Range(Cells(2, 1), Cells(51, 10)) = varA
End Sub
'                                    www.online-excel.de/excel/singsel_vba.php?f=97
'                                    Code Max Kaffl (Nepumuk) 2005
'Quicksort mit mehreren Sortierkriterien
'  Parameter:  arrK = Sortkeys (Spaltennummern)
'              arrD = zu sortierendes Array
'Der Sortierschlüssel ist ein Array mit minimal einem Eintrag,
'  Der erste Eintrag gibt die Spalte mit dem obersten Sortierkriterium an.
'  Ist die Zahl positiv, wird aufsteigend, sonst absteigend sortiert.
Private Sub prcSort(arrK As Variant, arrD() As Variant)
Dim iiK As Integer, nnB As Long, nnC As Long, nArrZ() As Long
Dim nnZ As Long, nnA As Long, vntTemp As Variant
ReDim nArrZ(0 To 1, 0 To UBound(arrD) * 2)
nArrZ(0, 0) = LBound(arrD)                ' Array für den 1. Sortierlauf
nArrZ(0, 1) = UBound(arrD)
nnZ = 1
For iiK = LBound(arrK) To UBound(arrK)
If arrK(iiK)  0 Then                 ' Wenn eine Spalte angegeben
nnA = -1
For nnB = 0 To nnZ Step 2           ' Schleife zum sortieren der Bereiche
If nArrZ(0, nnB)  nArrZ(0, nnB + 1) Then   ' Sortieren, wenn Zeilenzahl größer 1
Call prcQSort(CLng(nArrZ(0, nnB)), _
CLng(nArrZ(0, nnB + 1)), CInt(Abs(arrK(iiK))), _
CBool(arrK(iiK) > 0), arrD())
nnA = nnA + 2                       ' sortierten Bereich merken
nArrZ(1, nnA - 1) = nArrZ(0, nnB)
nArrZ(1, nnA) = nArrZ(0, nnB + 1)
End If
Next
nnZ = -1
For nnB = 0 To nnA Step 2  'Durchsuchen der eben sortierten Spalte nach Wertewechsel
vntTemp = arrD(nArrZ(1, nnB), Abs(arrK(iiK))) '1. Zeile des zu sort. Bereichs
nnZ = nnZ + 1
nArrZ(0, nnZ) = nArrZ(1, nnB)
For nnC = nArrZ(1, nnB) To nArrZ(1, nnB + 1)  ' Suche nach Wechsel im Bereich
If vntTemp  arrD(nnC, Abs(arrK(iiK))) Then
nnZ = nnZ + 2
nArrZ(0, nnZ - 1) = nnC - 1
nArrZ(0, nnZ) = nnC
vntTemp = arrD(nnC, Abs(arrK(iiK)))
End If
Next
nnZ = nnZ + 1                                 ' letzte Zeile im Bereich
nArrZ(0, nnZ) = nArrZ(1, nnB + 1)
Next nnB
End If
Next iiK
End Sub
Private Sub prcQSort(lngLB As Long, lngUB As Long, iiZ As Integer, bAufAb As Boolean, arrD())
Dim iiK As Integer, nnB As Long, nnC As Long, vntTemp As Variant, vntBuffer As Variant
nnB = lngLB
nnC = lngUB
vntBuffer = arrD((lngLB + lngUB) \ 2, iiZ)
Do
If bAufAb Then
Do While arrD(nnB, iiZ)  vntBuffer: nnB = nnB + 1: Loop
Do While vntBuffer > arrD(nnC, iiZ): nnC = nnC - 1: Loop
End If
If nnB  arrD(nnC, iiZ) Then
For iiK = LBound(arrD, 2) To UBound(arrD, 2)
vntTemp = arrD(nnB, iiK)
arrD(nnB, iiK) = arrD(nnC, iiK)
arrD(nnC, iiK) = vntTemp
Next
End If
nnB = nnB + 1
nnC = nnC - 1
ElseIf nnB = nnC Then
nnB = nnB + 1
nnC = nnC - 1
End If
Loop Until nnB > nnC
If lngLB 

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Vokabeln spaltenübergreifend sortieren
Werner
Hallo Erich,
stimmt, also ist der von dir beim ersten Mal bereitgestellte Code für deine Form der Sortierung richtig!
Dein zweiter Code (und auch der erste, wenn man weiß, was er macht) ist wunderbar! Ohne die Vokabeln umstellen zu müssen, sortiert er sie alle genau. Man braucht ihn nur einfach anzupassen, wenn sich entweder die Spaltenzahl oder die Anzahl der Einträge pro Spalte ändert.
Ich wundere mich immer wieder, woher ihr so komplizierten Code in so kurzer Zeit hernehmt. Meine Frage ist wirklich vollauf beantwortet. Vielen herzlichen Dank! Wörter sortieren muss ich immer mal wieder, der Code erspart einige Arbeit. Werner

Anzeige
AW: Vokabeln spaltenübergreifend sortieren
24.04.2008 10:19:00
Renee
Hi Werner,
...woher ihr so komplizierten Code in so kurzer Zeit hernehmt?
Steht im Copyright-Kommentar des Codes!
GreetZ Renée

AW: Vokabeln spaltenübergreifend sortieren
Werner
Hallo,
stimmt, das Rad ist ja erfunden und braucht nicht noch einmal erfunden zu werden.
Trotzdem nett, dass man den Code erfährt, gleich wer ihn geschrieben hat.
Ich gehe davon aus, dass man den in diesem Forum mitgeteilten Code für private Zwecke verwenden
und ggf., natürlich unter Nennung des Autors, auch anderen mitteilen darf. Werner

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige