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

Sortieralg. funktioniert nicht

Sortieralg. funktioniert nicht
11.11.2022 07:49:06
Shouchen
Hallo allerseits,
ich stehe gerade vor einem Problem, was sich mir nicht ganz erklärt:
Ich habe ein Array als Varriant, welches zum Beispiel die Zahlenfolge:
4 4 1 1
enthält.
Dieses wollte ich gerne umsortieren lassen zu:
1 1 4 4
Also alle Zahlen, in eine aufsteigende Reihenfolge setzen. Ich weiß, ich könnte die Zahlen auf ein Tabellenblatt ziehen, Sie dort sortieren und wieder einlesen. Doch wollte ich es gerne rein im Code lösen. Problem ist, der Code fügt für die erste Stelle immer ein Leerzeichen ein und drängt die letzte Stelle raus, daher in dem Beispiel würde daraus:
" " 1 1 4
werden.

Function SortArray(ByRef strArray As Variant) As Variant()
'sortieren von String Array
'eindimensionale Array
'rekursiver Aufruf
Dim tmpArray()  As Variant
Dim i           As Long
tmpArray = strArray
For i = LBound(tmpArray) To (UBound(tmpArray) - 1)
If LCase(strArray(i)) > LCase(strArray(i + 1)) Then
tmpArray(i) = strArray(i + 1)
tmpArray(i + 1) = strArray(i)
strArray = tmpArray
'rekursiver Aufruf
tmpArray = SortArray(strArray)
End If
Next i
SortArray = tmpArray
End Function
Ja, ich habe den Code auch nur billig ergoogled, weil mir das Verständnis bisher fehlt.
Ich habe versucht ihn nachzuvollziehen und zu "reparieren", doch war ich bisher zu dumm dafür.
Ich wäre dankbar wenn mir jemand sagen könnte, warum das nicht funktioniert und wie es funktionieren könnte.
Mit freundlichen Grüßen
Shouchen

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sortieralg. funktioniert nicht
11.11.2022 09:18:45
Rudi
Hallo,
dir fehlt noch ein 'Zwischenspeicher'.

Function SortArray(ByRef strArray As Variant) As Variant()
'sortieren von String Array
'eindimensionale Array
'rekursiver Aufruf
Dim tmpArray()  As Variant
Dim tmp
Dim i           As Long
tmpArray = strArray
For i = LBound(tmpArray) To (UBound(tmpArray) - 1)
If LCase(strArray(i)) > LCase(strArray(i + 1)) Then
tmp = tmpArray(i)
tmpArray(i) = strArray(i + 1)
tmpArray(i + 1) = tmp
strArray = tmpArray
'rekursiver Aufruf
tmpArray = SortArray(strArray)
End If
Next i
SortArray = tmpArray
End Function
Gruß
Rudi
Anzeige
AW: Sortieralg. funktioniert nicht
11.11.2022 11:53:19
Shouchen
Ich will an dieser Stelle, beiden Antwortern meinen großen Dank aussprechen!
Ich übe mich gerade im programmieren und alleine schon berichtigten Code dann nachvollziehen zu können, hilft mir immens!
Beste Grüße
Shouchen
AW: Sortieralg. funktioniert nicht
11.11.2022 10:44:39
snb
Besser als Excel geht nicht:

Sub M_snb()
sn=array(1,4,1,4)
cells(1,200).resize(ubound(sn)+1)=application.transpose(sn)
cells(1,200).currentregion.sort cells(1,200),1
sn= cells(1,200).currentregion
cells(1,200).currentregion.clear
msgbox join(application.transpose(sn),vblf)
end sub
second best:

Sub M_snb)
sn=array(1,4,1,4)
With CreateObject("System.Collections.ArrayList")
For Each cl In sn
.Add cl
Next
.Sort
sn = .toarray
End with
msgbox join(sn,vblf)
End Sub

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige