AW: Array-Einträge vor Ausgabe sortieren
07.09.2010 09:59:14
JogyB
Hallo Joni,
das solltest Du einfach in den bestehenden Code intergrieren können, ersetzt einfach den oberen Teil bis zur For-Schleife (die ist zur Veranschaulichung noch drin, aber ohne weiteren Code)
Sub einLesen()
Dim arr As Variant
Dim sortArr() As Double
Dim lngL As Long
Dim intI As Integer
Dim lngZaehler As Long
Dim Element As Variant
arr = Sheets("Erfassung-Rechnung").Range("M16:M20000") 'Suchbereich
' Array nach Anzahl der Zahlen dimensionieren
ReDim sortArr(1 To _
Application.Count(Sheets("Erfassung-Rechnung").Range("M16:M20000")))
For lngL = 1 To UBound(arr, 1) 'Schleife über die Zeilen
For intI = 1 To UBound(arr, 2) 'Schleife über die Spalten
' Liest nur Zahlen ein
If IsNumeric(arr(lngL, intI)) And Not IsEmpty(arr(lngL, intI)) Then
lngZaehler = lngZaehler + 1
sortArr(lngZaehler) = arr(lngL, intI)
End If
Next
Next
Call QuickSort(sortArr)
For Each Element In sortArr
' Dein weiterer Code
Next
End Sub
Du brauchst für das noch einen Sortier-Algorithmus, ich habe den hier genommen:
' Quicksort-Algorithmus - aufsteigend
Sub QuickSort(ByRef VA_Array, Optional V_Low1, Optional V_High1)
On Error Resume Next
Dim V_Low2 As Long, V_High2 As Long
Dim V_Val1, V_Val2 As Variant
If IsMissing(V_Low1) Then
V_Low1 = LBound(VA_Array, 1)
End If
If IsMissing(V_High1) Then
V_High1 = UBound(VA_Array, 1)
End If
V_Low2 = V_Low1
V_High2 = V_High1
V_Val1 = VA_Array((V_Low1 + V_High1) / 2)
While (V_Low2 V_Val1 And _
V_High2 > V_Low1)
V_High2 = V_High2 - 1
Wend
If (V_Low2 V_Low1) Then Call _
QuickSort(VA_Array, V_Low1, V_High2)
If (V_Low2
Der ist nicht von mir, den habe ich mal im Netz gefunden, weiß aber leider nicht mehr wo.
Gruß, Jogy