Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Array sortieren

Betrifft: Array sortieren von: Gregor
Geschrieben am: 25.04.2014 12:32:51

Hallo zusammen

Ich habe im Frum folgenden Code zum sortieren eines Array gefunden:
Option Explicit
Option Base 0

'Deklaration eines Variant der das zusortierende Array aufnimmt.
'Das Array beinhaltet hier 16 Element (0 bis 15), wobei das erste
'als Hilfselement eingesetzt wird.
Dim SortArr As Variant

'Diese Prozedur initialisiert das Array mit den unsortierten Werten.
'Das Hilfselement SortArr(0) wird mit 0 initialisiert.

Sub Init_Arr(ByRef SortArr)
    SortArr = Array(0, 10, 3, 14, 5, 2, 13, 11, 9, 12, 1, 7, 15, 8, 4, 6)
End Sub
'Die Sortier-Prozedur Insert_Sort setzt den Sortieralgortihmus um.
Sub Insert_Sort(ByRef SortArr)
    Dim i As Integer, j As Integer, Element As Integer

    'Durchlaufen der Array-Elemente mittels Schleife.
    For i = 2 To 15
        Element = SortArr(i)
        'Hilfselement wird als Zwischenspeicher eingesetzt.
        SortArr(0) = Element
        j = i - 1

        'Verschieben der Array-Elemente bis
        'kleineres Array-Element gefunden.
        Do While Element < SortArr(j)
           SortArr(j + 1) = SortArr(j)
           j = j - 1
        Loop

        'Array-Element einfügen.
        SortArr(j + 1) = Element
    Next i
End Sub
'Über diese Prozedur kann das Array zur Überprüfung ausgegeben werden.
Sub ArrAusgabe(Text As String, ByRef SortArr)
    Dim i As Integer
    Dim SortArrStr As String
    
    SortArrStr = Text & SortArr(1)
    For i = 2 To 15
        SortArrStr = SortArrStr & ", " & SortArr(i)
    Next i
    MsgBox SortArrStr
End Sub
'Die Hauptprozedur führt die vorab aufgeführten Prozeduren aus.
Sub Insert_Sort_Test()
    Call Init_Arr(SortArr)
    Call ArrAusgabe("Unsortiert: ", SortArr)
    Call Insert_Sort(SortArr)
    Call ArrAusgabe("Sortiert: ", SortArr)
End Sub
Geht das auch mit Text und Zahlen? Ich möchte mit einer For Next Schlaufe ca. 10 Zellen einlesen und diese dann immer nach der gleichen Reihenfolge sortieren.

Beispiel
Array = PL, 2015, M, ohne, PF, 2016, 2014,
Sortierte Array = PF, PL, M, 2014, 2015, 2016

Danke und Gruss
Gregor

  

Betrifft: AW: Array sortieren von: Erich G.
Geschrieben am: 25.04.2014 13:18:27

Hi Gregor,
im folgenden Code habe ich die mit ##### markierten Stellen geändert.
Texte werden hinter die Zahlen sortiert.

Sub Init_Arr(ByRef SortArr)
'    SortArr = Array(0, 10, 3, 14, 5, 2, 13, 11, 9, 12, 1, 7, 15, 8, 4, 6)
    SortArr = Array("PL", 2015, "M", "ohne", "PF", 2016, 2014) ' #####
End Sub

'Die Sortier-Prozedur Insert_Sort setzt den Sortieralgortihmus um.

Sub Insert_Sort(ByRef SortArr)
    Dim i As Integer, j As Integer, Element 'As Integer       ' #####

    'Durchlaufen der Array-Elemente mittels Schleife.
    For i = 2 To UBound(SortArr)                              ' #####
        Element = SortArr(i)
        'Hilfselement wird als Zwischenspeicher eingesetzt.
        SortArr(0) = Element
        j = i - 1

        'Verschieben der Array-Elemente bis
        'kleineres Array-Element gefunden.
        Do While Element < SortArr(j)
           SortArr(j + 1) = SortArr(j)
           j = j - 1
        Loop

        'Array-Element einfügen.
        SortArr(j + 1) = Element
    Next i
End Sub

'Über diese Prozedur kann das Array zur Überprüfung ausgegeben werden.

Sub ArrAusgabe(Text As String, ByRef SortArr)
    Dim i As Integer
    Dim SortArrStr As String
    
    SortArrStr = Text & SortArr(1)
    For i = 2 To UBound(SortArr)                              ' #####
        SortArrStr = SortArrStr & ", " & SortArr(i)
    Next i
    MsgBox SortArrStr
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich


  

Betrifft: AW: Array sortieren von: Gregor
Geschrieben am: 25.04.2014 16:33:45

Erich, vielen Dank

Gruss Gregor


 

Beiträge aus den Excel-Beispielen zum Thema "Array sortieren"