Thiên Thanh1
Thành viên mới

- Tham gia
- 16/10/20
- Bài viết
- 36
- Được thích
- 9
Bạn thử cái hàm này.Em có ví dụ như trong file đính kèm
Nhờ anh chị em và các thày cô giúp đỡ
Function xapxep(dayso As String) As String
Dim i As Long, T, kq(1 To 100, 1 To 2) As String, j As Integer, s As String, b As Integer, ketqua As String
Dim a As Integer, dic As Object
Set dic = CreateObject("scripting.dictionary")
For Each T In Split(dayso, ",")
If Not dic.exists(T) Then
a = a + 1
dic.Add T, a
kq(a, 1) = T
kq(a, 2) = 1
Else
kq(dic.Item(T), 2) = kq(dic.Item(T), 2) + 1
End If
Next
For i = 1 To a
For j = i To a - 1
If kq(i, 2) < kq(j + 1, 2) Then
s = kq(i, 1)
b = kq(i, 2)
kq(i, 1) = kq(j + 1, 1)
kq(i, 2) = kq(j + 1, 2)
kq(j + 1, 1) = s
kq(j + 1, 2) = b
ElseIf kq(i, 2) = kq(j + 1, 2) Then
If CLng(kq(i, 1)) < CLng(kq(j + 1, 1)) Then
s = kq(i, 1)
b = kq(i, 2)
kq(i, 1) = kq(j + 1, 1)
kq(i, 2) = kq(j + 1, 2)
kq(j + 1, 1) = s
kq(j + 1, 2) = b
End If
End If
Next j
Next i
For i = 1 To a
ketqua = ketqua & "," & kq(i, 1)
Next i
For i = 99 To 0 Step -1
If i > 10 Then s = i Else s = "0" & i
If Not dic.exists(s) Then
ketqua = ketqua & "," & s
End If
Next i
Set dic = Nothing
xapxep = Right(ketqua, Len(ketqua) - 1)
End Function
Nếu bạn dùng ofice365 thì thử công thức này xem có đúng không.Em có ví dụ như trong file đính kèm
Nhờ anh chị em và các thày cô giúp đỡ
=LET(a,FILTERXML("<a><b>"&SUBSTITUTE(G5,",","</b><b>")&"</b></a>","//b"),b,SORT(UNIQUE(a),,-1),c,MMULT(N(b=TRANSPOSE(a)),SEQUENCE(COUNTA(a))^0),d,SORTBY(CHOOSE({1,2},TEXT(b,"00"),c),c,-1),TEXTJOIN(",",1,INDEX(d,,1),IF(ISNA(MATCH(100-ROW($1:$100),b,)),TEXT(100-ROW($1:$100),"00"),"")))
Cảm ơn bạn @snow25 hàm rất đúng, rất chuẩn siêu quá bạn ơi.Bạn thử cái hàm này.
=xapxep(G5)Mã:Function xapxep(dayso As String) As String Dim i As Long, T, kq(1 To 100, 1 To 2) As String, j As Integer, s As String, b As Integer, ketqua As String Dim a As Integer, dic As Object Set dic = CreateObject("scripting.dictionary") For Each T In Split(dayso, ",") If Not dic.exists(T) Then a = a + 1 dic.Add T, a kq(a, 1) = T kq(a, 2) = 1 Else kq(dic.Item(T), 2) = kq(dic.Item(T), 2) + 1 End If Next For i = 1 To a For j = i To a - 1 If kq(i, 2) < kq(j + 1, 2) Then s = kq(i, 1) b = kq(i, 2) kq(i, 1) = kq(j + 1, 1) kq(i, 2) = kq(j + 1, 2) kq(j + 1, 1) = s kq(j + 1, 2) = b ElseIf kq(i, 2) = kq(j + 1, 2) Then If CLng(kq(i, 1)) < CLng(kq(j + 1, 1)) Then s = kq(i, 1) b = kq(i, 2) kq(i, 1) = kq(j + 1, 1) kq(i, 2) = kq(j + 1, 2) kq(j + 1, 1) = s kq(j + 1, 2) = b End If End If Next j Next i For i = 1 To a ketqua = ketqua & "," & kq(i, 1) Next i For i = 99 To 0 Step -1 If i > 10 Then s = i Else s = "0" & i If Not dic.exists(s) Then ketqua = ketqua & "," & s End If Next i Set dic = Nothing xapxep = Right(ketqua, Len(ketqua) - 1) End Function
Bạn thử xem đúng không.@snow25 làm ơn chỉnh cho công thức chọn được nhiều vùng giúp mình với nhé
Cảm ơn bạn
Function xapxep(ParamArray mang()) As String
Dim i As Long, T, kq(1 To 100, 1 To 2) As String, j As Integer, s As String, b As Integer, ketqua As String
Dim a As Integer, dic As Object, dayso
Set dic = CreateObject("scripting.dictionary")
For Each dayso In mang
For Each T In Split(dayso, ",")
If Not dic.exists(T) Then
a = a + 1
dic.Add T, a
kq(a, 1) = T
kq(a, 2) = 1
Else
kq(dic.Item(T), 2) = kq(dic.Item(T), 2) + 1
End If
Next
Next
For i = 1 To a
For j = i To a - 1
If kq(i, 2) < kq(j + 1, 2) Then
s = kq(i, 1)
b = kq(i, 2)
kq(i, 1) = kq(j + 1, 1)
kq(i, 2) = kq(j + 1, 2)
kq(j + 1, 1) = s
kq(j + 1, 2) = b
ElseIf kq(i, 2) = kq(j + 1, 2) Then
If CLng(kq(i, 1)) < CLng(kq(j + 1, 1)) Then
s = kq(i, 1)
b = kq(i, 2)
kq(i, 1) = kq(j + 1, 1)
kq(i, 2) = kq(j + 1, 2)
kq(j + 1, 1) = s
kq(j + 1, 2) = b
End If
End If
Next j
Next i
For i = 1 To a
ketqua = ketqua & "," & kq(i, 1)
Next i
For i = 99 To 0 Step -1
If i > 10 Then s = i Else s = "0" & i
If Not dic.exists(s) Then
ketqua = ketqua & "," & s
End If
Next i
Set dic = Nothing
xapxep = Right(ketqua, Len(ketqua) - 1)
End Function
Bạn @snow25 làm nhanh quá, cảm ơn bạn rất nhiều nhéBạn thử xem đúng không.
Mã:Function xapxep(ParamArray mang()) As String Dim i As Long, T, kq(1 To 100, 1 To 2) As String, j As Integer, s As String, b As Integer, ketqua As String Dim a As Integer, dic As Object, dayso Set dic = CreateObject("scripting.dictionary") For Each dayso In mang For Each T In Split(dayso, ",") If Not dic.exists(T) Then a = a + 1 dic.Add T, a kq(a, 1) = T kq(a, 2) = 1 Else kq(dic.Item(T), 2) = kq(dic.Item(T), 2) + 1 End If Next Next For i = 1 To a For j = i To a - 1 If kq(i, 2) < kq(j + 1, 2) Then s = kq(i, 1) b = kq(i, 2) kq(i, 1) = kq(j + 1, 1) kq(i, 2) = kq(j + 1, 2) kq(j + 1, 1) = s kq(j + 1, 2) = b ElseIf kq(i, 2) = kq(j + 1, 2) Then If CLng(kq(i, 1)) < CLng(kq(j + 1, 1)) Then s = kq(i, 1) b = kq(i, 2) kq(i, 1) = kq(j + 1, 1) kq(i, 2) = kq(j + 1, 2) kq(j + 1, 1) = s kq(j + 1, 2) = b End If End If Next j Next i For i = 1 To a ketqua = ketqua & "," & kq(i, 1) Next i For i = 99 To 0 Step -1 If i > 10 Then s = i Else s = "0" & i If Not dic.exists(s) Then ketqua = ketqua & "," & s End If Next i Set dic = Nothing xapxep = Right(ketqua, Len(ketqua) - 1) End Function