Cần giúp nâng cấp hàm sắp xếp :)) (1 người xem)

  • Thread starter Thread starter hktanh
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

hktanh

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
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á :sweatdrop:
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é :sweatdrop:
- 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é :gathering:
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 :gathering: :hi1:


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
 
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á :sweatdrop:
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é :sweatdrop:
- 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é :gathering:
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 :gathering: :hi1:


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 là muốn nâng cấp "System.Collections.SortedList"?
 
Phải có 1 người nào kiên trì giống bạn - ngồi gõ hết các vấn đề - người đó cũng kiên trì xem hết vấn đề, mà nói thật, xem xong chỉ có bạn hiểu.
Nếu có file đính kèm, chưa chắc đã hiểu.
 
Ý bạn là muốn nâng cấp "System.Collections.SortedList"?
hì hì, thực ra mình không biết System.Collections.SortedList là gì đâu :)) tại thấy hàm này vẫn còn nhiều hạn chế quá nên mình hỏi xem có cách nào nâng cấp được lên không chứ nếu không được thì mình dùng hàm khác kết hợp với hàm này cũng được nhưng mà phải tạo thêm cột phụ :)))
Bài đã được tự động gộp:

Phải có 1 người nào kiên trì giống bạn - ngồi gõ hết các vấn đề - người đó cũng kiên trì xem hết vấn đề, mà nói thật, xem xong chỉ có bạn hiểu.
Nếu có file đính kèm, chưa chắc đã hiểu.
ừ bạn, mình kiên trì lắm, mỗi tội không biết về vba chứ nếu mà biết cách lập hàm này thì có mà mình ngồi nghĩ mấy ngày cũng được :))
 
hì hì, thực ra mình không biết System.Collections.SortedList là gì đâu :)) tại thấy hàm này vẫn còn nhiều hạn chế quá nên mình hỏi xem có cách nào nâng cấp được lên không chứ nếu không được thì mình dùng hàm khác kết hợp với hàm này cũng được nhưng mà phải tạo thêm cột phụ :)))
Bài đã được tự động gộp:


ừ bạn, mình kiên trì lắm, mỗi tội không biết về vba chứ nếu mà biết cách lập hàm này thì có mà mình ngồi nghĩ mấy ngày cũng được :))
Bạn thử đưa 1 file mẫu & kết quả yêu cầu lên xem thử.
 
Web KT

Bài viết mới nhất

Back
Top Bottom