Microsoft Excel

Herbers Excel/VBA-Archiv

Array-Sortier-Prozedur

Betrifft: Array-Sortier-Prozedur von: Hendrik
Geschrieben am: 14.08.2014 08:43:55

Hallo zusammen, mit unten angefügten Code sortiere ich Arrays.
Ursprünglich sollte er ein zweidimensionales Array verwenden können und dann habe ich intBreite aufgenommen, um darüber steuern zu können wie "breit" das Array ist. Ich wollte nicht unterschiedliche Prozeduren für 1- und 2-Dimensionale.

Der Code unten bricht ab, wenn ich ihn mit einem nur eindimensionalen (und intBreite=1) aufrufe, da er dann bei

strA = strArray(a, 1)

überläuft.

Ich sehe gerade partout nicht den springenden Punkt, der mich den Code zum laufen bringt. Könnt Ihr helfen? Danke!
Sub sortiereArray(strArray() As String, intBreite As Integer)
'Zum sortieren eines Arrays (alphabetisch nach Inhalt der ersten Spalte)
'Erwartet bei 1 beginnende Arrays
    Dim a As Long
    Dim b As Long
    Dim strTmp As String
    Dim strA As String
    Dim strB As String
    Dim i As Long

    For a = 1 To UBound(strArray)
        For b = a + 1 To UBound(strArray)
            strA = strArray(a, 1)
            strB = strArray(b, 1)
            If strA > strB Then
                For i = 1 To intBreite
                    strTmp = strArray(a, i)
                    strArray(a, i) = strArray(b, i)
                    strArray(b, i) = strTmp
                Next i
            End If
        Next b
    Next a
End Sub

  

Betrifft: AW: Array-Sortier-Prozedur von: Daniel
Geschrieben am: 14.08.2014 09:13:42

Hi

du kannst ein eindimensionales Array nicht genauo behandeln wie ein zweidimenisionales.
dh um unterschiedliche Codes fürs Sortieren wirst du wahrscheinlich nicht herumkommen.

Wenn du nur eine Prozedur haben willst, dann kannst du ja beide Codes in eine Sub packen und am Anfang prüfen, ob ein ein- oder zweidimensionales Array vorliegt.

eine Funktion zum ermitteln der Anzahl der Dimensionen eines unbekannten Arrays kenne ich jetzt nicht (was natürlich nicht heissen muss, dass es diese Funktion nicht gibt), aber du könntest dir mit diesem Workaround behelfen, um die Anzahl zu ermitteln und entsprechend zu sortieren:

Sub SortArray(x)
Dim i As Long
If VarType(x) < vbArray Then Exit Sub 'kein Array

i = 1
On Error Resume Next
i = 2 + 0 * UBound(x, 2)
i = 3 + 0 * UBound(x, 3)
On Error GoTo 0

Select Case i
    Case 1
       '--- hier der Code zum sortieren von 1-D-Arrays
       '...
    Case 2
       '--- hier der Code zum sortieren von 2-D-Arrays
       '...
    Case Else
       '-- nix machen, 3-D- oder höhre Arrays kannst du auch nicht sortieren
End Select

End Sub
Gruß Daniel