Pokiaľ by som to mal riešiť ja a podmienkou je, aby to bolo vo VBA, tak by som pole vykopíroval do nejakého temp sheetu, tam pomocou vlastnosti sort dáta v danom range zoradil a zoradený range načítal späť do poľa. Temp sheet potom zmazal pomocou kill. Sort na sheete (Data->Sort) radí korektne v závislosti na tom, aký jazyk je nastavený.
Inak ale, VBA dokáže reťazce radiť korektne, je ale potrebné poznať príslušnú metódu (funkciu), ktorou je StrComp, nie je možné dva reťazce porovnávať pomocou =, <, >
Reťazce na liste je možné vo VBA triediť pomocou nasledovného príkladu:
Sub Sort()
Dim pole()
pole = WorksheetFunction.Transpose([L1:L20])
Call BubbleSort(pole)
[L1:L20] = WorksheetFunction.Transpose(pole)
End Sub
Function BubbleSort(List())
Dim i As Integer, j As Integer, Temp as string
For i = LBound(List) To UBound(List)
For j = LBound(List) To UBound(List)
If StrComp(List(i), List(j), vbTextCompare) = -1 Then
Temp = List(j)
List(j) = List(i)
List(i) = Temp
End If
Next j
Next i
End FunctionPoužil som bublinkové triedenie, pre malý rozsah dát postačuje. Uvedený kód bude fungovať i pre pole, v rutine BubbleSort je argumentom pole, hodnoty ktorého sú načítané v rutine Sort. Je ale možné v rutine BubbleSort pracovať i s poľom, ktoré do nej načítaš odinakadiaľ, nemusí sa jednať o dáta z range.
citovat