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

  • Thread starter Thread starter daerty5
  • Ngày gửi Ngày gửi
Liên hệ QC
À em làm được rồi, bỏ cái hàm sub.. đi là ổn!
 
Bỏ Substitute, nhưng nên thêm Trim vào.
 
Cảm ơn bạn vungoc rất nhiều về bài viết này!
Mình cũng đã từng biết đến cách tách họ và tên này cũng như thực hành làm nhiều lần và đều OK. Tuy nhiên, có một điều mình băn khoăn là cứ khi đóng File Excel vừa thực hiện tách họ và tên sau đó mở lại File thì không thể thực hiện làm hàm như vậy để cho ra kết quả được nữa mà đều trả kết quả #NAME?. Mình muốn hỏi có cách nào để khắc phục vấn đề này không hay đây là tính năng mặc định của cách làm này rùi. Vì nhiều khi lập danh sách trong quản lý nhân sự cần có thêm người mới mà không thực hiện được. Vungoc hay diễn đàn nhà mình ai biết thì chỉ giúp mình nha.
 
ACE chi e cách tách chuỗi này đi

Em muốn tách chuỗi như sau
Nguyễn Văn Anh -> trả về kết quả: Nguyễn Văn
Nguyễn Anh -> trả về kết quả: Nguyễn
Trần lê văn Dũng trả -> về kết quả: Trần Lê Văn
 
Em muốn tách chuỗi như sau
Nguyễn Văn Anh -> trả về kết quả: Nguyễn Văn
Nguyễn Anh -> trả về kết quả: Nguyễn
Trần lê văn Dũng trả -> về kết quả: Trần Lê Văn
Có thể dùng hàm tự tạo này
Mã:
Public Function tach(Cll As Range) As String
    tach = Left(Cll, InStrRev(Cll, " ") - 1)
End Function
 
Mình đã làm rồi, coppy hàm từ quyển sách Microsoft Excel 2007 Bible, bạn xem file đính kèm,
Em muốn tách chuỗi như sau
Nguyễn Văn Anh -> trả về kết quả: Nguyễn Văn
Nguyễn Anh -> trả về kết quả: Nguyễn
Trần lê văn Dũng trả -> về kết quả: Trần Lê Văn
 

File đính kèm

Em muốn tách chuỗi như sau
Nguyễn Văn Anh -> trả về kết quả: Nguyễn Văn
Nguyễn Anh -> trả về kết quả: Nguyễn
Trần lê văn Dũng trả -> về kết quả: Trần Lê Văn
Công thức này:
PHP:
=TRIM(LEFT(SUBSTITUTE(TRIM($A2)," ",REPT(" ",LEN(TRIM($A2)))),LEN(TRIM($A2))*(LEN(TRIM($A2))-LEN(SUBSTITUTE(TRIM($A2)," ","")))))
Với A1 là cell chứa chuổi họ và tên
-----------------------
File của đồng chí này:
Mình đã làm rồi, coppy hàm từ quyển sách Microsoft Excel 2007 Bible, bạn xem file đính kèm,
Chưa đúng yêu cầu
Hãy thử tách chuổi Phùng Văn Văn xem nó ra cái gì
 

File đính kèm

Họ tên thường nhập chung 1 cột cho nhanh. Sau đó ta có thể tách riêng tên ra 1 cột. Nhưng có lúc chúng ra cần tách ra 2 cột: cột họ, cột tên. Đây là 2 làm làm công việc đó:
'======================
Function TachHo(hoten As String) As String
hoten = Trim(hoten)
If hoten = "" Then
TachHo = ""
Else
vt = InStrRev(hoten, " ", Len(hoten))
If vt = 0 Then
TachHo = ""
Else
TachHo = Trim(Mid(hoten, 1, vt))
End If
End If
End Function

'====================
Function TachTen(hoten As String) As String
hoten = Trim(hoten)
If hoten = "" Then
TachTen = ""
Else
vt = InStrRev(hoten, " ", Len(hoten))
If vt = 0 Then
TachTen = hoten
Else
TachTen = Mid(hoten, vt + 1)
End If
End If
End Function

'===================
Bạn sử dụng hàm này bình thường như các hàm khác của Excel, nhưng nếu bạn cần tách họ tên thành 2 cột riêng biệt thì bạn phải thực hiện một loạt các thao tác sau:
1. tách họ, tách tên trên 2 cột phụ
2. chèn thêm cột bên trái cột họ tên
3. Copy 2 cột họ tên mới tách và dán bằng Paste Special - Value trở về nơi cũ.
Để làm nhanh các công việc đó, bạn có thể sử dụng thủ tuc TachHoTen.
Sử dụng thủ tục này như sau:
1. Chọn tất cả các ô chứa họ tên, kể cả ô chứa tiêu đề trên đầu.
2. Chạy Sub TachHoTen.
VBA sẽ làm thay cho bạn các việc còn lại. Lưu ý bạn là số cột trong vùng chọn phải là 1, nếu lớn hơn 1 VBA không thực hiện.

