Các phương pháp tách họ và tên đề nghị post ở đây

Liên hệ QC
Có lẽ không cần phân loại từ trong nhóm; cứ lấy 2 từ trong cụm từ cho khỏe để giải:
Mình muốn lấy hai từ cuối là Minh Hương có được không?
 
Hi mọi người! Thật kinh ngạc trước các giải pháp đa dạng của việc tách tên mà anh em đưa ra. Tôi biết 1 cách đơn giản mà tôi thường hay làm là dùng Flash fill hay nói cách đơn giản hơn là tôi chỉ enter nhập mẫu 4,5 lần tạo pattern cho excel rồi việc còn lại excel tự động giải quyết.
Các bạn tham khảo cách này của tôi nhé:
B1: Insert thêm 1 cột hoặc cả 3 cột (Họ, Đệm, Tên) cạnh phải cột đích (Họ và Tên) luôn
B2: Tại cột mới tạo gần nhất cột đích (Họ và tên), bạn nhập lần lượt phần Họ cho khoảng 4 dòng liên tiếp từ dòng đầu tiên như file của bạn: Nguyễn > Nguyễn > Nguyễn > Trần. Khi bạn nhập đến ô Trần này excel đã tự hiểu pattern và nhận cho tất cả các dòng còn lại. Việc của bạn chỉ là ấn enter tất cả phần Họ sẽ được trích xuất ra.
Có thể đây là AI Flash fill chăng?
Lặp lại tương tự với cột Tên đệm và Tên bạn sẽ thấy Excel bản thân nó đã mạnh đến mức nào rồi.
Nhược điểm: Nếu Họ và Tên lớn bằng 4 chữ phần Tên đệm sẽ không đúng, phần Họ,Tên tôi nghĩ luôn đảm bảo chính xác

PS: xin lỗi tôi không post file mẫu được vì dùng máy công ty
 
Hi mọi người! Thật kinh ngạc trước các giải pháp đa dạng của việc tách tên mà anh em đưa ra. Tôi biết 1 cách đơn giản mà tôi thường hay làm là dùng Flash fill hay nói cách đơn giản hơn là tôi chỉ enter nhập mẫu 4,5 lần tạo pattern cho excel rồi việc còn lại excel tự động giải quyết.
Các bạn tham khảo cách này của tôi nhé:
B1: Insert thêm 1 cột hoặc cả 3 cột (Họ, Đệm, Tên) cạnh phải cột đích (Họ và Tên) luôn
B2: Tại cột mới tạo gần nhất cột đích (Họ và tên), bạn nhập lần lượt phần Họ cho khoảng 4 dòng liên tiếp từ dòng đầu tiên như file của bạn: Nguyễn > Nguyễn > Nguyễn > Trần. Khi bạn nhập đến ô Trần này excel đã tự hiểu pattern và nhận cho tất cả các dòng còn lại. Việc của bạn chỉ là ấn enter tất cả phần Họ sẽ được trích xuất ra.
Có thể đây là AI Flash fill chăng?
Lặp lại tương tự với cột Tên đệm và Tên bạn sẽ thấy Excel bản thân nó đã mạnh đến mức nào rồi.
Nhược điểm: Nếu Họ và Tên lớn bằng 4 chữ phần Tên đệm sẽ không đúng, phần Họ,Tên tôi nghĩ luôn đảm bảo chính xác

PS: xin lỗi tôi không post file mẫu được vì dùng máy công ty
Flash Fill dùng cho phiên bản excel 2013 trở về sau. Hiện tại còn rất nhiều người chưa dùng tới phiên bản 2013 này anh à.
Hình như Flash fill vẫn có hạn chế chứ chưa thực sự giải quyết được bài tách họ tên. Vì Flash Fill cũng kiểu như text to column nâng cao thôi ạ
 
Flash Fill dùng cho phiên bản excel 2013 trở về sau. Hiện tại còn rất nhiều người chưa dùng tới phiên bản 2013 này anh à.
Hình như Flash fill vẫn có hạn chế chứ chưa thực sự giải quyết được bài tách họ tên. Vì Flash Fill cũng kiểu như text to column nâng cao thôi ạ
- Tôi đồng ý về hạn chế về phần version của excel, từ 2013 mới có tính năng này
- Tôi cho là tuy Giải pháp về Flash fill hoặc Text to Column by Delimeter chưa giải quyết 100% các trường hợp đưa ra nhưng đây là giải pháp nhanh, tiện lợi giải quyết được 90% trường hợp về tách họ, tên
 
Mình có cách khác tổng quát hơn nhưng hơi khó hiểu:
Giả thiết A1 chưa "Nguyễn Duy Tuân"
Công thức lấy tên như sau:
=RIGHT(A1,LEN(A1)- FIND("*", SUBSTITUTE(A1," ","*", LEN(A1)-LEN( SUBSTITUTE(A1," ","")))))

Cách này của cháu lấy tên Chuẩn theo dân IT của FPT chính xác nhất , ưu việt nhất, mạnh mẽ nhất, nhanh nhất, dể hiểu nhất, tốt nhất, giá thành đắt nhất, cuối cùng là đẳng cấp nhất..

=TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",LEN(A1))),LEN(A1)))
 
Cách này của cháu lấy tên Chuẩn theo dân IT của FPT chính xác nhất , ưu việt nhất, mạnh mẽ nhất, nhanh nhất, dể hiểu nhất, tốt nhất, giá thành đắt nhất, cuối cùng là đẳng cấp nhất..

=TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",LEN(A1))),LEN(A1)))
Woa, công thức thật ....tuyệt vời
 
Cách này của cháu lấy tên Chuẩn theo dân IT của FPT chính xác nhất , ưu việt nhất, mạnh mẽ nhất, nhanh nhất, dể hiểu nhất, tốt nhất, giá thành đắt nhất, cuối cùng là đẳng cấp nhất..

=TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",LEN(A1))),LEN(A1)))
Công thức của dân chuyên IT của FPT thì đẳng cấp rồi.
Vậy cháu viết 1 công thức dành cho việc tách họ, tên đệm, tên mà kéo 1 phát được 3 thứ đó không? Nhiều khi tôi muốn dùng 1 công thức mà không biết, đánh đi đánh lại 3 lần tại 3 cột mà mỏi tay quá. Lại khó nhớ công thức nữa.
 
Công thức của dân chuyên IT của FPT thì đẳng cấp rồi.
Vậy cháu viết 1 công thức dành cho việc tách họ, tên đệm, tên mà kéo 1 phát được 3 thứ đó không? Nhiều khi tôi muốn dùng 1 công thức mà không biết, đánh đi đánh lại 3 lần tại 3 cột mà mỏi tay quá. Lại khó nhớ công thức nữa.
1 công thức mà " giá thành đắt nhất " 3 công thức e cháy túi
 
Hello mọi người
Minh đang cần hàm Excel kết hợp VBA để xử lý 1 tính huống như file ảnh mình gửi.
1666855091827.png
Mình cần tạo user Account cho hàng ngàn người đã có thông tin Họ tên. Như ví dụ trên user có tên Trinh Duc Luan, sang cột bên kia sẽ tự chuyển thành luantd và sẽ tự nhảy khi có người mới nếu trùng tên ví dụ luantd1, luantd2.
Mọi người giúp mình được không nhỉ ?

Thanks
 

File đính kèm

  • Bảng Username.xlsx
    9.7 KB · Đọc: 3
Lần chỉnh sửa cuối:
Hello mọi người
Minh đang cần hàm Excel kết hợp VBA để xử lý 1 tính huống như file ảnh mình gửi.
View attachment 282586
Mình cần tạo user Account cho hàng ngàn người đã có thông tin Họ tên. Như ví dụ trên user có tên Trinh Duc Luan, sang cột bên kia sẽ tự chuyển thành luantd và sẽ tự nhảy khi có người mới nếu trùng tên ví dụ luantd1, luantd2.
Mọi người giúp mình được không nhỉ ?

Thanks
Cái này có phải tách họ tên đâu ta.Mà file không có thì làm gì.Hay cần đánh dữ liệu cho bạn rồi viết code.
 
@Chủ bài đăng

CA14.jpg

Viết ví dụ cũng hà tiện nữa, không khá lên được!

Ho & Ten
Trịnh Dục LuânLuanTD
Trần Đức Loạn?LoanTD
Trà Thị Mỹ Linh? LinhTTM
Công tằng Tôn Nữ Minh Nguyệt? NguyetCTTNM
Trịnh Thượng? ThuongT
 
Hello mọi người
Minh đang cần hàm Excel kết hợp VBA để xử lý 1 tính huống như file ảnh mình gửi.
View attachment 282586
Mình cần tạo user Account cho hàng ngàn người đã có thông tin Họ tên. Như ví dụ trên user có tên Trinh Duc Luan, sang cột bên kia sẽ tự chuyển thành luantd và sẽ tự nhảy khi có người mới nếu trùng tên ví dụ luantd1, luantd2.
Mọi người giúp mình được không nhỉ ?

Thanks
Thử code này.
Mã:
Sub abc()
    Dim i As Long, arr, dic As Object, ten As String, T, lr As Long, k As Long
    Set dic = CreateObject("scripting.dictionary")
    With Sheets("sheet1")
        lr = .Range("A" & Rows.Count).End(xlUp).Row
        arr = .Range("A2:B" & lr).Value
        ReDim kq(1 To UBound(arr), 1 To 1)
        For i = 1 To UBound(arr)
            T = Split(" " & Application.Trim(arr(i, 1)), " ")
            ten = Empty
            For k = 1 To UBound(T) - 1
                ten = ten & Left(T(k), 1)
            Next k
                ten = T(UBound(T)) & ten
                If Not dic.exists(ten) Then
                   dic.Add ten, 1
                   kq(i, 1) = ten
                Else
                   kq(i, 1) = ten & dic.Item(ten)
                   dic.Item(ten) = dic.Item(ten) + 1
                End If
       Next i
       .Range("C2:C" & lr).Value = kq
   End With
   Set dic = Nothing
End Sub
 
Thử code này.
Mã:
Sub abc()
    Dim i As Long, arr, dic As Object, ten As String, T, lr As Long, k As Long
    Set dic = CreateObject("scripting.dictionary")
    With Sheets("sheet1")
        lr = .Range("A" & Rows.Count).End(xlUp).Row
        arr = .Range("A2:B" & lr).Value
        ReDim kq(1 To UBound(arr), 1 To 1)
        For i = 1 To UBound(arr)
            T = Split(" " & Application.Trim(arr(i, 1)), " ")
            ten = Empty
            For k = 1 To UBound(T) - 1
                ten = ten & Left(T(k), 1)
            Next k
                ten = T(UBound(T)) & ten
                If Not dic.exists(ten) Then
                   dic.Add ten, 1
                   kq(i, 1) = ten
                Else
                   kq(i, 1) = ten & dic.Item(ten)
                   dic.Item(ten) = dic.Item(ten) + 1
                End If
       Next i
       .Range("C2:C" & lr).Value = kq
   End With
   Set dic = Nothing
End Sub
Sau khi add code này vào excel, thì làm sao để sử dụng bạn nhỉ ?
 
Bạn dùng hàm tự tạo (UDF) nhé.
Bước 1) Alt-F11 mở cửa sổ VBA editor, Insert/module. Copy đoạn code dưới đây vào:
PHP:
Option Explicit
Function Uname(cell As Range)
Dim i&, Ln As Range, st, ce As Range, max&
Set Ln = Range("C1:C" & cell.Row - 1)
st = Split(" " & cell.Value)
For i = 1 To UBound(st) - 1
    Uname = Uname & LCase(Left(st(i), 1))' LCase: Họ và Lót viết thường. Nếu muốn viết hoa thì dùng Ucase
Next
Uname = st(UBound(st)) & Uname
If WorksheetFunction.CountIf(Ln, Uname & "*") = 0 Then Exit Function
For Each ce In Ln
    st = Replace(ce, Uname, "")
    If Len(st) = 0 Then
        max = 1
    ElseIf IsNumeric(st) Then max = max + 1
    End If
Next
Uname = Uname & IIf(max = 0, "", max)
End Function

Bước 2) Đóng cửa sổ VBA.
Tại ô C2:
=uname(A2)
Kéo xuống
Save As file dạng "Excel Macro-Enable Workbook" (.xlsm)
 

File đính kèm

  • Bảng Username.xlsm
    19.1 KB · Đọc: 3
Web KT
Back
Top Bottom