Lấy chữ cái đầu trong họ - tên

Liên hệ QC
Thêm một cách nửa không biết được không.
 

File đính kèm

  • Tach chuoi.xlsm
    15.1 KB · Đọc: 22
Nếu ô C5 có chứa text "Mai Phương Thủy" thì mình sẽ lấy 3 chữ cái đầu bằng 3 công thức sau:
Chữ M - Mai:
=LEFT(C5,1)
Chữ P - Phương:
=MID(C5,FIND(" ",C5,1)+1,1)
Chữ T - Thuý:
=MID(C5,FIND(" ",C5,FIND(" ",C5,1)+1)+1,1)
Và cứ thế nếu còn chữ nào nữa.
Thân.
Vậy Mai Thị Phương Thúy thì lấy sao????. Theo mình nghĩ tách thành cột sau đó lấy ký tự đầu tiên của mỗi cột.
 
Đây là cách đơn giản:
Bạn thêm 1 khoảng trắng vô cuối của chuỗi họ tên;
Sau đó tạo vòng lặp Do . . . Loop để xử lí.

Dù sao bạn thiết kế mã như vậy vẫn trùng, như
Ngô Thị Hương & Nguyễn Thanh Hùng hay Nhữ Thị Hường,. . . .

Với 3 người có tên trên, mã nên chăng sẽ là NTH00, NTH01 & NTH09,. . . .
thành NTH01 kiểu j vậy bạn. Mình viết mãi VBA không được. nó chỉ là NTH thôi không biết thêm số ở sau ( khi có tên trùng lặp). Bạn chỉ giúp mình với.
Thanks
 
thành NTH01 kiểu j vậy bạn. Mình viết mãi VBA không được. nó chỉ là NTH thôi không biết thêm số ở sau ( khi có tên trùng lặp). Bạn chỉ giúp mình với.
Thanks
Bạn chia làm vài công đoạn:
a./ Tạo nhóm 3 từ cho mã của 1 danh sách hồ sơ;
b./ Xếp cột mã này theo chiều tăng
c./ Thêm chỉ số cho các mã trùng
Rất mong bạn thành công.
 
Bạn chia làm vài công đoạn:
a./ Tạo nhóm 3 từ cho mã của 1 danh sách hồ sơ;
b./ Xếp cột mã này theo chiều tăng
c./ Thêm chỉ số cho các mã trùng
Rất mong bạn thành công.
Cảm ơn bạn đã chia sẻ
Nhưng mình mới thêm được lọc trùng lặp.
Xong thêm lệnh thế nào vậy bạn

Function Name(Str As String) As String
Dim i As Byte
Str = Trim(Str): Name = Left(Str, 1)
For i = 1 To Len(Str)
If Mid(Str, i, 1) = " " Then Name = Name + Mid(Str, i + 1, 1)
Next
End Function
 
Bước (b) tiếp theo sẽ là sắp xếp theo chiều tăng dần của cột vừa tạo
Có thể bằng 2 cách:
Tự xếp bằng tay
Mở bộ thu lên thu các hành vi của bước trên & sau đó chỉnh lại câu lệnh nếu cần;

Họ & TênName
Bùi Xuân ThắmBXT
Bùi Thị Xuân ThànhBTXT
Châu Chấn HuyCCH
Cù LânCL
Công Tằng Tôn Nữ Minh NguyệtCTTNMN
Công Tằng Tôn Nữ Nguyệt MinhCTTNNM
Chu Ngọc SơnCNS
Cỗ Văn ẨnCVẨ
Dương Ánh HòaDÁH
Đào Đức DươngĐĐD
Đỗ Đăng DungĐĐD
Đinh La ThăngĐLT
Lê Công MinhLCM

Nhưng là mình thì mình chỉ chọn mã 'Name' này độ dài như nhau & là 03
Trường hợp như dòng 5 mình sẽ thêm J vô cho đủ 3 ( & sẽ là 'CJL')
Còng trường hợp dài quá cỡ, mình sẽ chỉ lấy 3 ký tự thôi: Đầu, áp cuối & cuối
Nếu đây thuộc quá trình tạo mã cho nhân viên cơ quan thì ta nên thêm công đoạn khử những từ tiếng việt có dấu & Đ => F thay vì D (ngõ hầu bớt trùng lặp mã được tạo ra)

Lấy độ dài mã luôn 3 có cái lợi là ta dễ thống kê xem trong CQ có bao nhiêu người là 'D' hay 'H',. . . .
 
