Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1512to1516
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

Automatisches Ordnen nach Alphabet und Zahlen

Automatisches Ordnen nach Alphabet und Zahlen
22.09.2016 07:51:58
NLS
Guten Morgen,
ich würde gern automatisch den Inhalt der angehangenen Tabelle geordnet bekommen.
Die Tabelle wird per copy und paste gefüllt und anschließend weitergegeben an eine andere Abteilung, die den Inhalt möglichst geordnet ausdruckt und damit arbeiten wird.
welche Möglichkeiten gibt es da?
https://www.herber.de/bbs/user/108335.xlsx
DANKE

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Automatisches Ordnen nach Alphabet und Zahlen
22.09.2016 08:52:57
Michael
Hi,
die Frage ist nicht eindeutig: sollen die (im Beispiel leeren) zwei Spalten rechts neben den Werten mitsortiert werden?
Am Einfachsten wäre, die Daten in einer dreispaltigen Liste zu erfassen, mit range.sort zu sortieren und dann erst in diese mehrspaltige Form zu überführen.
Falls das aus irgendeinem Grund unhandlich sein sollte, ist es in VBA ein Klacks, eine dreispaltige Liste temporär zu erzeugen.
Schöne Grüße,
Michael
AW: Automatisches Ordnen nach Alphabet und Zahlen
22.09.2016 09:11:05
NLS
hallo,
die zwei leeren spalten können mit sortiert werden, können aber auch vernachlässigt werden, da diese keinen Inhalt haben.
die Inhalte der letzten Spalte stehen unter einer anderen Überschrift als die vorherigen Spalten.
Die Daten dürfen nicht gemischt werden...
wichtig wäre noch:
das auch in dem Fall richtig geordnet wird, wenn z.B. 0001, 0500, AK49, AK50
Also erst alle Zahlen, dann alle Buchstaben/Zahlen-Kombinationen und dann extra die unter der Spalte W auftauchenden Zahlen.
Anbei nochmal eine abgeänderte Datei

Die Datei https://www.herber.de/bbs/user/108337.xls wurde aus Datenschutzgründen gelöscht


