Thema Datum  Von Nutzer Rating
Antwort
28.07.2016 12:28:39 Sascha T.
NotSolved
29.07.2016 09:04:09 Sascha T.
NotSolved
Rot Listenfeld sortieren und Löschbestätigung
29.07.2016 11:12:47 SJ
Solved
29.07.2016 11:23:42 SJ
Solved
04.08.2016 11:45:14 Gast60113
NotSolved
04.08.2016 11:46:07 Sascha T.
NotSolved
04.08.2016 13:36:16 SJ
Solved
04.08.2016 16:15:17 Gast12717
NotSolved

Ansicht des Beitrags:
Von:
SJ
Datum:
29.07.2016 11:12:47
Views:
793
Rating: Antwort:
 Nein
Thema:
Listenfeld sortieren und Löschbestätigung

Hallo,

ein Listenfeld zu sortieren ist nicht so einfach. Ich habe mal ein Beispiel geschriebe, wie es nach der BubbleSort-Methode funktioniert:

1. Die Methode, die hinter dem Commandbutton "sortieren" steht:

Private Sub CommandButton1_Click()
    Dim arrValues() As String
    ReDim arrValues(Me.ListBox1.ListCount, Me.ListBox1.ColumnCount)
    Dim i As Integer, j As Integer
    Dim tmp As String
    
    For i = 0 To Me.ListBox1.ListCount - 1
        For j = 0 To Me.ListBox1.ColumnCount - 1
            arrValues(i, j) = Me.ListBox1.List(i, j)
        Next j
    Next i
    
    Call modSortList.sort_array_alphabetical(arrValues(), 4)
    
    With Me.ListBox1
        .Clear
        For i = 0 To UBound(arrValues(), 1)
            .AddItem (arrValues(i, 0))
            For j = 1 To UBound(arrValues(), 2)
                .List(i, j) = arrValues(i, j)
            Next j
        Next i
    End With
End Sub

2. Das Modul "modSortList"

Public Sub sort_array_alphabetical(ByRef arrValues() As String, ByVal Sort_by_Column As Integer)
    Dim arrTmp() As String
    ReDim arrTmp(UBound(arrValues(), 2) - 1)
    Dim i As Integer, j As Integer, k As Integer
    
    For i = UBound(arrValues(), 1) - 1 To LBound(arrValues(), 1) Step -1
        For j = LBound(arrValues(), 1) To i
            If isBigger(arrValues(j, Sort_by_Column - 1), arrValues(j + 1, Sort_by_Column - 1)) Then
                For k = LBound(arrValues(), 2) To UBound(arrValues(), 2) - 1
                    arrTmp(k) = arrValues(j, k)
                Next k
                For k = LBound(arrValues(), 2) To UBound(arrValues(), 2) - 1
                    arrValues(j, k) = arrValues(j + 1, k)
                Next k
                For k = LBound(arrValues(), 2) To UBound(arrValues(), 2) - 1
                    arrValues(j + 1, k) = arrTmp(k)
                Next k
            End If
        Next j
    Next i
End Sub

Private Function isBigger(ByVal value1 As String, ByVal value2 As String) As Integer
    Dim i As Integer, j As Integer
    If Len(value1) < Len(value2) Then
        i = Len(value1)
    Else
        i = Len(value2)
    End If
    
    For j = 1 To i
        If Asc(Mid(value1, j, 1)) > Asc(Mid(value2, j, 1)) Then
            isBigger = True
            Exit Function
        ElseIf Asc(Mid(value1, j, 1)) < Asc(Mid(value2, j, 1)) Then
            isBigger = False
            Exit Function
        End If
    Next j
    isBigger = False
End Function

Schaue dir die einzelnen Funktionen bitte genau an und versuche zu verstehen, was dort passiert ;)

Beim Funktionsaufruf "modSortList..." steht der zweite Parameter (in meinem Beispiel Wert "4") für die Spalte, die sortiert werden soll.

Viel Spaß beim implementieren, über eine kurze Rückmeldung würde ich mich freuen.

Viele Grüße SJ


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
28.07.2016 12:28:39 Sascha T.
NotSolved
29.07.2016 09:04:09 Sascha T.
NotSolved
Rot Listenfeld sortieren und Löschbestätigung
29.07.2016 11:12:47 SJ
Solved
29.07.2016 11:23:42 SJ
Solved
04.08.2016 11:45:14 Gast60113
NotSolved
04.08.2016 11:46:07 Sascha T.
NotSolved
04.08.2016 13:36:16 SJ
Solved
04.08.2016 16:15:17 Gast12717
NotSolved