Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Sortieren eindimensionales Array

Sortieren eindimensionales Array
21.10.2021 21:52:58
SteffenS
Hallo Zusammen,
ich habe im Netz folgenden Code gefunden um ein eindimensionales Array zu sortieren.
Dieser funktioniert auch ganz gut und ohne Fehler, allerdings fehlt immer der letzte Eintrag im Array.
Was muss ich tun, damit alle Einträge vorhanden sind. Zusätzlich würde ich gern eine Option haben um auf- oder absteigend zu sortieren.
Es wäre Klasse, wenn ihr mir dabei helfen könntet.
'-------------------------------------------------------------------------------------------------------------------
'Sortierung eindimensionales Array - 21.10.2021 StS
'-------------------------------------------------------------------------------------------------------------------

Function SortArray(ByRef SortstrArray As Variant) As Variant()
Dim z As Long, i As Long
Dim strWert As Variant
For z = UBound(SortstrArray) - 1 To LBound(SortstrArray) Step -1
For i = LBound(SortstrArray) To z
If SortstrArray(i)  "" Then
If LCase(SortstrArray(i)) > LCase(SortstrArray(i + 1)) Then
strWert = SortstrArray(i)
SortstrArray(i) = SortstrArray(i + 1)
SortstrArray(i + 1) = strWert
End If
End If
Next i
Next z
'Werte einsetzen
SortArray = SortstrArray
End Function
Danke Euch schon mal
VG
Steffen
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sortieren eindimensionales Array
21.10.2021 22:15:37
Günther
… auch wenn es aus der Mode gekommen ist: Es zeugt nicht nur von gutem Stil sondern auch von Anstand, wenn eine Quelle (und nicht nur der relevante Inhalt) aufgezeigt wird. Der Ersteller des Codes hat es imho einfach verdient!
 
Gruß
Günther  |  mein Excel-Blog
Anzeige
BubbleSort ist Asbach
22.10.2021 08:37:02
RPP63
Moin!
Aus Deinem Link:

Leider gibt es keine vorgefertigte Funktion zum Sortieren von Array, zumindest nichts, was auch nur annähernd vernünftig funktioniert.
Daher muss man sich selbst mit eigenen Funktionen helfen.
Das stimmt so schlicht und ergreifend nicht mehr!
Steppe mal mit F8 durch mein Makro und schaue Dir crr im Lokalfenster an:

Sub Sort365()
Dim arr, brr, crr
arr = Split("f a t x k w")
brr = WorksheetFunction.Sort(Application.Transpose(arr))
crr = Application.Transpose(brr)
End Sub
Dass könnte man auch direkt als Einzeiler machen.
Gruß Ralf
Anzeige
AW: Sortieren eindimensionales Array
22.10.2021 08:44:20
Zwenn
Hallo Steffen,
ich habe Dein Problem nicht analysiert. Aber ich finde es faszinierend, dass auf der verlinkten Seite ein langsamerer Sortieralgorithmus als der BubbleSort angegeben ist. (Habe nicht geprüft, ob das stimmt.) Der BubbleSort ist nämlich bereits ein sehr langsamer Sortieralgorithmus, dafür aber einfach zu implementieren. Für Deine Zwecke wird er vermutlich auch völlig ausreichen, außer Du hast sehr lange Listen.
Da Du Deinen VBA Lvl mit "gut" angegeben hast, empfehle ich die folgende Videoreihe für eine Übersicht zu Sortieralgorithmen. Schau Dir die ersten 3 Videos an. Bei Interesse natürlich auch mehr. Aber in den ersten 3 bekommst Du ganz gute Erklärungen zu Grundlagen von Sortieralgorithmen und im speziellen dann zum BubbleSort. Damit solltest Du Dein Problem selbst lösen können.
https://studyflix.de/informatik/sortieralgorithmen-1337
Viele Grüße,
Zwenn
Anzeige
AW: Sortieren eindimensionales Array
22.10.2021 09:37:17
Der

Da Du Deinen VBA Lvl mit "gut" angegeben hast, 
Wenn das Level gut wäre, dann könnte er sein Problem vermutlich selbst lösen.
Da das Array ByRef übergeben wird, kann es nicht sein, dass Elemente fehlen.
Hier wird übrigens nach Text sortiert (was bei Zahlen möglicherweis zu unerwünschten Ergebnissen in der Reihenfolge führen könnte).
Grüße
Michael
Anzeige
AW: Sortieren eindimensionales Array
22.10.2021 09:28:57
UweD
Hallo Steffen
Für 365 gibt es doch mittlerweile die Sortieren Funktion standardmäßig
Daten stehen in A1: A25
Formel in B1
normal aufsteigend

=SORTIEREN(A1:A25)
absteigend

