Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1604to1608
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

Daten im Array je Spalte zu sortieren

Daten im Array je Spalte zu sortieren
25.01.2018 21:02:38
Annika
Hallo zusammen,
ich suche schon etwas länger nach einer Lösung und bin bisher leider nicht fündig geworden. Ich schreibe Zufallszahlen in ein zweidimensionales Array und würde diese nun gerne je Spalte aufsteigend sortieren. Ich denke, dass ich mit den Bubble
-Sort oder Quick-Sort nicht weiter komme, da ich die Spalten ja isoliert von den anderen Spalten sortieren möchte.
Gibt es eine einfache Möglichkeit die Sortierung umzusetzen ohne die Daten zwischenzeitlich in die Arbeitsdatei zu schreiben und zu sortieren und wieder einzulesen?
Vielen Dank und Grüße
Annika
Sub Test ()
Dim Zufallszahl_standnorm(1 To 10000, 1 To 10)
For j = 1 To 10000
For i = 1 To 10
Zufallszahl_standnorm(j, i) = Application.WorksheetFunction.Norm_S_Inv(Rnd)
Next i
Next j
End Sub

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array sortieren
25.01.2018 21:32:26
Fennek
Hallo,
für diese Aufgabe ist VBA nicht besonders gut geeignet, aber
- Worksheetfunction.large(), bzw .Small()
- Arraylist mit sort (CreateObject("System.Collections.ArrayList"))
- SortedList (CreateObject("system.collections.sortedlist"))
mfg
AW: Array sortieren
25.01.2018 21:46:33
Annika
Hallo Fennek,
oh je ich hatte schon befürchtet, dass VBA nicht unbedingt geeignet ist.
Wie würdest du dein Vorgehen in den Code integrieren?
Danke und Grüße
AW: Daten im Array je Spalte zu sortieren
25.01.2018 21:37:02
Sepp
Hallo Annika,
vielleicht so.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Test()
Dim Zufallszahl_standnorm(1 To 10)
Dim varTemp(1 To 10000) As Variant
Dim i As Long, j As Long

Randomize

For i = 1 To 10
  For j = 1 To 10000
    varTemp(j) = Application.WorksheetFunction.Norm_S_Inv(Rnd)
  Next j
  Call QuickSort(varTemp)
  Zufallszahl_standnorm(i) = varTemp
Next i

Call Application.Transpose(Zufallszahl_standnorm)

MsgBox Zufallszahl_standnorm(5)(7375)
End Sub

Private Sub QuickSort(data() As Variant, Optional UG, Optional OG)
Dim P1 As Long, P2 As Long, T1 As Variant, T2 As Variant

UG = IIf(IsMissing(UG), LBound(data), UG)
OG = IIf(IsMissing(OG), UBound(data), OG)

P1 = UG
P2 = OG
T1 = data((P1 + P2) / 2)

Do
Do While (data(P1) < T1): P1 = P1 + 1: Loop
Do While (data(P2) > T1): P2 = P2 - 1: Loop
  If P1 <= P2 Then
    T2 = data(P1): data(P1) = data(P2): data(P2) = T2
    P1 = P1 + 1: P2 = P2 - 1
  End If
Loop Until (P1 > P2)

If UG < P2 Then QuickSort data, UG, P2
If P1 < OG Then QuickSort data, P1, OG

End Sub

Gruß Sepp

Anzeige
AW: Daten im Array je Spalte zu sortieren
25.01.2018 21:47:10
Annika
Hallo Sepp,
vielen Dank. Ich werde das gleich ausprobieren :)
Grüße
AW: Daten im Array je Spalte zu sortieren
25.01.2018 22:01:19
Daniel
Bliebe noch die Frage, warum du die Verwendung von Excelzelle ausschließen möchtest, wenn sich deine Aufgabe auf einfache und schnelle Weise lösen läßt?
im Prinzip reicht dieser Code, um dein Array mit spaltenweisen sortierten Zufallszahlen zu befüllen:
Dim Zufallszahl_standnorm
Dim Spalte As Range
With Cells(1, 1).Resize(10000, 10)
.Formula = "=NORM.S.INV(RAND())"
.Formula = .Value
For Each Spalte In .Columns
Spalte.Sort key1:=Spalte, order1:=xlAscending, Header:=xlNo
Next
Zufallszahl_standnorm = .Value
.Clear
End With
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige