Sắp xếp (Sort) dữ liệu theo Họ và tên

Liên hệ QC

hoangdanh282vn

Nguyễn Cảnh Hoàng Danh
Thành viên danh dự
Tham gia
21/12/07
Bài viết
1,902
Được thích
5,303
Nghề nghiệp
Kinh doanh các mặt hàng văn phòng phẩm
Mình gửi các bạn File hỗ trợ sắp xếp dữ liệu theo Họ và tên.

Điều kiện sắp xếp : Sort theo Tên -Tên lót - Họ

Dữ liệu dạng chữ cái sẽ được mã hóa sang dạng ký tự số trước khi Sort. Điều này sẽ khắc phục được hạn chế của Chức năng Sort sẵn có (chỉ Sort được các ký tự Latinh thông thường).

Do chưa có thời gian rãnh nên mình mới viết được cho Font Unicode. Phiên bạn sau mình sẽ bổ sung thêm Font Vni và Tcvn3.
 

File đính kèm

âý, đồng chí ơi, nhanh nhanh viết phiên bản cho Vni và tcvn3 đi. Rất hữu ích. Suốt ngày sắp xếp trong excel khó chịu quá, sắp xếp mà như không. Có phần mềm này sướng quá ta.
 
Upvote 0
âý, đồng chí ơi, nhanh nhanh viết phiên bản cho Vni và tcvn3 đi. Rất hữu ích. Suốt ngày sắp xếp trong excel khó chịu quá, sắp xếp mà như không. Có phần mềm này sướng quá ta.

Cám ơn bạn đã quan tâm.
Do cuối năm hơi bận nên chưa thể hoàn thành ngay được.
Mình sẽ cố gắng hoàn thành trong thời gian sớm nhất.
 
Upvote 0
Cám ơn bạn đã quan tâm.
Do cuối năm hơi bận nên chưa thể hoàn thành ngay được.
Mình sẽ cố gắng hoàn thành trong thời gian sớm nhất.
Mình xin hỏi như sau:
- Sort 98 ký tự / cell là OK?
- Danh viết code này chỉ quy định 93 ký tự thôi thì sợ triển khai hơi khó. Vì VNI có chữ 2 byte, còn ABC thì hàm Lcase lại không ổn.
Nếu theo Danh thì mình đơn giản lại code chuyenma cho dễ nhìn. Chỉ cho Unicode.
PHP:
Dim i As Long, Ma As String
Dim KyTu As Long, soTu As Long, MyStr As String, vt As Long
Dim MaUni() As Variant, MaVni() As Variant
Dim aSplit() As String, Chr As String
Function ConvertUni(Str As String) As String
MaUni = Array(97, 225, 224, 7843, 227, 7841, 259, 7855, 7857, 7859, 7861, 7863, 226, 7845, 7847, 7849, 7851, 7853, 98, 99, 100, 273, 101, 233, 232, 7867, 7869, 7865, 234, 7871, 7873, 7875, 7877, 7879, 102, 103, 104, 105, 237, 236, 7881, 297, 7883, 106, 107, 108, 109, 110, 111, 243, 242, 7887, 245, 7885, 244, 7889, 7891, 7893, 7895, 7897, 417, 7899, 7901, 7903, 7905, 7907, 112, 113, 114, 115, 116, 117, 250, 249, 7911, 361, 7909, 432, 7913, 7915, 7917, 7919, 7921, 118, 119, 120, 121, 253, 7923, 7927, 7929, 7925, 122)
Str = Trim(Str)
For i = 1 To Len(Str)
  KyTu = AscW(LCase(Mid(Str, i, 1)))
  If KyTu < 65 Then
     Ma = Mid(Str, i, 1)
  Else
     vt = WorksheetFunction.Match(KyTu, MaUni, 0)
     Ma = Format(vt, "00")
  End If
  MyStr = MyStr & Ma  'Ma hoa chuoi ky tu sang so
Next i
Str = MyStr
'Tim so tu
soTu = Len(Str) - Len(Replace(Str, " ", "")) + 1
aSplit = Split(Str, " ", soTu)
MyStr = ""
For i = soTu - 1 To 0 Step -1
  MyStr = MyStr & Left(aSplit(i) & Space(14), 14)
Next
MyStr = Left(MyStr & Space(98), 98)
ConvertUni = MyStr
End Function

Trước mắt các bạn có thể dùng tiện ích của Thầy Phạm Duy Long để sort theo font ABC và VNI.
Tìm với từ "Ho tro Tieng Viet VBA" của
Thầy Phạm Duy Long
Vài lời góp ý.
 
Upvote 0
Cảm ơn anh. Anh dùng Split hay lắm.
Em thì hạn chế dùng Array và For vì nó làm cho code chạy chậm.
Em test thử với 10,000 dòng, với chuỗi dài 15 ký tự thì tốc độ nhanh gấp 5 lần.
 
Upvote 0
Cái này có sắp xếp chữ Đ được không hả Danh không?
 
Upvote 0
Upvote 0
Web KT

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

Back
Top Bottom