- Tham gia
- 21/12/07
- Bài viết
- 1,902
- Được thích
- 5,303
- Nghề nghiệp
- Kinh doanh các mặt hàng văn phòng phẩm
Topic này tập hợp các phương pháp mẫu, các công thức, hàm tự tạo hỗ trợ cho việc tách họ và tên.
Để hỏi đáp các vấn đề về tách họ tên, các bạn thảo luận trong Topic sau:
http://www.giaiphapexcel.com/forum/showthread.php?426
A. Dùng Công Thức
I.Tách họ
1>.
+ TRIM(A2) : Cắt bỏ những khoảng trắng thừa trong chuỗi. Tạo ra chuỗi Họ và tên theo chuẩn.
+ FIND(" ",TRIM(A2)) : Tìm vị trí khoảng trắng đầu tiên trong chuỗi.
+ FIND(" ",TRIM(A2))-1 : Tìm chiều dài Họ cần tách
2>.
+ SUBSTITUTE(TRIM(A2)," "," ") : Tìm và thay thế chiều dài khoảng trắng trong chuỗi từ 1 lên 6.
+ LEFT(SUBSTITUTE(TRIM(A2)," "," "),7) : Cắt chuỗi từ bên trái qua phải với 7 ký tự (Trả về Chuỗi Họ).
+ TRIM(LEFT(SUBSTITUTE(TRIM(A2)," "," "),7)) : Cắt bỏ khoảng trắng thừa trong Chuỗi Họ tìm được.
3>.
+ FIND(" ",TRIM(A2)) : Tìm vị trí khoảng trắng đầu tiên trong chuỗi.
+ REPLACE(TRIM(A2),FIND(" ",TRIM(A2)),30,"") : Thay thế chuỗi bắt đầu từ vị trí khoảng trắng đầu tiên đến hết chuỗi (chuỗi con trong chuỗi Họ và tên) bằng rỗng.
II. Tách tên lót
1>.
+ ROW($1:$50) : Tạo ra một mảng gồm 50 phần tử từ 1->50
+ MID(TRIM(A2),ROW($1:$50),1) : Cắt giữa chuỗi của chuỗi Họ và tên với vị trí bắt đầu từ 1 ->50, với chiều dài chuỗi cần cắt là 1 ký tự.
----Hàm trên sẽ trả về một mảng gồm 50 phần tử.vừa có ký tự thường, vùa có khoảng trắng và ký tự rỗng.
+ MID(TRIM(A2),ROW($1:$50),1)=" " : Toán tử so sánh 50 phần tử tìm được với ký tự khoảng trắng.
----Toán tử trên sẽ trả về một mảng gồm 50 phần tử True or False, Nếu so sánh đúng thì trả về True, ngược lại là False.
+ MID(TRIM(A2),ROW($1:$50),1)=" ")*ROW($1:$50) : Toán tử tạo ra một mảng gồm 50 phần tử (mảng số)
----Nếu phần tử nào là False thì sẽ trả về 0, Là TRUE thì trả về số ứng với vị trí của phần tử TRUE đó.
+ MAX((MID(TRIM(A2),ROW($1:$50),1)=" ")*ROW($1:$50)) : Tìm ra phần tử có giá trị lớn nhất trong mảng số tìm được ở trên.
----Hàm trên sẽ trả về vị trí khoảng trắng lớn nhất trong chuỗi Họ và tên.
+ MAX((MID(TRIM(A2),ROW($1:$50),1)=" ")*ROW($1:$50))-FIND(" ",TRIM(A2)) : Trả về chiều dài của Tên lót.
+ MID(TRIM(A2),FIND(" ",TRIM(A2))+1,MAX((MID(TRIM(A2),ROW($1:$50),1) =" ")*ROW($1:$50))-FIND(" ",TRIM(A2)))
----Hàm cắt giữa chuỗi Họ và tên với vị trí bắt đầu là vị trí khoảng trắng đầu tiên+1, với chiều dài chuỗi cần cắt đã tìm ở trên.
+ {} : Ký hiệu của hàm mảng, sau khi gõ xong công thức, nhấn Ctrl+Shift+Enter, các toán tử mảng sẽ bắt đầu hoạt động.
III. Tách Tên
1>.
+ Diễn giải công thức tương tự như mục 2 phần Tách Họ.
2>.
+ MAX((MID(TRIM(A2),ROW($1:$50),1)=" ")*ROW($1:$50)) : Tìm vị trí khoảng trắng lớn nhất trong chuỗi Họ và Tên.
+ MAX((MID(TRIM(A2),ROW($1:$50),1)=" ")*ROW($1:$50))+1 : Tìm vị trí đầu tiên của chuỗi Tên.
+ MID(TRIM(A2),MAX((MID(TRIM(A2),ROW($1:$50),1)=" ")*ROW($1:$50))+1,7) : Cắt chuỗi Họ và Tên với chiều dài chuỗi cần cắt là 7.
3>.
+ LEN(TRIM(A2)) : Tìm chiều dài chuẩn của chuỗi Họ và Tên.
+ MAX((MID(TRIM(A2),ROW($1:$50),1)=" ")*ROW($1:$50)) : Tìm vị trí khoảng trắng lớn nhất trong chuỗi Họ và Tên.
+ LEN(TRIM(A2))-MAX((MID(TRIM(A2),ROW($1:$50),1)=" ")*ROW($1:$50)) : Tìm chiều dài của chuỗi Tên cần tách.
+ RIGHT(TRIM(A2),LEN(TRIM(A2))-MAX((MID(TRIM(A2),ROW($1:$50),1)=" ")*ROW($1:$50))) : Cắt phải chuỗi Họ và Tên.
4>.
+ MAX((MID(TRIM(A2),ROW($1:$50),1)=" ")*ROW($1:$50)) : Tìm vị trí khoảng trắng lớn nhất trong chuỗi Họ và Tên.
+ REPLACE(TRIM(A2),1,MAX((MID(TRIM(A2),ROW($1:$50),1 )=" ")*ROW($1:$50)),"") : Thay thế chuỗi không chứa tên bằng rỗng.
5>.
+ SUBSTITUTE(A2," ","") : Thay thế ký tự khoảng trắng trong chuỗi Họ và Tên bằng rỗng.
+ LEN(SUBSTITUTE(A2," ","")) : Tìm chiều dài chuỗi Họ và Tên sau khi bỏ đi khoảng trắng.
+ LEN(TRIM(A2))-LEN(SUBSTITUTE(A2," ","")) : Tìm số khoảng trắng trong chuỗi Họ và Tên ban đầu.
+ SUBSTITUTE(TRIM(A2)," ","-",LEN(TRIM(A2))-LEN(SUBSTITUTE(A2," ",""))) : Thay thế ký tự " " bằng "-" ở vị trí " " lớn nhất trong chuỗi.
+ FIND("-",SUBSTITUTE(TRIM(A2)," ","-",LEN(TRIM(A2))-LEN(SUBSTITUTE(A2," ","")))) : Tìm vị trí của ký tự "-" trong chuỗi.
+ LEN(TRIM(A2))-FIND("-",SUBSTITUTE(TRIM(A2)," ","-",LEN(TRIM(A2))-LEN(SUBSTITUTE(A2," ","")))) : Tìm chiều dài chuỗi Tên cần tách.
B. Dùng chức năng Text to Column
1>. Bước 1 : Chọn toàn bộ vùng dữ liệu muốn tách.
2>. Bước 2 : Vào Data chọn Text to Columns, xuất hiện bảng chọn Original data type, chọn Delimited, Next
3>. Bước 3 : Xuất hiện bảng chọn Delimited : chọn Space, Finish
C. Sử dụng hàm tự tạo
Ví dụ áp dụng:
=tachten("Nguyễn Cảnh Hoàng Danh,2) kết quả là Nguyễn Cảnh Hoàng
=tachten("Nguyễn Cảnh Hoàng Danh) kết quả là Danh
Hoặc dùng:
Ví dụ áp dụng:
=TachHoTen("Nguyễn Duy Khánh"). Kết quả là "Khánh".
=TachHoTen("Nguyễn Duy Khánh",False). Kết quả là "Nguyễn Duy".
Hàm InStrRev chỉ dùng từ Office2000(v9) trở lên.
Hoặc dùng:
Ví dụ áp dụng:
=TachTen("Nguyễn Văn Sơn",1) kết quả là "Sơn"
Hoặc dùng:
Ví dụ áp dụng: A1 chứa chuỗi "Nguyễn Văn A"
=Tach(A1," ","ho") kết quả là Nguyễn
=Tach(A1," ","lot") kết qủa là Văn
=Tach(A1," ","ten") kết quả là A
Hoặc dùng:
Ví dụ áp dụng: Ví dụ ô A1 chưa chuỗi "Hoàng Trọng Nghĩa"
=TachHoTenLot(A1) kết quả là "Hoàng Trọng"
=TachHo(A1) kết quả là "Hoàng"
=TachTenLot(A1) kết quả là "Trọng"
=TachTen(A1) kết quả là "Nghĩa"
Để hỏi đáp các vấn đề về tách họ tên, các bạn thảo luận trong Topic sau:
http://www.giaiphapexcel.com/forum/showthread.php?426
A. Dùng Công Thức
I.Tách họ
1>.
PHP:
=LEFT(TRIM(A2),FIND(" ",TRIM(A2))-1)
+ FIND(" ",TRIM(A2)) : Tìm vị trí khoảng trắng đầu tiên trong chuỗi.
+ FIND(" ",TRIM(A2))-1 : Tìm chiều dài Họ cần tách
2>.
PHP:
=TRIM(LEFT(SUBSTITUTE(TRIM(A2)," "," "),7))
+ LEFT(SUBSTITUTE(TRIM(A2)," "," "),7) : Cắt chuỗi từ bên trái qua phải với 7 ký tự (Trả về Chuỗi Họ).
+ TRIM(LEFT(SUBSTITUTE(TRIM(A2)," "," "),7)) : Cắt bỏ khoảng trắng thừa trong Chuỗi Họ tìm được.
3>.
PHP:
=REPLACE(TRIM(A2),FIND(" ",TRIM(A2)),30,"")
+ REPLACE(TRIM(A2),FIND(" ",TRIM(A2)),30,"") : Thay thế chuỗi bắt đầu từ vị trí khoảng trắng đầu tiên đến hết chuỗi (chuỗi con trong chuỗi Họ và tên) bằng rỗng.
II. Tách tên lót
1>.
PHP:
{=MID(TRIM(A2),FIND(" ",TRIM(A2))+1,MAX((MID(TRIM(A2),ROW($1:$50),1) =" ")*ROW($1:$50))-FIND(" ",TRIM(A2)))}
+ MID(TRIM(A2),ROW($1:$50),1) : Cắt giữa chuỗi của chuỗi Họ và tên với vị trí bắt đầu từ 1 ->50, với chiều dài chuỗi cần cắt là 1 ký tự.
----Hàm trên sẽ trả về một mảng gồm 50 phần tử.vừa có ký tự thường, vùa có khoảng trắng và ký tự rỗng.
+ MID(TRIM(A2),ROW($1:$50),1)=" " : Toán tử so sánh 50 phần tử tìm được với ký tự khoảng trắng.
----Toán tử trên sẽ trả về một mảng gồm 50 phần tử True or False, Nếu so sánh đúng thì trả về True, ngược lại là False.
+ MID(TRIM(A2),ROW($1:$50),1)=" ")*ROW($1:$50) : Toán tử tạo ra một mảng gồm 50 phần tử (mảng số)
----Nếu phần tử nào là False thì sẽ trả về 0, Là TRUE thì trả về số ứng với vị trí của phần tử TRUE đó.
+ MAX((MID(TRIM(A2),ROW($1:$50),1)=" ")*ROW($1:$50)) : Tìm ra phần tử có giá trị lớn nhất trong mảng số tìm được ở trên.
----Hàm trên sẽ trả về vị trí khoảng trắng lớn nhất trong chuỗi Họ và tên.
+ MAX((MID(TRIM(A2),ROW($1:$50),1)=" ")*ROW($1:$50))-FIND(" ",TRIM(A2)) : Trả về chiều dài của Tên lót.
+ MID(TRIM(A2),FIND(" ",TRIM(A2))+1,MAX((MID(TRIM(A2),ROW($1:$50),1) =" ")*ROW($1:$50))-FIND(" ",TRIM(A2)))
----Hàm cắt giữa chuỗi Họ và tên với vị trí bắt đầu là vị trí khoảng trắng đầu tiên+1, với chiều dài chuỗi cần cắt đã tìm ở trên.
+ {} : Ký hiệu của hàm mảng, sau khi gõ xong công thức, nhấn Ctrl+Shift+Enter, các toán tử mảng sẽ bắt đầu hoạt động.
III. Tách Tên
1>.
PHP:
=TRIM(RIGHT(SUBSTITUTE(TRIM(A2)," "," "),7))
2>.
PHP:
{=MID(TRIM(A2),MAX((MID(TRIM(A2),ROW($1:$50),1)=" ")*ROW($1:$50))+1,7)}
+ MAX((MID(TRIM(A2),ROW($1:$50),1)=" ")*ROW($1:$50))+1 : Tìm vị trí đầu tiên của chuỗi Tên.
+ MID(TRIM(A2),MAX((MID(TRIM(A2),ROW($1:$50),1)=" ")*ROW($1:$50))+1,7) : Cắt chuỗi Họ và Tên với chiều dài chuỗi cần cắt là 7.
3>.
PHP:
{=RIGHT(TRIM(A2),LEN(TRIM(A2))-MAX((MID(TRIM(A2),ROW($1:$50),1)=" ")*ROW($1:$50)))}
+ MAX((MID(TRIM(A2),ROW($1:$50),1)=" ")*ROW($1:$50)) : Tìm vị trí khoảng trắng lớn nhất trong chuỗi Họ và Tên.
+ LEN(TRIM(A2))-MAX((MID(TRIM(A2),ROW($1:$50),1)=" ")*ROW($1:$50)) : Tìm chiều dài của chuỗi Tên cần tách.
+ RIGHT(TRIM(A2),LEN(TRIM(A2))-MAX((MID(TRIM(A2),ROW($1:$50),1)=" ")*ROW($1:$50))) : Cắt phải chuỗi Họ và Tên.
4>.
PHP:
{=REPLACE(TRIM(A2),1,MAX((MID(TRIM(A2),ROW($1:$50) ,1)=" ")*ROW($1:$50)),"")}
+ REPLACE(TRIM(A2),1,MAX((MID(TRIM(A2),ROW($1:$50),1 )=" ")*ROW($1:$50)),"") : Thay thế chuỗi không chứa tên bằng rỗng.
5>.
PHP:
=RIGHT(TRIM(A2),LEN(TRIM(A2))-FIND("-",SUBSTITUTE(TRIM(A2)," ","-",LEN(TRIM(A2))-LEN(SUBSTITUTE(A2," ","")))))
+ LEN(SUBSTITUTE(A2," ","")) : Tìm chiều dài chuỗi Họ và Tên sau khi bỏ đi khoảng trắng.
+ LEN(TRIM(A2))-LEN(SUBSTITUTE(A2," ","")) : Tìm số khoảng trắng trong chuỗi Họ và Tên ban đầu.
+ SUBSTITUTE(TRIM(A2)," ","-",LEN(TRIM(A2))-LEN(SUBSTITUTE(A2," ",""))) : Thay thế ký tự " " bằng "-" ở vị trí " " lớn nhất trong chuỗi.
+ FIND("-",SUBSTITUTE(TRIM(A2)," ","-",LEN(TRIM(A2))-LEN(SUBSTITUTE(A2," ","")))) : Tìm vị trí của ký tự "-" trong chuỗi.
+ LEN(TRIM(A2))-FIND("-",SUBSTITUTE(TRIM(A2)," ","-",LEN(TRIM(A2))-LEN(SUBSTITUTE(A2," ","")))) : Tìm chiều dài chuỗi Tên cần tách.
B. Dùng chức năng Text to Column
1>. Bước 1 : Chọn toàn bộ vùng dữ liệu muốn tách.
2>. Bước 2 : Vào Data chọn Text to Columns, xuất hiện bảng chọn Original data type, chọn Delimited, Next
3>. Bước 3 : Xuất hiện bảng chọn Delimited : chọn Space, Finish
C. Sử dụng hàm tự tạo
Mã:
Function Tachten(Hovaten As String, Optional Tuychon As Byte = 1) As String
Dim F As Byte, L As Byte
Application.Volatile (False)
Hovaten = WorksheetFunction.Trim(Hovaten)
F = InStr(Hovaten, " "): L = InStrRev(Hovaten, " ")
Select Case Tuychon
Case 1 'Ten
Tachten = Mid(Hovaten, L + 1, 10)
Case 2 'Ho lot
Tachten = Left(Hovaten, L - 1)
Case 3 'Ho
Tachten = Left(Hovaten, F - 1)
Case 4 'Lot
Tachten = Mid(Hovaten, F + 1, L - F - 1)
End Select
End Function
Ví dụ áp dụng:
=tachten("Nguyễn Cảnh Hoàng Danh,2) kết quả là Nguyễn Cảnh Hoàng
=tachten("Nguyễn Cảnh Hoàng Danh) kết quả là Danh
Hoặc dùng:
Mã:
'Link: http://www.giaiphapexcel.com/forum/showthread.php?30872
Function TachHoTen(ByVal HoVaTen As String, Optional TachTen As Boolean = True) As String
Dim Pos_Right As Integer
If HoVaTen = "" Then GoTo EndFunc
HoVaTen = Trim(HoVaTen) 'Xoa khoang trang hai ben cua "HoVaTen"
Pos_Right = InStrRev(HoVaTen, " ")
'Kiem tra hop le
If Pos_Right = 0 Or Pos_Right - 1 < 0 Or Pos_Right + 1 > Len(HoVaTen) Then
GoTo EndFunc:
End If
If TachTen Then
TachHoTen = Mid(HoVaTen, Pos_Right + 1)
Else
TachHoTen = Left(HoVaTen, Pos_Right - 1)
End If
EndFunc:
End Function
Ví dụ áp dụng:
=TachHoTen("Nguyễn Duy Khánh"). Kết quả là "Khánh".
=TachHoTen("Nguyễn Duy Khánh",False). Kết quả là "Nguyễn Duy".
Hàm InStrRev chỉ dùng từ Office2000(v9) trở lên.
Hoặc dùng:
Mã:
'Link: http://www.giaiphapexcel.com/forum/showthread.php?30872
Option Explicit
Public Function TachTen(strText, Typename) As String
On Error GoTo thoat
Dim Ho, Ten
Ten = Split(Trim(strText), Space(1), , vbTextCompare)
Ho = Trim(Replace(Trim(strText), Ten(UBound(Ten)), ""))
If Typename Then
TachTen = Ten(UBound(Ten))
Else
TachTen = Ho
End If
thoat:
End Function
Ví dụ áp dụng:
=TachTen("Nguyễn Văn Sơn",1) kết quả là "Sơn"
Hoặc dùng:
Mã:
'Link: http://www.giaiphapexcel.com/forum/showthread.php?30872
Option Explicit
Function tach(Chuoi As Range, Kytu As String, Loai As String)
Dim m, n, i As Byte
Dim Bebe As String
Bebe = WorksheetFunction.Trim(Chuoi.Value)
For i = 1 To Len(Bebe)
If Mid(Bebe, i, 1) = Kytu Then
m = i
If n = 0 Then n = i
End If
Next
If Bebe = "" Or n = 0 Then
tach = ""
ElseIf m = n And UCase(Loai) = "LOT" Then
tach = ""
Else
Select Case UCase(Loai)
Case "HO"
tach = Left(Bebe, n - 1)
Case "TEN"
tach = Mid(Bebe, m + 1)
Case "LOT"
tach = Mid(Bebe, n + 1, m - n - 1)
End Select
End If
End Function
=Tach(A1," ","ho") kết quả là Nguyễn
=Tach(A1," ","lot") kết qủa là Văn
=Tach(A1," ","ten") kết quả là A
Hoặc dùng:
Mã:
'Link: http://www.giaiphapexcel.com/forum/showthread.php?92080
Option Explicit
Function TachHo(ByVal HoTen As String) As String
HoTen = Trim(HoTen)
If HoTen = "" Then Exit Function
Dim SplHoTen
SplHoTen = Split(HoTen, " ")
TachHo = SplHoTen(0)
End Function
Function TachTen(ByVal HoTen As String) As String
HoTen = Trim(HoTen)
If HoTen = "" Then Exit Function
Dim SplHoTen
SplHoTen = Split(HoTen, " ")
TachTen = SplHoTen(UBound(SplHoTen))
End Function
Function TachTenLot(ByVal HoTen As String) As String
HoTen = WorksheetFunction.Trim(HoTen)
If HoTen = "" Then Exit Function
Dim SplHoTen, u As Long
SplHoTen = Split(HoTen, " ")
u = UBound(SplHoTen) - 1
If u > 0 Then
ReDim Preserve SplHoTen(0 To u)
TachTenLot = Join(SplHoTen, " ")
TachTenLot = Mid(TachTenLot, InStr(TachTenLot, " ") + 1)
End If
End Function
Function TachHoTenLot(ByVal HoTen As String) As String
HoTen = WorksheetFunction.Trim(HoTen)
If HoTen = "" Then Exit Function
Dim SplHoTen, u As Long
SplHoTen = Split(HoTen, " ")
u = UBound(SplHoTen) - 1
If u = -1 Then
TachHoTenLot = HoTen
Else
ReDim Preserve SplHoTen(0 To u)
TachHoTenLot = Join(SplHoTen, " ")
End If
End Function
'Tach Ten Tat
Function HoTenTat(ByVal HoTen As String) As String
HoTen = Trim(HoTen)
If HoTen = "" Then Exit Function
Dim SplHoTen, i As Long
SplHoTen = Split(HoTen, " ")
For i = 0 To UBound(SplHoTen)
If SplHoTen(i) > " " Then
HoTenTat = HoTenTat + Left(SplHoTen(i), 1)
End If
Next
End Function
Ví dụ áp dụng: Ví dụ ô A1 chưa chuỗi "Hoàng Trọng Nghĩa"
=TachHoTenLot(A1) kết quả là "Hoàng Trọng"
=TachHo(A1) kết quả là "Hoàng"
=TachTenLot(A1) kết quả là "Trọng"
=TachTen(A1) kết quả là "Nghĩa"
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote
0