Lần chỉnh sửa cuối:
Nếu ô C5 có chứa text "Mai Phương Thủy" thì mình sẽ lấy 3 chữ cái đầu bằng 3 công thức sau:
Chữ M - Mai:
=LEFT(C5,1)
Chữ P - Phương:
=MID(C5,FIND(" ",C5,1)+1,1)
Chữ T - Thuý:
=MID(C5,FIND(" ",C5,FIND(" ",C5,1)+1)+1,1)
Và cứ thế nếu còn chữ nào nữa.
Thân.
nếu tên dài ví dụ như: Nguyễn Trần Mai Thị Ngọc Ánh Tuyết thì cũng khó: Có một cách đơn giản cực kỳ: Text to columm----> sau đó lấy chữ cái đầu tiên (Cứ thoải mái cho tên có 20 chữ=20 cột) sau đó trim() là OK luôn.
 
nếu tên dài ví dụ như: Nguyễn Trần Mai Thị Ngọc Ánh Tuyết thì cũng khó: Có một cách đơn giản cực kỳ: Text to columm----> sau đó lấy chữ cái đầu tiên (Cứ thoải mái cho tên có 20 chữ=20 cột) sau đó trim() là OK luôn.
Nếu dùng excel 365 thì hàm giải quyết được mặc dù nó hơi dài.
 

File đính kèm

  • tách bằng hàm.xlsx
    10.6 KB · Đọc: 7
Đã viết thế thôi thà đừng viết còn hơn. Nhìn vô chóng mặt quá!
Nếu muốn tổng quát cho mọi trường hợp thì ta nên dùng VBA thì hơn.
PHP:
Function tachChD(cel As String, Optional k As Long = 1)
Dim arr() As String
arr() = Split(cel, " ")
tachChD = Left(arr(k - 1), 1)
End Function
Xem file!
Thân.
sao cái này em làm chỉ hiện được chữ cái dầu tiên bác nhỉ? Nếu em thay
Optional k As Long = 1 =>>>>
Optional k As Long = 2 thì được kết quả chữ thứ 2
Bài đã được tự động gộp:

cho mình hỏi thêm, nếu ký tự đầu tiên của họ tên mà có dấu, mình muốn khi tách ra mà không có dấu thì xử lý sao vậy, (nếu ký tự đầu họ tên mà có dấu thì mình bỏ dấu đi, không lấy dấu )
mình ví dụ: Nguyễn Ít, với code trên nó sẽ tách ra NÍ, kết quả mình muốn là NI
Nguyễn Ân với code trên nó sẽ tách ra NÂ kết quả mình muốn là NA
Mai Văn Á với code trên nó sẽ tách ra MVÁ kết quả mình muốn là MVA
đã test. oke luôn mới được. Cám ơn bạn
 
Lần chỉnh sửa cuối:
Xin được góp vui thêm 1 cách không dùng vòng lặp.
Mã:
Function KTD(str As String) As String
    If InStr(1, str, " ") = 0 Then
        KTD = Left(str, 1)
    Else
        KTD = Left(str, 1) & KTD(Mid(str, InStr(1, str, " ") + 1))
    End If
End Function
Em hỏi đoạn này với ạ:

KTD = Left(str, 1) & KTD(Mid(str, InStr(1, str, " ") + 1))
Left(str,1) => kết quả chữ cái đầu
nhưng KTD(Mid(str, Instr(1,str,"")+1 => em không hiểu sao nó có thể ra được các chữ cái Khác.
VD Pham Anh => PA thì oke nhưng Pham Anh Tao => thì sao ra dược "AT"
=> nhờ cụ giải thích thêm em đoạn này với ạ! Em cám ơn ạ
 
Tìm hiểu về Ctrl + E .. Nhanh nhưng khi dữ liệu thay đổi thì công thức cập nhật thêm vẫn chiếm ưu thế ( file nặng khi dữ liệu nhiều )
 
Vụ này chắc bao giờ lên chức Cụ mới dám trả lời đây.
Điều kiện để trở thành CỤ phải chăng đạt 1 trong những điều kiện:
1:= Cháu ngoại người đó đã có con;
2:= Nuôi con chim Cu khá mập & NẶNG;
3:= . . . . .
. . . . .
Left(str,1) => kết quả chữ cái đầu
nhưng KTD(Mid(str, Instr(1,str,"")+1 => em không hiểu sao nó có thể ra được các chữ cái Khác.

Function KTD(str As String) As String
If InStr(1, str, " ") = 0 Then
KTD = Left(str, 1)
Else
KTD = Left(str, 1) & KTD(Mid(str, InStr(1, str, " ") + 1))
MsgBox KTD
End If
End Function
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom