Function SortThanhAm(ByVal sArr, Optional bASC As Boolean = True)
'sArr: mang 2 chieu
'bASC mac dinh = True: sort a -> z, = False: Sort z -> a
Dim aTh, arr(), res(), t$, tmp$, sRow&, i&, j&, k&, Q&, n&
sArr = SortRow(sArr, bASC)
sRow = UBound(sArr)
ReDim arr(0 To sRow)
aTh = Array(arr, arr, arr, arr, arr, arr)
t = ThanhAm
For i = 1 To sRow
tmp = sArr(i, 1)
Q = Len(tmp)
For j = 1 To Q
n = InStr(1, t, Mid(tmp, j, 1))
If n > 0 Then
n = Int((n + 23) / 24)
Exit For
End If
Next j
If bASC = False Then n = 5 - n
aTh(n)(0) = aTh(n)(0) + 1
aTh(n)(aTh(n)(0)) = tmp
Next i
ReDim res(1 To sRow, 1 To 1)
For n = 0 To 5
For i = 1 To aTh(n)(0)
k = k + 1
res(k, 1) = aTh(n)(i)
Next i
Next n
SortThanhAm = res
End Function
Private Function ThanhAm() As String
Dim aThanh, tmp$, i&
aThanh = Array(224, 192, 7857, 7856, 7847, 7846, 232, 200, 7873, 7872, 236, 204, 242, 210, 7891, 7890, _
7901, 7900, 249, 217, 7915, 7914, 7923, 7922, 225, 193, 7855, 7854, 7845, 7844, 233, 201, _
7871, 7870, 237, 205, 243, 211, 7889, 7888, 7899, 7898, 250, 218, 7913, 7912, 253, 221, _
7843, 7842, 7859, 7858, 7849, 7848, 7867, 7866, 7875, 7874, 7881, 7880, 7887, 7886, 7893, _
7892, 7903, 7902, 7911, 7910, 7917, 7916, 7927, 7926, 227, 195, 7861, 7860, 7851, 7850, _
7869, 7868, 7877, 7876, 297, 296, 245, 213, 7895, 7894, 7905, 7904, 361, 360, 7919, 7918, _
7929, 7928, 7841, 7840, 7863, 7862, 7853, 7852, 7865, 7864, 7879, 7878, 7883, 7882, 7885, _
7884, 7897, 7896, 7907, 7906, 7909, 7908, 7921, 7920, 7925, 7924)
For i = 0 To UBound(aThanh)
tmp = tmp & ChrW(aThanh(i))
Next i
ThanhAm = tmp
End Function
Private Function SortRow(sArr, bASC) As Variant
Dim oList As Object, arr(), i&, tmp, fRow&, eRow&, td$, tdUp$
td = ChrW(273): tdUp = ChrW(272)
Set oList = CreateObject("System.Collections.ArrayList")
fRow = LBound(sArr): eRow = UBound(sArr)
For i = fRow To eRow
tmp = sArr(i, 1)
If tmp <> Empty Then
If InStr(1, tmp, td, vbBinaryCompare) > 0 Then tmp = Replace(tmp, td, "dzz")
If InStr(1, tmp, tdUp, vbBinaryCompare) > 0 Then tmp = Replace(tmp, tdUp, "Dzz")
oList.Add tmp
End If
Next i
oList.Sort
If bASC = False Then oList.Reverse
ReDim arr(1 To oList.Count, 1 To 1)
For i = 1 To oList.Count
tmp = oList.Item(i - 1)
If InStr(1, tmp, "dzz", vbBinaryCompare) > 0 Then tmp = Replace(tmp, "dzz", td)
If InStr(1, tmp, "Dzz", vbBinaryCompare) > 0 Then tmp = Replace(tmp, "Dzz", tdUp)
arr(i, 1) = tmp
Next i
SortRow = arr
Set oList = Nothing
End Function