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

Liên hệ QC
Trong cùng 1 ô.VD: [FONT=.VnTime]chÞ h»ng -71 chïa l¸ng, dong da[/FONT] bây giờ tớ muốn tách ra lam 4 cột mà không có cách nao, giup minh voi
 
Trong cùng 1 ô.VD: "Chị Hằng -71 chùa Láng, Đống Đa" bây giờ tớ muốn tách ra lam 4 cột mà không có cách nao, giup minh voi
Có phải ý bạn như thế này không ?
| A | B | C | D 1 | Chị Hằng -71 chùa Láng, Đống Đa|||
2 |Chị Hằng|-71|chùa Láng, |Đống Đa

Nếu đúng như vậy thì bạn xem hướng dẫn hình bên dười! Dùng chức năng Text To Columns của Excel.

Step0.jpg


Step1.jpg



Những mũi tên hướng lên (Arrows) tượng trưng cho sự ngăn cách giữa các cột, bạn có thể di chuyển các mũi tên này để tạo ra các cột tùy ý!
Stpe2.jpg


Step3.jpg
 
Xin hỏi em muốn tách tên bằng phim tắt thì sao nhỉ! Ctrl+Shift+T
 
Xin ké thêm 1 cách của em nữa!
PHP:
Function TachTenPo(HoTen As String, Optional Vitri As Byte = 1) As String
'' Po_PiKachu
''Vtri = 1: Ho ; Vtri = 2: TenLot ; Vtri = 3: Ten ; Vtri = 4: HoTenlot
    Dim arr() As String
    Dim K As Long
    arr() = Split(HoTen, " ")
    K = UBound(arr)
    TachTenPo = Choose(Vitri, arr(0), Trim(Replace(Replace(HoTen, arr(K), ""), arr(0), "")), _
                       arr(K), Trim(Replace(HoTen, arr(K), "")))
End Function
và xin dẫn đến trang này. Vì có nhiều điều trong đó cũng hay lắm.
Thân.
 
Mình làm macro như bạn PhanTuHuong được rồi, nhưng muốn đưa macro này thành một biểu tượng trên thanh công cụ của excel luôn để khi nào cần dùng thì thì bôi đen cột cần tách và click vào biểu tượng luôn?
 
Chào bạn,

Bạn có thể dùng file này không cần dùng VBA thử xem.


Thanks.
Anh Tú.
"Love is beautiful when it's unconclusive".
 

File đính kèm

  • tach ho va ten chuoi.rar
    2.5 KB · Đọc: 95
Tôi thì làm như sau:
CHuyển chuỗi thành mảng, sau đó tùy thích tách bao nhiêu từ thì tách
Ví dụ
PHP:
Private Function Tach(Str as string, SoTuCanTach as integer) as string
     str = trim(str)
     Dim Mang() as string
     mang = split(str," ")
     if sotucantach>ubound(mang)+1 then exit function
     Dim I as integer
     str = ""
     For i = ubound(mang) -sotucantach to ubound(mang)
          str = str & mang(i) & " "
     next
     Tach = trim(str)
end function
 
thêm 1 cách cách không cần sử dụng VBA cách này có thể nhập tên dài bất kỳ
Giả sử ta có cột A2 chứa họ tên đầy đủ

Vậy ta có công thức cho cột C2 chứa tên là: =RIGHT(" "&A2;LEN(" "&A2)-FIND("^^";SUBSTITUTE(" "&A2;" ";"^^";LEN(" "&A2)-LEN(SUBSTITUTE(" "&A2;" ";"")))))

và công thức cho cột B2 chứa họ tên: =LEFT(A2;LEN(A2)-LEN(C2))
 

File đính kèm

  • tachhoten.xls
    19 KB · Đọc: 78
Lần chỉnh sửa cuối:
Sao mình làm tách tên không được nhỉ?
làm code như hướng dẫn mà.
Public Function tachten(ten As String) As String
Dim i As Integer
ten = Trim(ten)
For i = Len(ten) To 1 Step -1
If Mid(ten, i, 1) = " " Then
tachten = Left(ten, i)
End If
Next
End Function
 
Mình tham gia 1 hàm có thể trả về họ hoặc tên theo quan điểm của anh Vu Ngoc

Mã:
Public Function hoten(ch As String, ten As Boolean)
Dim kq As Variant
vt = 0
For i = 0 To Len(ch) - 1
If Mid(ch, i + 1, 1) = " " Then vt = vt + 1
Next
kq = Split(ch, " ")
If ten Then
hoten = kq(vt)
Else
hoten = kq(0)
End If
End Function

ch là chuỗi họ tên cần tách.
ten=1 trả về tên, ten=0 trả về họ
 
Mình bổ xung tách Họ, lót, tên và cắt khoảng trắng thừa:
Mã:
Public Function hoten(ch As String, ten As Integer) As String
Dim kq As Variant, vt, i As Long
vt = 0
For i = 0 To Len(ch) - 1
If Mid(ch, i + 1, 1) = " " Then vt = vt + 1
Next
kq = Split(ch, " ")
Select Case ten
Case Is = 1
hoten = kq(0)
Case Is = 2
For i = 1 To vt - 1
hoten = IIf(Len(kq(i)) > 0, hoten & kq(i) & " ", hoten)
Next i
Case Is = 3
hoten = kq(vt)
End Select
End Function
Tham số ch: chuỗi họ tên. Tham số tên: 1-Họ, 2-Lót, 3-Tên
 
mấy bạn dao to búa lớn quá

Em có cách tách đơn giản hơn nè:p
đầu tiên, ví dụ ta có một list danh sách như sau
A B C D
1> nguyễn đình khoa
2> công tằng tôn nữ tống lê chi

+đầu tiên, bôi đen cái list tên, vô data->text to columns... lúc này tên nó sẽ phân ra từng ô một.

chọn một vị trí nào đó để có list danh sách tên cần tách:
công thức: index($B$1:$z25,A1,counta(B1:Z50)) :p đó, đơn giản vậy thôi.kéo xuống là có một list danh sách... hehehe cần gì nguyên cái hàm nhìn vô hok muốn đọc nữa:p
 
Mình vẫn thích xài công thức để tách tên hơn là dùng VBA :
Ví dụ : ô A1 chứa tên đầy đủ :

PHP:
1. Họ : =LEFT(TRIM(A1),FIND(" ",A1)-1)
PHP:
2. Đệm : =TRIM(MID(SUBSTITUTE(TRIM(A1)," ",REPT(" ",100)),100,LEN(SUBSTITUTE(TRIM(A1)," ",REPT(" ",100)))-200))
PHP:
3. Tên  : =TRIM(RIGHT(SUBSTITUTE(TRIM(A1)," ",REPT(" ",100)),100))
 
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
E Thử rồi nhưng vẫn bị báo lỗi như này: #NAME
 
Tách tên học sinh.

Để sắp theo mẫu tự A,B,C nên cần phải tách thành cột tên riêng. Nhờ các bạn giúp đỡ bằng cách sử dụng công thức như thế nào? Cám ơn nhiều.
 

File đính kèm

  • Tach ten.xls
    16 KB · Đọc: 21
Để sắp theo mẫu tự A,B,C nên cần phải tách thành cột tên riêng. Nhờ các bạn giúp đỡ bằng cách sử dụng công thức như thế nào? Cám ơn nhiều.
Dùng công thức này thử xem:
PHP:
F3 =TRIM(RIGHT(SUBSTITUTE(TRIM($B3)," ",REPT(" ",LEN($B3))),LEN($B3)))
PHP:
E3 =TRIM(SUBSTITUTE($B3,$F3,""))
 

File đính kèm

  • Tach ten.xls
    17 KB · Đọc: 64
Các Bác làm ơn khi hướng dẫn vấn đề gì thì hướng dẫn cả cel 2007 nữa với các bác ạh, e đang bị buộc phải dùng cel 2007 mà có một số vấn đề không biết, lên diễn đàn của mình tìm thì thấy các bác toàn hướng dẫn cho cel 2003 không àh. Em xin các bác đấy! Trân trọng!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Web KT
Back
Top Bottom