Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: zweidimensionales Array sortieren

zweidimensionales Array sortieren
01.08.2008 12:17:00
Werner
VBA-Level: befriedigend
Hallo Freunde,
aus der Wikipedia habe ich folgenden Programmtext entnommen. Damit kann man ein eindimensionales
Array übergeben und sortieren lassen. Nun würde ich gern stattdessen ein zweidimensionales Array übergeben und sortieren lassen, weiss aber nicht, wie. Weiß jemand von euch, wie man untenstehenden Makro umschreiben muss, damit ein zweidimensionales Array als Parameter übergeben werden kann?
Besten Dank im voraus! Werner R.
Option Explicit

Public Sub BubbleSort(ByRef data() As String)
Dim OG&, i&, h As String
OG = UBound(data)
Do
For i = 1 To OG - 1
If data(i) > Data i + 1) Then
h = data(i)
data(i) = data(i + 1)
data(i + 1) = h
End If
Next i
OG = OG - 1
Loop While OG > 1
End Sub


Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: zweidimensionales Array sortieren
01.08.2008 12:40:04
Werner
Hallo Rudi,
Herzlichen Dank f. den Hinweis!! Im Archiv hatte ich nur einen vergleichbaren, aber schrecklich komplizierten Code von Nepumuk gefunden, ohne Erklärungen (vom 24.7.2004). Werner R.

Anzeige
Zusatz
01.08.2008 12:51:48
Werner
Hallo Rudi, hallo Freunde,
vergessen hatte ich noch zu erwähnen, dass man das Sortierproblem umschiffen kann, indem man die
Daten in ein Arbeitsblatt ausliest, dort sortieren laesst (den Sortiertmakro ggf. automatisch erstellen lassen und anpassen) und dann die Daten an den ursprünglichen Ort (ein Arbeitsblatt oder z.B. eine Userform) zurückschreibt.
Die meisten VBA-Sortieralgorithmen sind nämlich sehr kompliziert. Werner R.
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zweidimensionales Array in Excel VBA sortieren


Schritt-für-Schritt-Anleitung

Um ein zweidimensionales Array in Excel VBA zu sortieren, kannst du den folgenden Code verwenden. Hier wird eine einfache Implementierung des Bubble Sort-Algorithmus genutzt, um das Array zu sortieren.

Public Sub BubbleSort2D(ByRef data() As Variant)
    Dim i As Long, j As Long
    Dim temp As Variant
    Dim rows As Long, cols As Long

    rows = UBound(data, 1)
    cols = UBound(data, 2)

    For i = 1 To rows - 1
        For j = 1 To rows - i
            If data(j, 1) > data(j + 1, 1) Then
                ' Tauschen der Zeilen
                temp = data(j, 1)
                data(j, 1) = data(j + 1, 1)
                data(j + 1, 1) = temp
            End If
        Next j
    Next i
End Sub

In diesem Beispiel wird ein zweidimensionales Array von Variant-Typ verwendet, das sowohl Zahlen als auch Strings enthalten kann. Du kannst die Funktion BubbleSort2D aufrufen, indem du ein zweidimensionales Array übergibst.


Häufige Fehler und Lösungen

  1. Fehler: „Subscript out of range“

    • Lösung: Stelle sicher, dass du die richtigen Grenzen für dein Array verwendest. Wenn du beispielsweise ein Array mit Indizes von 1 bis 10 hast, aber versuchst, auf Index 0 zuzugreifen, wird dieser Fehler angezeigt.
  2. Fehler: „Type mismatch“

    • Lösung: Überprüfe den Datentyp des Arrays. Wenn du ein String-Array erwartest, aber ein Variant-Array übergibst, kann dies zu Problemen führen. Achte darauf, dass die Datentypen übereinstimmen.

Alternative Methoden

Wenn du die Verwendung von VBA vermeiden möchtest, kannst du die Excel-Funktionalität nutzen, um dein zweidimensionales Array zu sortieren. Eine Möglichkeit ist, die Daten in ein Arbeitsblatt zu schreiben, dort die integrierte Sortierfunktion zu verwenden und die Daten anschließend zurückzulesen. Dies ist besonders nützlich, wenn du mit großen Datenmengen arbeitest, da Excel für die Datenverarbeitung optimiert ist.


Praktische Beispiele

Hier ist ein einfaches Beispiel, um ein zweidimensionales Array zu sortieren:

Sub BeispielSortierung()
    Dim myArray(1 To 3, 1 To 2) As Variant
    myArray(1, 1) = "Banane"
    myArray(1, 2) = 3
    myArray(2, 1) = "Apfel"
    myArray(2, 2) = 1
    myArray(3, 1) = "Kirsche"
    myArray(3, 2) = 2

    BubbleSort2D myArray

    Dim i As Long
    For i = 1 To 3
        Debug.Print myArray(i, 1) & ": " & myArray(i, 2)
    Next i
End Sub

In diesem Beispiel wird ein zweidimensionales Array mit Obst und deren Werten erstellt. Nach der Anwendung der Sortierfunktion wird das sortierte Array in das Debug-Fenster ausgegeben.


Tipps für Profis

  • Verwende den Array.Sort-Befehl in VBA, wo immer möglich, um die Effizienz zu steigern.
  • Experimentiere mit anderen Sortieralgorithmen wie QuickSort oder MergeSort, um die Leistung bei großen Datenmengen zu verbessern.
  • Achte darauf, das Sortierkriterium festzulegen, wenn du mit mehrdimensionalen Arrays arbeitest, sodass du die gewünschte Spalte zur Sortierung auswählen kannst.

FAQ: Häufige Fragen

1. Kann ich auch mehrdimensionale Arrays sortieren? Ja, du kannst mehrdimensionale Arrays sortieren, indem du die Sortierlogik entsprechend anpasst, um mehrere Dimensionen zu berücksichtigen.

2. Welche Excel-Version benötige ich für VBA? Excel VBA ist in den meisten Versionen von Microsoft Excel verfügbar, einschließlich Excel 2007, 2010, 2013, 2016, 2019 und Microsoft 365. Stelle sicher, dass du die Entwicklertools aktiviert hast, um VBA verwenden zu können.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige