AW: Sortieren laut Buchstaben
08.10.2024 21:10:48
Alwin Weisangler
Hallo,
sollte für deine Zwecke ausreichen:
Option Explicit
Sub LigenSortieren()
Dim i&, j&, k&, iBlock&, arrList(), tmp(), arrLigen(): arrLigen = Array("a", "b", "c", "d")
iBlock = 3
With Tabelle4
arrList = .Range("B3:C" & .Cells(Rows.Count, 3).End(xlUp).Row)
.Range("B4:C38").ClearContents
For i = 0 To UBound(arrLigen)
For j = 1 To UBound(arrList)
If arrLigen(i) = LCase(arrList(j, 1)) Then
k = k + 1
ReDim Preserve tmp(1 To 2, 1 To k)
tmp(1, k) = arrList(j, 1)
tmp(2, k) = arrList(j, 2)
End If
Next j
tmp = Application.Transpose(tmp)
QuickSort LBound(tmp), UBound(tmp), tmp, 2
.Cells(iBlock, 2).Resize(UBound(tmp, 1), UBound(tmp, 2)) = tmp
iBlock = iBlock + 9
k = 0
Erase tmp
Next i
End With
End Sub
Private Sub QuickSort(lngLBound As Long, lngUBound As Long, avntArray As Variant, lngSortColumn As Long)
Dim lngIndex1 As Long, lngIndex2 As Long, lngColumn As Long
Dim vntBuffer As Variant, vntTemp As Variant
lngIndex1 = lngLBound
lngIndex2 = lngUBound
vntTemp = avntArray((lngLBound + lngUBound) \ 2, lngSortColumn)
Do
Do While avntArray(lngIndex1, lngSortColumn) vntTemp
lngIndex1 = lngIndex1 + 1
Loop
Do While vntTemp avntArray(lngIndex2, lngSortColumn)
lngIndex2 = lngIndex2 - 1
Loop
If lngIndex1 = lngIndex2 Then
For lngColumn = LBound(avntArray, 2) To UBound(avntArray, 2)
vntBuffer = avntArray(lngIndex1, lngColumn)
avntArray(lngIndex1, lngColumn) = avntArray(lngIndex2, lngColumn)
avntArray(lngIndex2, lngColumn) = vntBuffer
Next
lngIndex1 = lngIndex1 + 1
lngIndex2 = lngIndex2 - 1
End If
Loop Until lngIndex1 > lngIndex2
If lngLBound lngIndex2 Then Call QuickSort(lngLBound, lngIndex2, avntArray, lngSortColumn)
If lngIndex1 lngUBound Then Call QuickSort(lngIndex1, lngUBound, avntArray, lngSortColumn)
End Sub
Gruß Uwe