Cái đó không khó. Cái khó là làm sao biết một từ là lót hay họ kép.Nếu tên người cụt lũn, không có đệm (lót) thì lấy răng? ví dụ như Ngô Diễm?
Lê Hoàng Mai thì Hoàng là một phần của tên hay một phần của họ?
Cái đó không khó. Cái khó là làm sao biết một từ là lót hay họ kép.Nếu tên người cụt lũn, không có đệm (lót) thì lấy răng? ví dụ như Ngô Diễm?
Mình muốn lấy hai từ cuối là Minh Hương có được không?
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 à.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
- Tôi đồng ý về hạn chế về phần version của excel, từ 2013 mới có tính năng nàyFlash 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 ạ
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," ","")))))
Woa, công thức thật ....tuyệt vờiCá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.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)))
Vậy hả.Công thức của dân chuyên IT của FPT thì đẳng cấp rồi.
...
1 công thức mà " giá thành đắt nhất " 3 công thức e cháy túiCô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.
Nếu có chuyện "giá thành" thì công thức đâu có xài được. Chưa được phép mà xài là vi phạm luật sản phẩm trí tuệ.1 công thức mà " giá thành đắt nhất " 3 công thức e cháy túi
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.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
Mình đã cập nhật file lên bài viết. Bạn có ý tưởng nào help mình không ?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.
Thử code này.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
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ỉ ?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
Tìm hiểu cách chạy code vba.Sau khi add code này vào excel, thì làm sao để sử dụng bạn nhỉ ?
Mình đã thử sau khi add code VBA này vào, nhưng không thấy có thay đổi nào nhỉ ?Tìm hiểu cách chạy code vba.
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
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2