'====================
Sub TachHoTen()
rd = Selection.Row
sr = Selection.Rows.Count
rc = rd + sr - 1
c = Selection.Column
sc = Selection.Columns.Count
If sc > 1 Then
MsgBox "Ban chon " & sc & " cot. Ban phai chon lai 1 cot", vbOKOnly, "Thong bao"
Exit Sub
End If
Range(Cells(rd, c), Cells(rc, c)).Insert Shift:=xlToRight
Range(Cells(rd, c), Cells(rc, c)).Insert Shift:=xlToRight
For r = rd To rc
Cells(r, c) = TachHo(Cells(r, c + 2))
Cells(r, c + 1) = TachTen(Cells(r, c + 2))
Next
Range(Cells(rd, c + 2), Cells(rc, c + 2)).Delete Shift:=xlToLeft
End Sub
'==============
Bạn có thể tham khảo trong tập tin TachHoTen.zip

anh ơi...làm sao để chay sub tachhoten ạ// em vẫn chưa rõ lắm...thánks anh nhiều ạ....

- Tải cái này về và xem hướng dẫn kèm theo để cài đặt.
- Chạy ếch xèo lên vào Format -> TiengViet-TCVN -> Tach gop ho ten.
- Chý ú : Insert thêm 1 cột để phần tên tách ra không đè lên cột bên cạnh.

View attachment 2384
cái này ăn sẵn lại hay, mà lại đơn giản....thanks
 
Chỉnh sửa lần cuối bởi điều hành viên:
Sáng tạo tí là đc mà

@ndu96081631
Công thức đó ko hắn sai, mà do ko tính hai exp là chuỗi rỗng và bị lặp lại từ cuối trong tên!
Muốn cho công thức của nhỏ @cuncon207 đúng cũng dễ ấy mà ;)! Append một kí tụ "đặc biệt" nào đó thôi!
SUBSTITUTE(A2&"}";RIGHT(A2; LEN(A2)-FIND("*";SUBSTITUTE(A2;" ";"*";LEN(A2)-LEN(SUBSTITUTE(A2;" ";"")))))&"}";"")

Nếu từ chỉ có 1 kí tự hay empty thì có thể gây error nên ta cần handle thêm với ISERROR là ổn! Cug co the TRIM them neu can

IF (
ISERROR(FIND(" ", TRIM(A2), 1))=TRUE,
A2,
SUBSTITUTE
(
A2&"}";

RIGHT(
A2;
LEN(A2)
-
FIND
(
"*";
SUBSTITUTE
(
A2;
" ";
"*";
LEN(A2)
-
LEN(
SUBSTITUTE
(A2;" ";"")
)
)
)

)&"}";

""
)
)

Mình ko có Office nên phai xài tạm google docs
http://spreadsheets.google.com/ccc?key=0Av38yBmT-zOCdEhRcHQzZW96VkJJeElCUHJYZVdCd1E&hl=en

@em Sinh,
Thật sự thì a ko biết excel! Nhg góp ý với e tí!
Làm gì e chỉ cần hiểu vấn đề tí là làm đc!

Vấn đề của em là tách ra phần tên, hay cụ thể hơn là tách ra từ cuối cùng rồi bỏ nó đi!
Nhg mình phải có chút sáng tạo thì mới xong việc!
Một thuân toán hay mà gọn là
0.Chuẩn hóa xâu (xóa khoảng trắng ở 2 đầu đi(nếu cần có thể xóa các khoảng trắng liên tiếp) )
1.Em tìm từ cuối cùng
2.Thay từ cuối cùng này thành chuỗi rồng( đồng nghĩa với xóa nó đi)
Vậy là xong!

Tuy nhiên điều này sẽ thất bại nếu tên có từ giống nhau, ví dụ
Vân Phiêu Phiêu, vì chữ Phiêu lặp lại, nên khi mình thay từ Phiêu thành chuỗi rỗng nó tiễn cả 2 từ Phiêu đi luôn

Nhg với một chút sáng tạo nho nhỏ! Ta phải làm sao cho cái từ cuối cùng của tên trở thành DUY NHẤT!
Ngĩa là dù em có Vân Phiêu Phiêu, hay Lý Sư Sư, hay Đinh Đinh Đang Đang thì cái từ Phiêu cuối cùng,
từ Sư cuối cùng, từ Đang cuối cùng phải trở thành duy nhất trong chuỗi!
Tưởng tượng rằng, nếu e có thể biến
Vân Phiêu Phiêu thành Vân Phiêu Phiêu}
Lý Sư Sư thành Lý Sư Sư}
Đinh Đinh Đang Đang thành Đinh Đinh Đang Đang}
(thêm 1 kí tự } vào cuối)
Thì rõ ràng các từ Sư} , Phiêu} , Đang} trở thàn duy nhất
(vì nó viết liên tiếp các kí tự, ko có khoảng trắng ở giữa thì thành một từ)

Ta biết nó là duy nhất vì ta chắc chắn rằng tên tiếng Viêt ko thể nào có kí tự } trong đó được Sư # Sư}, Phiêu # Phiêu},...

Thuật toán là vậy đó!
 
Lần chỉnh sửa cuối:
Công thức nào để tách tên?

Mình có 1 cột đã được ghép 2 tên với nhau, ví dụ như An/Nam. Bây giờ mình muốn tách tên An ra 1 cột, tên Nam ra 1 cột thì phải dùng công thức như thế nào? Mong các bạn giúp đỡ. Xin cám ơn!
 

File đính kèm

Mình có 1 cột đã được ghép 2 tên với nhau, ví dụ như An/Nam. Bây giờ mình muốn tách tên An ra 1 cột, tên Nam ra 1 cột thì phải dùng công thức như thế nào? Mong các bạn giúp đỡ. Xin cám ơn!
Cái này cần gì đến hàm đâu bạn, nếu chỉ có thế bạn làm như sau:
bôi đen cột c, sau đó vào menu data--->chọn Text to columns ---->tích vào Delimited---> nhấn Next--->Mục Other đánh dấu"/" vào thế là ok
- Chú ý: để đưa dữ liệu theo như bạn yêu cầu sang cột d,e thì đến mục De..->Next nó hiện lên cái bảng trong đó có cái Type(Destination=c1-->thay bằng d1)
 
Lần chỉnh sửa cuối:
Chào các bạn.
Để không dùng VBA, mình có vài công thức các bạn test thử thế nào nhé.

Giả sử ô A1 có chứa "Họ Chữ lót Tên"
Lấy Họ :
=LEFT(A4,FIND(" ",A4,1))

Lấy Họ và Chữ lót :
=LEFT(A4,FIND("*",SUBSTITUTE(A4," ","*",LEN(A4)-LEN(SUBSTITUTE(A4," ",""))))-1)

Lấy Tên :
=RIGHT(A1,LEN(A1)-FIND("*",SUBSTITUTE(A1," ","*",LEN(A1)-LEN(SUBSTITUTE(A1," ","")))))


Thân !

Phiền các bác giải thích cho em công thức bôi đậm này với, đặc biệt là dấu * là gì ah?
 
Phiền các bác giải thích cho em công thức bôi đậm này với, đặc biệt là dấu * là gì ah?

Bạn ui, mình cùng nhau phân tích từ trong ra ngoài nhen!

=RIGHT(A1,LEN(A1)-FIND("*",SUBSTITUTE(A1," ","*",LEN(A1)-LEN(SUBSTITUTE(A1," ","")))))

Bước 1. SUBSTITUTE(A1," ","") tức là thay toàn bộ các khoảng trắng trong chuỗi A1 bằng chuỗi rỗng (""), trở thành chuỗi mới không có khoảng trắng nào, ta đặt tên chuỗi mới này là Text2

Bước 2. Lấy Len(A1) - Len(Text2), ta sẽ được số khoảng trắng có trong chuỗi ban đầu, vì so với chuỗi ban đầu, Text2 đã loại ra số khoảng trắng đó đó. Thí dụ họ tên có 5 từ "Công Tằng Tôn Nữ Monalisa" thì số khoảng trắng là 4.

Bước 3. SUBSTITUTE(A1," ","*", 4) là thay khoảng trắng thứ 4 trong chuỗi ban đầu bằng ký tự "*" là 1 ký tự đặc biệt bất kỳ mà tên người ta không có. Có thể dùng ký tự khác như "@", "|", ... Ta được 1 chuỗi mới gọi là Text3. Text 3 có 3 khoảng trắng và 1 ký tự "*"

Bước 4. Dùng Find tìm xem trong Text3 ký tự "*" nằm ở vị trí thứ mấy

Bước 5. Dùng Right để lấy phần bên phải của ký tự "*" vừa tìm được.

Bước 6. (Bắt chước sư phụ ptm0412): Nhấn thank cho Monalisa 2 cái hén.
 
Các bác ơi giúp em ghép 2 cột làm 1 mà ko mất dữ liệu với ạ.

Các bác ơi giúp em ghép 2 cột làm 1 mà ko mất dữ liệu với ạ.
Em cần ghép 2 cột nam nữ làm 1 vì nó có năm sinh ở đấy. Phía cuối lại có cột tính tuổi xem đã đến 18 tuổi chưa.
Ghép 2 cột Nam nữ - năm sinh vào làm 1 để làm 1 cột năm sinh thôi mà ko mất dữ liệu.
Giúp em với nhé.
Đây là ảnh ạ!
 

File đính kèm

  • danh sach.jpg
    danh sach.jpg
    75.9 KB · Đọc: 79
Bạn thích cột E hông? Lấy cột E nhen!

E5 = C5 + D5

Xế nà thong!
 
Web KT

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

Back
Top Bottom