Anzeige
AW: Automatisches Ordnen nach Alphabet und Zahlen
22.09.2016 10:11:29
NLS
hallo Michael, danke soweit erstmal...
muss ich irgendwas beachten wenn ich die Tabelle erweitern möchte?
bzw kann ich diese leer zur Verfügung stellen und ein anderer Nutzer schreibt nach belieben rein bzw kopiert rein...?
AW: Automatisches Ordnen nach Alphabet und Zahlen
22.09.2016 10:12:10
NLS
und wann löst das makro die Sortierung aus?
AW: Automatisches Ordnen nach Alphabet und Zahlen
22.09.2016 10:29:16
Michael
Hi,
Du kannst das Makro auf einen Button legen oder z.B. eine Tastenkombination definieren.
Bei einer Erweiterung der Tabelle müßte man anders vorgehen; wohin erweitern? Mehr Spalten mit "K"? Vielleicht auch mehrere mit "W"? Mehr Zeilen?
Wie gesagt: der vernünftigste Ansatz wäre, das alles in Listenform zu ERFASSEN und hinterher erst in die Quer-Ansicht zu überführen...
Anzeige
AW: Automatisches Ordnen nach Alphabet und Zahlen
22.09.2016 11:19:15
NLS
wie geht das mit listenform und Queransicht?
AW: Automatisches Ordnen nach Alphabet und Zahlen
22.09.2016 11:36:23
Michael
Naja, wenn ich mir's recht überlege... Vielleicht ist es doch einfacher, es dabei zu belassen.
Aber sag: WELCHE Erweiterungen sind denkbar? Die Frage ist noch unbeantwortet...
AW: Automatisches Ordnen nach Alphabet und Zahlen
22.09.2016 12:05:47
NLS
ich habe mich gerade nochmal mit der betreffenden Abteilung beraten,...
im Prinzip ist die Form der Tabelle immer so.
ich hätte es gern so gehabt das ich nicht auf die Zeilenzahl festgelegt bin sondern einfach so viele Zeilen wie nötig einfüge und ordnen kann.
wie erstelle ich am einfachsten so eine Schaltfläche zum sortieren auf Klick?
AW: Automatisches Ordnen nach Alphabet und Zahlen
22.09.2016 12:27:29
NLS
und kann man auch ohne das ein weiteres tabellenblatt erzeugt wird das makro ausführen? also auf dem originalblatt?
Anzeige
AW: Automatisches Ordnen nach Alphabet und Zahlen
22.09.2016 13:06:04
Michael
Also, an der Position und Anzahl der SPALTEN ändert sich dann nichts, ja?
Button mach ich Dir schnell rein, aber das kannste recherchieren: u.a. gibt es mittlerweile jede Menge Excel-Videos auf YouTube...
Es geht auch ohne ein weiteres Tabellenblatt, sofern "irgendwo" eine Spalte auf dem einen Blatt für diese Zwecke benutzt werden kann. Der Punkt ist, daß eine Sortierung in der Tabelle mit deutlich weniger Aufwand verbunden ist, als eine "reine" Makro-Sortierung - das sprengt im Moment meinen Zeitrahmen.
AW: Automatisches Ordnen nach Alphabet und Zahlen
22.09.2016 13:10:44
Rudi
Hallo,
teste mal:
Sub SortierMich()
Dim i As Long, j As Long, n As Long, c As Long, arr(), arrOut()
Dim lRows As Long, lColumns As Long
lColumns = Cells(1, Columns.Count).End(xlToLeft).Column '- 3 wenn letzte Spalte nicht
lRows = Cells(Rows.Count, 1).End(xlUp).Row
ReDim arr(1 To WorksheetFunction.CountA(ActiveSheet.Columns(1).Resize(, lColumns)))
For i = 1 To lColumns Step 3
For j = 1 To Cells(Rows.Count, i).End(xlUp).Row
n = n + 1
arr(n) = Cells(j, i)
Next
Next
QuickSort arr
ReDim arrOut(1 To lRows, 1 To lColumns)
n = 0
c = 1
For i = 1 To UBound(arr)
n = n + 1
arrOut(n, c) = arr(i)
If i Mod lRows = 0 Then
n = 0
c = c + 3
End If
Next
Cells(1, 1).Resize(lRows, lColumns) = arrOut
End Sub
Sub QuickSort(ByRef DasArray, Optional ErsteZeile, Optional LetzteZeile)
On Error Resume Next
Dim UnterGrenze As Long, OberGrenze As Long
Dim AktuellerWert, GemerkterWert As Variant
If IsMissing(ErsteZeile) Then
ErsteZeile = LBound(DasArray)
End If
If IsMissing(LetzteZeile) Then
LetzteZeile = UBound(DasArray)
End If
UnterGrenze = ErsteZeile
OberGrenze = LetzteZeile
AktuellerWert = DasArray((ErsteZeile + LetzteZeile) / 2)
Do While (UnterGrenze  AktuellerWert And OberGrenze > ErsteZeile)
OberGrenze = OberGrenze - 1
Loop
If (UnterGrenze  ErsteZeile) Then Call QuickSort(DasArray, ErsteZeile, OberGrenze)
If (UnterGrenze 
Gruß
Rudi
Anzeige
AW: Automatisches Ordnen nach Alphabet und Zahlen
22.09.2016 13:16:51
NLS
hallo Rudi,
FEHLER index außerhalb des gültigen bereichs
AW: Automatisches Ordnen nach Alphabet und Zahlen
22.09.2016 13:21:49
Rudi
Hallo,
mit deiner ersten Datei geht's.
Die zweite kann ich nicht runterladen. Was ist da anders?
Gruß
Rudi
AW: Automatisches Ordnen nach Alphabet und Zahlen
22.09.2016 13:33:35
NLS
habe es jetzt versucht mit der Datei1 ... funktioniert,...aber nicht ganz so wie es sein sollte
über den spalten sind Überschriften, die Zellen dürfen nur unter der jeweiligen Überschrift geordnet werden. Was unter K steht egal welche Spalte bleibt unter K, was unter W steht bleibt unter W stehen.
anbei nochmal die datei2
https://www.herber.de/bbs/user/108347.xls
Anzeige
AW: Automatisches Ordnen nach Alphabet und Zahlen
22.09.2016 13:20:55
Fennek
Hallo,
frage an die Experten, insbesondere Rudi:
Warum wird mit dem etwas umständlichen "Quicksort" gearbeitet, wenn es auch (in Windows) einfacher geht:

Sub arList()
Fen = Array("zwr", "bqp", "feh")
With CreateObject("system.collections.arraylist")
For i = 0 To UBound(Fen)
.Add Fen(i)
Next
.Sort
Debug.Print Join(.toarray(), "; "), .gethashcode
End With
End Sub
'auch With CreateObject("system.collections.sortedlist")
mfg
AW: Automatisches Ordnen nach Alphabet und Zahlen
22.09.2016 13:46:11
Rudi
Hallo,
pure Gewohnheit. Ein Griff in die Codesammlung und fertig.
Bist du sicher, dass "system.collections.arraylist" in allen WIN-Versionen funktioniert? Quicksort schon.
Gruß
Rudi
Anzeige
cool
22.09.2016 13:57:44
Michael
Hi Fennek,
hab's gleich mal getestet, und es tut brav.
Aber beim Test mit 20000 Spieldaten ...
Sub DatenErzeugen()
Dim a$(1 To 20000, 1 To 1)
Dim i&, k&, s$
Dim t0 As Single, t1 As Single
t0 = Timer
Randomize
For i = 1 To 20000
s = Chr(Int(Rnd() * 26 + 65))
For k = 1 To 5
s = s & Chr(Int(Rnd() * 26 + 65))
Next
a(i, 1) = s
Next
Range("A1").Resize(UBound(a)) = a
t1 = Timer
MsgBox "t1-t0: " & (t1 - t0) * 1000
End Sub
Sub Fennek()
Dim i&, z&, a, aa
Dim t0 As Single, t1 As Single
t0 = Timer
a = Range("A1:A20000")
aa = a
With CreateObject("system.collections.arraylist")
For i = 1 To UBound(a)
.Add a(i, 1)
Next
.Sort
'  Debug.Print Join(.toarray(), "; "), .gethashcode
a = .toarray
End With
For i = LBound(a) To UBound(a): aa(i + 1, 1) = a(i): Next
Range("A1:A20000") = aa
t1 = Timer
MsgBox "t1-t0: " & (t1 - t0) * 1000
End Sub
Sub CopySort()
Dim i&, z&, a, aa
Dim t0 As Single, t1 As Single
t0 = Timer
Range("A1:A20000").Copy Range("B1")
Range("B1:B20000").Sort Range("B1"), xlAscending, Header:=xlNo
Range("B1:B20000").Copy Range("A1")
t1 = Timer
MsgBox "t1-t0: " & (t1 - t0) * 1000
End Sub

...benötigt der untere Code etwa die Hälfte der Zeit. Die Crux ist, daß ich (bis auf Weiteres) davon ausgehe, daß .toarray ein eindimensionales Array ausspuckt, das man so nicht direkt zurückschreiben kann.
redim aa statt aa=a ist unverändert, transpose hab ich nicht getestet.
Schöne Grüße,
Michael
Anzeige
AW: cool
22.09.2016 14:41:21
Fennek
Hallo,
@Rudi: nach meinem (minimalen) Verständing nutzt diese Konstruktion .NET in einer der neueren Version
@Michael: .toArray kann direkt zurückgeschrieben werden, im Moment finde ich meinen Beispielcode nicht. versuche: cells(1,1).resize(.count) = application.transpose(.toArray)
AW: cool
23.09.2016 15:26:01
Michael
Hi Fennek,
Du meinst dann so:
Sub Fennek()
Dim i&, z&, a, aa
Dim t0 As Single, t1 As Single
t0 = Timer
a = Range("A1:A20000")
' ReDim aa(1 To 20000, 1 To 1)
With CreateObject("system.collections.arraylist")
For i = 1 To UBound(a)
.Add a(i, 1)
Next
.Sort
'  Debug.Print Join(.toarray(), "; "), .gethashcode
'  a = .toarray
Range("A1").Resize(.Count) = WorksheetFunction.Transpose(.toarray)
End With
'For i = LBound(a) To UBound(a): aa(i + 1, 1) = a(i): Next
'Range("A1:A20000") = aa
t1 = Timer
MsgBox "t1-t0: " & (t1 - t0) * 1000
End Sub

Funktioniert, ist aber noch anscheinend noch langsamer, als das Array "händisch" zu verschleifen.
Fasse das bitte nicht als Kritik auf: mir war die Möglichkeit nicht geläufig, also danke für die Erweiterung meines "Vokabulars".
Schöne Grüße,
Michael
Anzeige

117 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige