Xin hàm sắp xếp lại các thành phần của họ tên (2 người xem)

Liên hệ QC

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

diemvuongvathuongde

Thành viên chính thức
Tham gia
5/11/07
Bài viết
75
Được thích
2
Chào các bác. Em có một danh sách gồm họ tên (không dấu), nay muốn có một hàm chuyển họ tên thành chuỗi đảo ngược (họ, đệm, tên -> tên, đệm sát tên, họ) để dùng chức năng sort. Các bác giúp em nhé.
 
Chào các bác. Em có một danh sách gồm họ tên (không dấu), nay muốn có một hàm chuyển họ tên thành chuỗi đảo ngược (họ, đệm, tên -> tên, đệm sát tên, họ) để dùng chức năng sort. Các bác giúp em nhé.
Đơn giản nhất là dùng công cụ Text to Columns để tách họ tên ra, sau đó ráp lại theo ý bạn
Ngoài ra các hàm tách họ tên có đầy trên GPE rồi, sao bạn không tải về mà xài
 
Upvote 0
Upvote 0
Cảm ơn các bác. Em chỉ cần đơn giản thế này thôi:
Pham Thi Bich Thoa -> Thoa Bich Thi Pham
Nguyen Van Nam -> Nam Van Nguyen
 
Upvote 0
Dùng hàm DAO trong file đính kèm dưới đây nhé. Thân
Yêu cầu này bạn dùng Split sẽ gọn hơn rất nhiều:
PHP:
Function Daohoten(Hoten As String) As String
  Dim Temp, i As Long
  Temp = Split(WorksheetFunction.Trim(Hoten), " ")
  For i = UBound(Temp) To 0 Step -1
    Daohoten = Trim(Daohoten & " " & Temp(i))
  Next
End Function
 
Upvote 0
Cảm ơn các bác. Em chỉ cần đơn giản thế này thôi:
Pham Thi Bich Thoa -> Thoa Bich Thi Pham
Nguyen Van Nam -> Nam Van Nguyen
Trước mình viết bằng vòng lặp:
Mã:
Function DaoHoTen(hoten As String) As String
Dim vt1 As Long, vt2 As Long
If Trim(hoten) <> "" Then
  hoten = WorksheetFunction.Trim(hoten) & " "
  Do
    vt2 = InStr(vt1 + 1, hoten, " ")
    DaoHoTen = Mid(hoten, vt1 + 1, vt2 - vt1) & DaoHoTen
    vt1 = vt2
  Loop While vt1 < Len(hoten)
  DaoHoTen = Trim(DaoHoTen)
End If
End Function

Nhưng cách của ndu96081631 dùng Split rất hay
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn các bác đã giúp đỡ. Nhưng còn thêm vấn đề này nữa: Nếu chỉ có "họ" và "tên", em muốn chuyển đảo ngược lại và có thêm một khoảng trắng nữa ở giữa 2 thành phần (Trường hợp này phần đệm chính là khoảng trắng - để sắp xếp được đúng). Các bác giúp em nữa nhé.
 
Upvote 0
Cảm ơn các bác đã giúp đỡ. Nhưng còn thêm vấn đề này nữa: Nếu chỉ có "họ" và "tên", em muốn chuyển đảo ngược lại và có thêm một khoảng trắng nữa ở giữa 2 thành phần (Trường hợp này phần đệm chính là khoảng trắng - để sắp xếp được đúng). Các bác giúp em nữa nhé.
Vậy, nếu tính cho hết, thì bạn sẽ cần nhiều hơn một khoảng trắng à... Vì tên thì có tên 2 chữ, tên 3 chữ, 4 chữ... thậm chí là 13 chữ (Công Tằng Tôn Nữ Tạ Thị Long Lanh Lóng Lánh Ánh Sương Mai).
Cái ví dụ này nói vui thôi. Nhưng tôi nghĩ rằng cũng phải tính lại một chút, hoặc là đặt cố định con số nào đó, tên là phải có 5 chữ chẳng hạn, trong đó chữ đầu là Họ, chữ cuối là Tên, còn ở giữa thì gọi chung là Đệm, và cái Đệm này trừ hao cho nó 3 ô trống là vừa...
Đôi lời mạn đàm.
 
Upvote 0
Cảm ơn các bác đã giúp đỡ. Nhưng còn thêm vấn đề này nữa: Nếu chỉ có "họ" và "tên", em muốn chuyển đảo ngược lại và có thêm một khoảng trắng nữa ở giữa 2 thành phần (Trường hợp này phần đệm chính là khoảng trắng - để sắp xếp được đúng). Các bác giúp em nữa nhé.
Nguyên tắc sắp xếp họ tên của bạn như thế nào ?
Ví dụ:
1. Xếp họ tên theo tên.
2. Nếu trùng tên, xếp theo họ.
3. Nếu trùng họ xếp theo tên đệm.
4. Nếu trùng tên đệm thì ....
Có như thế mới biết đường mà đi chứ !
 
Upvote 0
Chắc là em trình bày chưa tốt nên các bác không hiểu được ý em hỏi.
Các bác đã giúp em việc chuyển một chuỗi tiếng thành chuỗi tiếng ngược lại (Mỗi tiếng cách nhau 1 khoảng trắng). Nay em muốn bổ sung thêm, nếu chuỗi chỉ có 2 tiếng thì đảo lại và thêm vào giữa 1 khoảng trắng nữa (Tức là có 2 khoảng trắng).
Ví dụ:
Công_Tằng_Tôn_Nữ -> Nữ_Tôn_Tằng_Công
Công_Tằng -> Tằng__Công (2 khoảng trắng)
 
Upvote 0
Chắc là em trình bày chưa tốt nên các bác không hiểu được ý em hỏi.
Các bác đã giúp em việc chuyển một chuỗi tiếng thành chuỗi tiếng ngược lại (Mỗi tiếng cách nhau 1 khoảng trắng). Nay em muốn bổ sung thêm, nếu chuỗi chỉ có 2 tiếng thì đảo lại và thêm vào giữa 1 khoảng trắng nữa (Tức là có 2 khoảng trắng).
Ví dụ:
Công_Tằng_Tôn_Nữ -> Nữ_Tôn_Tằng_Công
Công_Tằng -> Tằng__Công (2 khoảng trắng)
Tôi xin mạn phép sử dụng đoạn code của Anh NDU sửa lại theo yêu cầu của bạn:
PHP:
Function Daohoten(Hoten As String) As String
  Dim Temp, i As Long
  Temp = Split(WorksheetFunction.Trim(Hoten), "_")
  For i = UBound(Temp) To 0 Step -1
    Daohoten = Trim(Daohoten & "_" & Temp(i))
    Daohoten = Replace(Daohoten, "_", "__")
  Next
End Function
Thân
 
Upvote 0
Web KT

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

Back
Top Bottom