=SORTIEREN(A1:A25;;-1)
Die Formel erweitert sich automatisch auf die weiten Zellen
LG UweD
Anzeige
SORTIEREN()
22.10.2021 11:10:49
RPP63
Moin Uwe!
Hier geht es aber um das Sortieren eines eindimensionalen Arrays.
=SORTIEREN() funktioniert prinzipiell jedoch nur mit einem Range.
Ein Range ist per Definition zweidimensional!
(Auch eine einzelne Spalte/Zeile ist zweidimensional)
Wie das dennoch funktioniert, habe ich heute früh gezeigt:
Man muss das eindimensionale Array transponieren, wodurch es zu einem zweidimensionalen wird.
Gruß Ralf
Anzeige
AW: SORTIEREN()
22.10.2021 15:35:31
UweD
Hallo Ralf
Ja, du hast Recht.
sein im ersten Post dargestelltes Makro funktioniert ja auch nur, wenn es aus einem Unterprogramm aufgerufen wird und ein Array übergeben wird.
Ich war davon ausgegangen, dass Es als Tabellenblattfunktion genutzt wird.
Mal abwarten, was er schreibt. So eilig war das Problem ja scheinbar nicht.
LG UweD
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Sortieren eines eindimensionalen Arrays in Excel VBA


Schritt-für-Schritt-Anleitung

Um ein eindimensionales Array in Excel VBA zu sortieren, kannst du den folgenden Code verwenden. Dieser basiert auf dem Bubble Sort Algorithmus, der einfach zu implementieren ist. Stelle sicher, dass du alle Elemente deines Arrays korrekt übergibst.

Function SortArray(ByRef SortstrArray As Variant) As Variant()
    Dim z As Long, i As Long
    Dim strWert As Variant
    For z = UBound(SortstrArray) - 1 To LBound(SortstrArray) Step -1
        For i = LBound(SortstrArray) To z
            If SortstrArray(i) <> "" Then
                If LCase(SortstrArray(i)) > LCase(SortstrArray(i + 1)) Then
                    strWert = SortstrArray(i)
                    SortstrArray(i) = SortstrArray(i + 1)
                    SortstrArray(i + 1) = strWert
                End If
            End If
        Next i
    Next z
    'Werte einsetzen
    SortArray = SortstrArray
End Function

Für die Option, auf- oder absteigend zu sortieren, kannst du einen zusätzlichen Parameter in die Funktion einfügen.


Häufige Fehler und Lösungen

  1. Fehlende Elemente im Array: Wenn du bemerkst, dass der letzte Eintrag im Array fehlt, überprüfe, ob du das Array korrekt übergibst. Stelle sicher, dass du die richtige Anzahl an Elementen hast und dass UBound und LBound korrekt verwendet werden.

  2. Sortierung funktioniert nicht: Wenn die Sortierung nicht wie erwartet funktioniert, prüfe, ob der Vergleich der Elemente korrekt ist. Achte darauf, dass die Datentypen übereinstimmen, da es bei Zahlen und Texten zu unerwarteten Ergebnissen kommen kann.


Alternative Methoden

Für Excel 365 gibt es die Möglichkeit, die eingebaute Funktion SORTIEREN() zu verwenden. Diese Funktion ist einfach anzuwenden und benötigt kein zusätzliches VBA-Script. Hier ein Beispiel:

=SORTIEREN(A1:A25)

Um absteigend zu sortieren, kannst du die folgende Formel verwenden:

=SORTIEREN(A1:A25;;-1)

Diese Methode ist besonders nützlich, wenn du mit großen Datenmengen arbeitest.


Praktische Beispiele

Hier ist ein Beispiel, wie du das SortArray-Makro verwenden kannst:

Sub Beispiel()
    Dim meinArray As Variant
    meinArray = Array("Banane", "Apfel", "Orange", "Kirsche")

    meinArray = SortArray(meinArray)

    Dim i As Long
    For i = LBound(meinArray) To UBound(meinArray)
        Debug.Print meinArray(i)
    Next i
End Sub

In diesem Beispiel wird ein eindimensionales Array mit Obstsorten erstellt und anschließend sortiert.


Tipps für Profis

  • Bubble Sort Optimierung: Der Bubble Sort ist nicht der schnellste Sortieralgorithmus. Wenn du mit sehr großen Arrays arbeitest, solltest du andere Algorithmen wie QuickSort oder MergeSort in Betracht ziehen.
  • Verwende Application.WorksheetFunction: Du kannst auch die WorksheetFunction.Sort verwenden, um Arrays zu sortieren, indem du sie zuerst transponierst.
  • Dokumentation: Halte deine Skripte gut dokumentiert, insbesondere wenn du mit mehreren Benutzern arbeitest oder deine Funktionen in großen Projekten verwendest.

FAQ: Häufige Fragen

1. Kann ich den Bubble Sort für große Datenmengen verwenden? Ja, aber es wird empfohlen, effizientere Algorithmen wie QuickSort oder MergeSort zu verwenden, da der Bubble Sort bei großen Datenmengen sehr langsam sein kann.

2. Wie kann ich die Reihenfolge der Sortierung ändern? Füge einen Parameter in deine Funktion ein, der bestimmt, ob aufsteigend oder absteigend sortiert werden soll, und passe die Vergleichslogik entsprechend an.

3. Gibt es eine Möglichkeit, ein eindimensionales Array in ein zweidimensionales zu konvertieren? Ja, du kannst ein eindimensionales Array transponieren, um es in ein zweidimensionales Format zu bringen. Dies kann nützlich sein, wenn du die SORTIEREN() Funktion von Excel verwenden möchtest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige