- Tham gia
- 22/8/19
- Bài viết
- 112
- Được thích
- 8
- Giới tính
- Nam
Hi các bạn, các bạn giúp mình nâng cấp hàm bên dưới theo ý tưởng mới này của mình nhé, phần bên dưới mình lấy từ bình luận trong bài viết trước của mình, mã hàm mình để phía dưới, tại là vì mình cả biết gì về VBA cả nên không biết làm thế nào để tạo ra được một hàm sắp xếp như mong muốn, cảm ơn các bạn đã đọc bài viết
Bạn ơi, với thắc mắc lúc trước của mình, mình nghĩ ra một cách nâng cấp hàm sắp xếp của bạn như thế này, không biết bạn có giúp được mình không, giúp được thì tốt quá
Hàm sắp xếp cải tiến sẽ có 3 tham số =SapXep(Vùng cần sắp xếp ; cách sắp xếp (0 hoặc 1) ; định dạng của text khi có chuỗi trùng nhau, chỉ khác in hoa hay in thường)
Vùng cần sắp xếp, cách sắp xếp (0 ; 1) : Giống như cách làm lúc trước của bạn
Đối với các chuỗi chỉ xuất hiện một lần và có cách viết chữ hoa hay thường giống nhau, giữ nguyên định dạng cho từng chữ, ví dụ dãy AbcD ; AbcD ; AbcD thì kết quả của hàm sắp xếp vẫn là AbcD
Đối với các chuỗi chỉ xuất hiện một lần nhưng có cách viết chữ hoa chữ thường khác nhau, ví dụ: ABCd ; abcd ; abcD ; aBcd ta xem xét đến tham số thứ 3 - định dạng của text khi có chuỗi trùng nhau, chỉ khác in hoa hay in thường
Xét tham số thứ 3: định dạng của text khi có chuỗi trùng nhau, chỉ khác in hoa hay in thường
Nếu tham số thứ 3 = 0 hoặc không có: Lấy tất cả những giá trị đại diện bao gồm các chuỗi giống nhau, chỉ khác chữ hoa chữ thường, ví dụ dãy: AB ; Ab ; aB ; Ab ; AB thì kết quả của hàm sắp xếp sẽ là 3 chuỗi AB ; Ab ; ab
Nếu tham số thứ 3 = 1: Định dạng các chuỗi trùng nhau sẽ ở dạng in hoa toàn bộ (UPPER): ví dụ dãy: AB ; Ab ; aB ; Ab ; AB thì kết quả của hàm sắp xếp sẽ là chuỗi AB
Nếu tham số thứ 3 = 2: Định dạng các chuỗi trùng nhau sẽ ở dạng in thường toàn bộ (LOWER): ví dụ dãy: AB ; Ab ; aB ; Ab ; AB thì kết quả của hàm sắp xếp sẽ là chuỗi ab
Nếu tham số thứ 3 = 3: Định dạng các chuỗi trùng nhau sẽ ở dạng in hoa chữ cái đầu, các chữ sau viết thường (PROPER): ví dụ dãy: AB ; Ab ; aB ; Ab ; AB thì kết quả của hàm sắp xếp sẽ là chuỗi Ab
Nhắc lại: Đối với các chuỗi chỉ xuất hiện một lần và có cách viết chữ hoa hay thường giống nhau, giữ nguyên định dạng cho từng chữ, ví dụ dãy AbcD ; AbcD ; AbcD thì kết quả của hàm sắp xếp vẫn là AbcD bạn nhé
- Nếu hàm sắp xếp này có thể áp dụng được cho cả chuỗi gồm nhiều từ chẳng hạn như chuỗi "AbcD FghK" hay nhiều hơn nữa là chuỗi gồm 3 từ "AbcD FghK UopV" thì quá tốt bạn nhé
Mong là bạn có thể giúp được mình ở hàm cải tiến có 3 tham số như mình đã trình bày
) còn nếu không được thì mình vẫn rất cảm ơn bạn vì những gì bạn đã giúp
Mã:
Function sapxep(ByVal mang As Range, ByVal so As Boolean)
Dim T, dk As String, dks As Double, olit As Object, kq() As String, i As Long, a As Long, olit1 As Object
Set olit1 = CreateObject("System.Collections.SortedList")
Set olit = CreateObject("System.Collections.SortedList")
For Each T In mang
If IsNumeric(T.Value) And Len(T.Value) > 0 Then
dks = T.Value
If Not olit1.Contains(dks) Then
olit1.Add dks, ""
End If
Else
dk = UCase(T.Value)
If Not olit.Contains(dk) Then
olit.Add dk, ""
End If
End If
Next
ReDim kq(1 To mang.Count, 1 To 1)
If so = True Then
For i = 0 To olit1.Count - 1
a = a + 1
kq(a, 1) = olit1.Getkey(i)
Next i
For i = 0 To olit.Count - 1
a = a + 1
kq(a, 1) = olit.Getkey(i)
Next i
Else
For i = olit.Count - 1 To 0 Step -1
a = a + 1
kq(a, 1) = olit.Getkey(i)
Next i
For i = olit1.Count - 1 To 0 Step -1
a = a + 1
kq(a, 1) = olit1.Getkey(i)
Next i
End If
Set olit = Nothing
Set olit1 = Nothing
sapxep = kq
End Function
Bạn ơi, với thắc mắc lúc trước của mình, mình nghĩ ra một cách nâng cấp hàm sắp xếp của bạn như thế này, không biết bạn có giúp được mình không, giúp được thì tốt quá

Hàm sắp xếp cải tiến sẽ có 3 tham số =SapXep(Vùng cần sắp xếp ; cách sắp xếp (0 hoặc 1) ; định dạng của text khi có chuỗi trùng nhau, chỉ khác in hoa hay in thường)
Vùng cần sắp xếp, cách sắp xếp (0 ; 1) : Giống như cách làm lúc trước của bạn
Đối với các chuỗi chỉ xuất hiện một lần và có cách viết chữ hoa hay thường giống nhau, giữ nguyên định dạng cho từng chữ, ví dụ dãy AbcD ; AbcD ; AbcD thì kết quả của hàm sắp xếp vẫn là AbcD
Đối với các chuỗi chỉ xuất hiện một lần nhưng có cách viết chữ hoa chữ thường khác nhau, ví dụ: ABCd ; abcd ; abcD ; aBcd ta xem xét đến tham số thứ 3 - định dạng của text khi có chuỗi trùng nhau, chỉ khác in hoa hay in thường
Xét tham số thứ 3: định dạng của text khi có chuỗi trùng nhau, chỉ khác in hoa hay in thường
Nếu tham số thứ 3 = 0 hoặc không có: Lấy tất cả những giá trị đại diện bao gồm các chuỗi giống nhau, chỉ khác chữ hoa chữ thường, ví dụ dãy: AB ; Ab ; aB ; Ab ; AB thì kết quả của hàm sắp xếp sẽ là 3 chuỗi AB ; Ab ; ab
Nếu tham số thứ 3 = 1: Định dạng các chuỗi trùng nhau sẽ ở dạng in hoa toàn bộ (UPPER): ví dụ dãy: AB ; Ab ; aB ; Ab ; AB thì kết quả của hàm sắp xếp sẽ là chuỗi AB
Nếu tham số thứ 3 = 2: Định dạng các chuỗi trùng nhau sẽ ở dạng in thường toàn bộ (LOWER): ví dụ dãy: AB ; Ab ; aB ; Ab ; AB thì kết quả của hàm sắp xếp sẽ là chuỗi ab
Nếu tham số thứ 3 = 3: Định dạng các chuỗi trùng nhau sẽ ở dạng in hoa chữ cái đầu, các chữ sau viết thường (PROPER): ví dụ dãy: AB ; Ab ; aB ; Ab ; AB thì kết quả của hàm sắp xếp sẽ là chuỗi Ab
Nhắc lại: Đối với các chuỗi chỉ xuất hiện một lần và có cách viết chữ hoa hay thường giống nhau, giữ nguyên định dạng cho từng chữ, ví dụ dãy AbcD ; AbcD ; AbcD thì kết quả của hàm sắp xếp vẫn là AbcD bạn nhé

- Nếu hàm sắp xếp này có thể áp dụng được cho cả chuỗi gồm nhiều từ chẳng hạn như chuỗi "AbcD FghK" hay nhiều hơn nữa là chuỗi gồm 3 từ "AbcD FghK UopV" thì quá tốt bạn nhé

Mong là bạn có thể giúp được mình ở hàm cải tiến có 3 tham số như mình đã trình bày



Mã:
Function sapxep(ByVal mang As Range, ByVal so As Boolean)
Dim T, dk As String, dks As Double, olit As Object, kq() As String, i As Long, a As Long, olit1 As Object
Set olit1 = CreateObject("System.Collections.SortedList")
Set olit = CreateObject("System.Collections.SortedList")
For Each T In mang
If IsNumeric(T.Value) And Len(T.Value) > 0 Then
dks = T.Value
If Not olit1.Contains(dks) Then
olit1.Add dks, ""
End If
Else
dk = UCase(T.Value)
If Not olit.Contains(dk) Then
olit.Add dk, ""
End If
End If
Next
ReDim kq(1 To mang.Count, 1 To 1)
If so = True Then
For i = 0 To olit1.Count - 1
a = a + 1
kq(a, 1) = olit1.Getkey(i)
Next i
For i = 0 To olit.Count - 1
a = a + 1
kq(a, 1) = olit.Getkey(i)
Next i
Else
For i = olit.Count - 1 To 0 Step -1
a = a + 1
kq(a, 1) = olit.Getkey(i)
Next i
For i = olit1.Count - 1 To 0 Step -1
a = a + 1
kq(a, 1) = olit1.Getkey(i)
Next i
End If
Set olit = Nothing
Set olit1 = Nothing
sapxep = kq
End Function