PDA

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



Pages : [1] 2

daerty5
07-09-06, 03:00 PM
Khi nhập liệu vào bảng tính Excel, thông thường ta nhập cả họ và tên vào cùng một ô. Tuy nhiên, có khi sau đó ta cần phải tách riêng tên ra khỏi họ và tên đệm, nếu làm thủ công bằng thao tác sao chép rồi dán qua ô khác thì sẽ rất bất tiện. Ngoài ra có những lúc bạn phải xắp xếp lại theo thứ tự A,B,C,...
Nếu sử dụng hàm Right kết hợp với một vài hàm khác thì cũng có thể cho ra kết quả như bạn muốn, nhưng trong một số trường hợp sẽ cho kết quả không chính xác. Có một phương pháp tối ưu hơn sẽ giúp bạn hoàn thành tốt công việc này, cách thực hiện cũng khá đơn giản như sau:
- Trên bảng tính chứa cột họ tên cần tách, bạn chọn menu Tools > Macro > Visual Basic Editor, lập tức xuất hiện chương trình Microsoft Visual Basic.
- Tiếp theo, bạn nhấn menu Insert và chọn Module sẽ xuất hiện một cửa sổ soạn thảo.

Private Function Tachten(ten As String, lg As Integer)
Dim j As Integer
Name = Trim(ten)
For j = Len(Name) To 1 Step -1
If Mid(Name, j, 1) = " " Then
If lg = "1" Then
Tachten = Right(Name, Len(Name) - j)
Else
Tachten = Left(Name, j)
End If
Exit For
End If
Next
End Function

Bạn nhập đoạn mã lệnh sau vào cửa sổ soạn thảo:

- Bạn nhấn Ctrl+S để lưu lại và quay trở về bảng tính Excel.
- Bây giờ để tiến hành tách riêng họ và tên đệm vào một ô mới, bạn đặt con trỏ tại ô mới chứa họ và tên đệm rồi nhập vào công thức =TachTen(B3,0) và nhấn Enter sẽ thấy ngay kết quả.
- Để tách riêng tên vào một ô mới, bạn đặt con trỏ tại ô sẽ chứa tên cần tách và nhập vào công thức =TachTen(B3,1) rồi nhấn Enter là xong.
Ghi chú: B3 chính là địa chỉ của ô ban đầu chứa cả họ, tên đệm và tên.



bạn xem thử code nhé:

Function CatTen(HoVaTen As String) As String
Dim l, i As Integer
HoVaTen = Trim(HoVaTen)
l = Len(HoVaTen)
CatTen = ""
For i = l To 1 Step -1
If Mid(HoVaTen, i, 1) = Space(1) Then
k = i
Exit For
End If
Next i
CatTen = Mid(HoVaTen, i + 1)
End Function

Có mấy góp ý sau :
- Bạn nên hướng dẫn mọi người cách sử dụng, hàm này có tác dụng như thế nào ??
- Việc khai báo các biến cần đầy đủ và tường minh hơn
- Dòng : CatTen = "" là thừa, biến l là thừa
- Hãy bẫy lỗi khi HoVaTen = ""
- Nếu hàm này chỉ cắt mỗi tên thôi thì e rằng . . phí quá. hãy cho cái Option để có thể lấy HỌ - TÊN ĐỆM - TÊN
- Trên GPE có các hàm như thế này rất nhiều rồi và đã tối ưu, bạn nên tham khảo nhé.

--Chúc vui--

chibi
31-05-07, 01:43 AM
Bạn tham khảo ví dụ sau

Function tach_ten(hoten)
Dim do_dai
Dim kitu
do_dai = Len(Trim(hoten))
kitu = "x"
Do While kitu <> " "
kitu = Mid(hoten, do_dai, 1)
do_dai = do_dai - 1
Loop
tach_ten = Trim(Mid(hoten, do_dai + 2))
End Function

vungoc
31-05-07, 09:35 AM
ĐÂY LÀ CÁCH TÔI ĐÃ HỌC ĐƯỢC TRÊN DIỄN ĐÀN VÀ ĐANG THỰC HIỆN, XIN CHIA SẺ CÙNG BẠN:

Từ file EXCEL có chứa dữ liệu bạn đang muốn tách họ và tên - bạn hãy nhấn Alt + F11 sau đó nhấn insert nhấn module dán đọan mã sau vào trong cửa sổ module:

Private Function Tachten(ten As String, lg As Integer)
Dim j As Integer
Name = Trim(ten)
For j = Len(Name) To 1 Step -1
If Mid(Name, j, 1) = " " Then
If lg = "1" Then
Tachten = Right(Name, Len(Name) - j)
Else
Tachten = Left(Name, j)
End If
Exit For
End If
Next
End Function


SỬ DỤNG HÀM TÍNH TÁCH HỌ VÀ TÊN:
Giả sử bạn muốn tách tên ra khỏi họ và họ đệm tại ô A1 = Phạm Xuân Trường / Gõ = tachten(A1,0) / Kết quả: Phạm Xuân
Giả sử bạn muốn tách tên ra khỏi họ và họ đệm tại ô A1 = Phạm Xuân Trường / Gõ = tachten(A1,1) / Kết quả: Trường


(Nếu muốn sử dụng hàm này cho tòan excel bạn hãy đọc thêm trên diễn đàn này)

Chúc bạn thành công !

phamduylong
31-05-07, 09:49 AM
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

chibi
31-05-07, 05:24 PM
Bác Chibi ơi, Bác có thể giúp mình hiểu thêm 1 tí không? Mình cũng muốn tách họ tên, nhưng mình không biết Visual Basic, Bác có thể "chỉ vài chiêu" cho mình không? chỉ cần tỉ mỉ 1 chút để làm được cái tách tên mà bác chỉ ở trên thôi. Cảm ơn bác nhiều nhiều

1- Khởi động EXCEL
2- Vào VBE bằng cách Alt+F11
3- Insert Modul
4- Nhập đoạn code trên
5- Nếu cần phong cấp cho hàm thì Save với File type là AddIns, sau đó dùng chức năng Tools->AddIns để khai báo sử dụng trên mọi Workbook.
6- Sử dụng: =tach_ten(hoten) - Họ tên có thể nhập trực tiếp hoặc địa chỉ ô chứa họ tên.

Nguyễn Duy Tuân
31-05-07, 06:09 PM
Ai không biết VBA (lập trình) thì làm theo tôi như sau:

Giả sử A1 chứa "Họ và Tên".

Lấy Họ:
=LEFT(A1,LEN(A1)-FIND(" ",MID(A1,LEN(A1),1)&MID(A1,LEN(A1)-1,1)&MID(A1,LEN(A1)-2,1)&MID(A1,LEN(A1)-3,1)&MID(A1,LEN(A1)-4,1)&MID(A1,LEN(A1)-5,1)&MID(A1,LEN(A1)-6,1)&MID(A1,LEN(A1)-7,1)))

Lấy Tên:
=RIGHT(A1,FIND(" ",MID(A1,LEN(A1),1)&MID(A1,LEN(A1)-1,1)&MID(A1,LEN(A1)-2,1)&MID(A1,LEN(A1)-3,1)&MID(A1,LEN(A1)-4,1)&MID(A1,LEN(A1)-5,1)&MID(A1,LEN(A1)-6,1)&MID(A1,LEN(A1)-7,1))-1)

tedaynui
01-06-07, 09:36 AM
Chào các bạn.
Bạn có thể tách họ và tên theo cách sau.
1/ Đầu tiên bạn chọn vùng dữ liệu
2/ Sau đó vào menu Data / Text to Columns.
3/ Cửa sổ Step 1 of 3, bạn chọn Delimited, rồi chọn Next.
4/ Ở Step 2 of 3, tại mục Delimiters chọn Space rồi Next.
5/ Trong Step 3 of 3, ở hộp Destination bạn nhập địa chỉ để cho ra kết quả. Cuối cùng nhấn Finish để xem kết quả.

Thân !

phamduylong
02-06-07, 05:36 PM
Chào các bạn.
Bạn có thể tách họ và tên theo cách sau.
1/ Đầu tiên bạn chọn vùng dữ liệu
2/ Sau đó vào menu Data / Text to Columns.
3/ Cửa sổ Step 1 of 3, bạn chọn Delimited, rồi chọn Next.
4/ Ở Step 2 of 3, tại mục Delimiters chọn Space rồi Next.
5/ Trong Step 3 of 3, ở hộp Destination bạn nhập địa chỉ để cho ra kết quả. Cuối cùng nhấn Finish để xem kết quả.

Thân !

Cách này chỉ áp dụng được với số từ của họ tên bằng nhau. Họ tên ít nhất 2 từ, nhiều nhất 7, 8 từ hoặc hơn. Nếu trong danh sách có một người có tên 8 từ, Excel tách ra 8 cột. Nhặt tên ra khùng luôn !

tedaynui
02-06-07, 05:48 PM
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 !

dvu58
02-06-07, 08:34 PM
Cách làm của tedaynui cũng rất hay, sau khi tách xong lấy ra tên không có gì phức tạp cả. Cái lợi là mọi người đều có thể làm được, không cần đến VBA.

Quá đúng.


Tôi nghĩ, cách làm của bạn tedaynui cũng hay nhưng chỉ dùng cho các trường hợp đơn giản, thông thường thôi. Chứ nếu tui có 1 danh sách hàng vài nghìn tên với độ dài khác nhau, nhiều cột mục mà áp dụng cách này bảng tính của tôi trở thành "râu tóc te tua, xồm đầu" và xin bái.... bai đấy!

Nếu muốn sort một danh sách cho dễ dàng, việc tách họ và tên là rất cần, theo tôi vẫn nên bằng cách nào đó phải có 1 đoạn code tiện ích như các bạn đã giới thiệu để có thể dùng thường xuyên, nhanh chóng, tiện lợi.
Tôi đề nghị các bạn nghiên cứu và bổ sung thêm sao cho đoạn mã này tự động chạy cái "rẹt!" từ đầu đến cuối danh sách, chứ mà ngồi mổ cò cho hết cái công thức trường giang đại hải hoặc mỗi lần thực hiện nó thì phải giở "Tự điển GPE" này ra tra (chứ nhớ sao nổi?) thì "chết toi em" luôn.

pxthanhcda
02-06-07, 10:11 PM
Lấy họ:=IF(MID(A1,2,1)=" ",LEFT(A1,2),IF(MID(A1,3,1)=" ",LEFT(A1,2),IF(MID(A1,4,1)=" ",LEFT(A1,3),IF(MID(A1,5,1)=" ",LEFT(A1,4),IF(MID(A1,6,1)=" ",LEFT(A1,5),IF(MID(A1,7,1)=" ",LEFT(A1,6),LEFT(A1,7)))))))
Lấy tên đệm:=IF(LEN(A2)-LEN(B2)-LEN(D2)-2>0,MID(A2,LEN(B2)+2,LEN(A2)-LEN(B2)-LEN(D2)-2)," ")
Lấy tên thật:=IF(MID(A3,LEN(A3)-1,1)=" ",RIGHT(A3,2),IF(MID(A3,LEN(A3)-2,1)=" ",RIGHT(A3,2),IF(MID(A3,LEN(A3)-3,1)=" ",RIGHT(A3,3),IF(MID(A3,LEN(A3)-4,1)=" ",RIGHT(A3,4),IF(MID(A3,LEN(A3)-5,1)=" ",RIGHT(A3,5),IF(MID(A3,LEN(A3)-6,1)=" ",RIGHT(A3,6),RIGHT(A3,7)))))))

BumBum
02-06-07, 11:23 PM
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 !

Cách dùng này rất hay đó các bạn, phần lấy tên rất OK.
Mình bổ sung thêm phần lấy họ và lót (sau khi đã lấy được tên) thì làm như sau cho gọn:
=LEFT(A1,LEN(A1)-LEN(ô chứa tên)-1)

tedaynui
02-07-07, 11:58 AM
em cần tách họ và tên ra hai cột khác nhau xin các anh chị chỉ bảo, em cần phải dùng hàm gì vậy ?

đây là dữ liệu, em cần hướng dẫn gấp lắm xin các anh chi nhanh dùn
2380
Chào bạn
Bạn tìm trên diễn đàn có rất nhiều bài nói về vấn đề này.
Có thể dùng VBA hoặc dùng hàm. Dùng hàm cũng có rất nhiều cách và đây là 1 trong các cách :
VD : Ô A2 chứa chuỗi họ và tên
Họ lót ==LEFT(A2,FIND("*",SUBSTITUTE(A2," ","*",LEN(A2)-LEN(SUBSTITUTE(A2," ",""))))-1)
Tên ==RIGHT(A2,LEN(A2)-LEN(B2)-1)

TDN

dmtdmtbb
02-07-07, 02:07 PM
- 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.

2384

Tu Anh
02-07-07, 10:24 PM
Bạn dùng thử Macro mình làm xem. Cái này có thể tách chuỗi bất kỳ bằng cách chọn ký tự làm mốc tách. Chú ý trong ô chọn mốc tách chỉ đánh 1 ký tự thôi nhé ví dụ +, -, " " (Ký tự trống), â, ô....)*&^))*&^)


!$@!!!$@!!!$@!!!$@!! Ê mọi người đừng tải file ở đây nữa, nghe nói có virus. Chuyển sang cuối trang 2 tải file khác mình đã tải lên rồi, nhớ kiểm tra kỹ virus, nếu cần nhắn tin cho mình mình gửi code cho.

tedaynui
02-07-07, 10:36 PM
Bạn dùng thử Macro mình làm xem. Cái này có thể tách chuỗi bất kỳ bằng cách chọn ký tự làm mốc tách. Chú ý trong ô chọn mốc tách chỉ đánh 1 ký tự thôi nhé ví dụ +, -, " " (Ký tự trống), â, ô....)*&^))*&^) Cám ơn bạn
Bạn làm giao diện tuyệt đẹp đấy nhưng có vài góp ý nhỏ :
- Cái mặt cười màu vàng không thể hiệu lực trên máy khác, chỉ có hiệu lực trên máy của bạn vì nút đó bạn tự tạo và gán cho nó 1 macro
- Sao dung lượng file gần 1Mb, có vẻ lớn đấy (vì data không có - nguyên nhân là do Form có chèn hình đã quá)
- Khi tách chuỗi thì cần xử lý chuỗi luôn :
Nguyễn___Thanh_Sơn --> Nguyễn_Thanh --- Sơn
Cần bỏ bớt các khoảng trắng thừa.
- Có Form đẹp và hoành tráng nhưng chỉ tách nội dung 1 ô, vậy có thể chỉnh lại để có thể tách hàng loạt không ?
Thanks

TDN

Mr Okebab
03-07-07, 01:37 AM
Bạn dùng thử Macro mình làm xem. Cái này có thể tách chuỗi bất kỳ bằng cách chọn ký tự làm mốc tách. Chú ý trong ô chọn mốc tách chỉ đánh 1 ký tự thôi nhé ví dụ +, -, " " (Ký tự trống), â, ô....)*&^))*&^)
File của bạn có virus và rất nhiều name lỗi. Vì vậy mình không kịp thấy bạn đã làm gì vì Anti nó diệt mất rồi.

http://uploadaz.worldispnetwork.com/uploadaz/I06/1183404641.jpg

Mong gửi lên File sạch nhé.

Thân!

digita
03-07-07, 10:45 AM
em cần tách họ và tên ra hai cột khác nhau xin các anh chị chỉ bảo, em cần phải dùng hàm gì vậy ?

đây là dữ liệu, em cần hướng dẫn gấp lắm xin các anh chị chỉ nhanh dùm
2381

Chào bạn

Thí dụ ở ô A1 bạn có tên Trần Văn Xoài.

Tách họ trong ô B1 thì dung =LEFT(A1,FIND(" ",A1)-1)

Phần tên còn lại ghi qua C1 bằng phương thức =RIGHT(A1,LEN(A1)-LEN(B1)-1)

Mến

TranThanhPhong
03-07-07, 11:15 AM
Bạn có thể xem cách tách họ, họ lót, tên và ví dụ kèm theo trong bài này:

http://www.giaiphapexcel.com/forum/showpost.php?p=15539&postcount=8

TP.

Tu Anh
04-07-07, 08:55 PM
Xin lỗi các bạn nhé, máy mình biết là bị nhiễm virus nhưng đã sử dụng cá phần mềm diệt virus vẫn không diệt được. Mình cũng mới tham gia diễn đàn, hôm trước có việc cần tách chuỗi nên tập tọe làm thử, thấy có bạn hỏi nên post lên để mọi người tham khảo thôi. Mong mọi người tiếp tục chỉ bảo. Mình sẽ tìm cách sửa để có thể tách một loạt các ô chọn, nhưng mình bận đi làm ít khi về nhà để lên mạng nên chưa thể làm ngay được. Và mình cũng sẽ bỏ bớt các hình nền để file đỡ nặng. Cám ơn các bạn đã góp ý.

Mr Okebab
04-07-07, 11:39 PM
Việc tách này các bạn đã giải nhiều rồi. Cả bằng công thức, cả bằng VBA. Tuy nhiên mình lưu ý với các bạn rằng đầu tiên ta phải làm rõ các khái niệm :
(Giả sử phân cách các từ là khoảng trống)

Như thế nào là HỌ
Như thế nào là TÊN LÓT
Như thế nào là TÊN

VD :
Trần Hoàn
Nguyễn Y Vân
Nguyễn Thị Minh Khai
Nguyễn Đình Thanh Bảo Quốc (đây là dòng họ Nguyễn Đình)
Nguyễn Hồng Tử Thanh Thái
Nguyễn Tử Chính Long Bảo Ứng
. . . . . . . . . . . . . . . . . . .

Đấy, chỉ khi các bạn hiểu rõ đâu là HỌ, đâu là TÊN LÓT, đâu là TÊN thì khi đó mới làm tiếp theo được.

Chứ cứ quanh quẩn mãi ở cái tên Vũ Như Cẩn, Y Như Cũ . . thì chỉ cần mấy hàm đơn giản là ra rồi.

Mong được xem xét.

Thân!

vungoc
05-07-07, 08:21 AM
Theo quan niệm và quy ước về họ tên Tiếng Việt - Chữ Việt thì: Từ đầu tiên phía trái sẽ là "Họ" (Thường là họ cha, chỉ trong trường hợp không xác định được cha thì mới lấy họ mẹ), từ cuối cùng bên phải sẽ là "Tên" của người đó - còn lại các từ đứng giữa dù là một hay nhiều thì cũng chỉ được coi là "Tên lót" hoặc "Họ đệm" / "Tên đệm"

Nếu không phải, xin được chỉ giáo tiếp !

Mr Okebab
05-07-07, 11:34 AM
Theo quan niệm và quy ước về họ tên Tiếng Việt - Chữ Việt thì: Từ đầu tiên phía trái sẽ là "Họ" (Thường là họ cha, chỉ trong trường hợp không xác định được cha thì mới lấy họ mẹ), từ cuối cùng bên phải sẽ là "Tên" của người đó - còn lại các từ đứng giữa dù là một hay nhiều thì cũng chỉ được coi là "Tên lót" hoặc "Họ đệm" / "Tên đệm"

Nếu không phải, xin được chỉ giáo tiếp !

Đây cũng là một ý, tuy nhiên Cụ Lê Hồng Phong không thích thiên hạ gọi người yêu của Cụ là KHAI đâu, mà phải là Minh Khai (hoặc Nguyễn Thị Minh Khai)

Miền Tây lại có kiểu mọi người rất thích đặt tên các con theo kiểu :

Nguyễn Hoàng Thanh Sang
Nguyễn Hoàng Kim Sang
Nguyễn Hoàng Phương Sang
Nguyễn Hoàng Anh Sang

. . . . . . . . .

Nếu gọi là Sang cả thì e . . . . nhậu không được (vì không biết thằng sang nào uống rồi !!!!??)

Còn ngoài Bắc thì họ Trần Đình, họ Nguyễn Phúc . . . thật là nhiều. Làm không cẩn thận, mỗi lần về quê là các cụ xách tai lên mà mắng đấy : "Họ ta là họ Trần Đình, còn họ Trần là của . . làng bên, mày sang làng bên mà . . ở !!!"

Thân!
Thân!

tedaynui
05-07-07, 11:58 AM
Gởi bác Hiếu
Thông thường thì hiểu như anh VuNgoc là phổ biến nhất. Còn hiểu như Hiếu hình như chỉ có các cụ mới dùng và có vẻ mang tính địa phương. Nếu Họ khi 1 chữ, khi 2 chữ ... chuyến này chắc về làng nhờ các cụ viết code giúp thôi. Hi hi

Thân !

vungoc
05-07-07, 12:07 PM
Phương ngữ / hay tập tục / hay tập quán / hay văn hóa vùng, miền thì quá đa dạng - hìhì. Vấn đề chỉ giải quyết được trên cơ sở có một "Khái niệm chung".

dmtdmtbb
05-07-07, 03:22 PM
- Theo cái chung thì đa số vẫn là Họ/ Chữ lot/ Tên nên theo em các Pác nên thống nhất như vậy cho dể.
- Còn những tên đăc biệt thì đành sử = tay thôi.
- Chương trình lọc của em gởi lên là ok.

Mr Okebab
12-07-07, 09:36 PM
Bạn dùng thử Macro mình làm xem. Cái này có thể tách chuỗi bất kỳ bằng cách chọn ký tự làm mốc tách. Chú ý trong ô chọn mốc tách chỉ đánh 1 ký tự thôi nhé ví dụ +, -, " " (Ký tự trống), â, ô....)*&^))*&^)

Bạn có thể post code của bạn lên được không. Quả thực mình mở File của bạn ra thì code bị xóa mất rồi.

Thông cảm vậy.

Thanks!

Thân!

Tu Anh
12-07-07, 10:01 PM
Trích:
Nguyên văn bởi Mr Okebab
Bạn có thể post code của bạn lên được không. Quả thực mình mở File của bạn ra thì code bị xóa mất rồi.

Thông cảm vậy.

Thanks!

Thân!

Xin lỗi nhé. Hôm trước post file lên thấy mọi người bảo bị nhiễm virus nên cả ngày hôm nay ngồi hì hụi tải các loại chương trình diệt virus về diệt. Hình như diệt hết rồi nhưng mấy cái file có code cũng ra đi luôn nên phải từ từ để mình làm lại đã. Chờ vậy nhé.

Tu Anh
12-07-07, 10:39 PM
Đây rồi, mình làm lại cái chương trình tách chuỗi rồi, mọi người tham khảo, tuy không bằng cái trước, nhưng nó cũng đủ các cái cơ bản. Mọi người tải về chú ý kiểm tra xem có virus ko? Nếu có thì lên tiếng mình post mã code lên cho.
Chương trình này chỉ là sơ khai vẫn còn nhiều hạn chế, mong mọi người góp ý phát triển thêm cho hoàn thiện.

Mr Okebab
13-07-07, 03:29 PM
Đây là hàm tách họ, tên, lót. Các bác xem cho ý kiến nhé.

Thân!

tedaynui
13-07-07, 03:36 PM
Gởi Hiếu
Rất hay, gọn nhẹ nhưng Hiếu cắt luôn nấy khoảng trắng thừa thì tuyệt vời hơn.
Thanks

Mr Okebab
13-07-07, 07:09 PM
Gởi Hiếu
Rất hay, gọn nhẹ nhưng Hiếu cắt luôn nấy khoảng trắng thừa thì tuyệt vời hơn.
Thanks

Cảm ơn nhiều, em đã sửa.
Nhưng không biết tại sao trong VBA hàm trim lại không tác dụng, phải khai báo như hàm của excel.

ongtrungducmx25
22-08-07, 09:17 AM
cho mình hỏi có maro nào tách họ và tên thành hai cột riêng biệt không! thank

anhtuan1066
22-08-07, 09:20 AM
Tất nhiên là có... nhưng bạn sử dụng chức năng Text to Column trong Excel cũng làm dc điều này mà.
Mến
ANH TUẤN

Mr Okebab
22-08-07, 09:33 AM
cho mình hỏi có maro nào tách họ và tên thành hai cột riêng biệt không! thank
Bác theo dõi ở đây nhé :



http://www.giaiphapexcel.com/forum/showthread.php?t=2725


File mẫu (http://www.giaiphapexcel.com/forum/attachment.php?attachmentid=2593&d=1184328484)

Thân!

ongtrungducmx25
22-08-07, 04:46 PM
có cách nào bổ sung thêm tách chữ lót được không
code:

Private Function Tachten(ten As String, lg As Integer)
Dim j As Integer
Name = Trim(ten)
For j = Len(Name) To 1 Step -1
If Mid(Name, j, 1) = " " Then
If lg = "1" Then
Tachten = Right(Name, Len(Name) - j)
Else
Tachten = Left(Name, j)
End If
Exit For
End If
Next
End Function

=TachTen(B3,0)
=TachTen(B3,1)
xin các pác bổ sung tách chữ lót đi!
chữ lót:
VD: Cao thuỳ Mỹ Dung ==> "Thuỳ Dung"
họ:
còn họ thì :"Cao" nhé!

anhtuan1066
22-08-07, 05:49 PM
Tên của VN đặt lộn xộn... làm sao mà tách đây... Chỉ có thể tách khi bạn đặt ra 1 nguyên tắc nào đó... lấy VD: Họ là chử đầu, tên là chử cuối, chứ lót là những cái nằm giữa... nhưng dù là vậy thì đến ngày nào đó bạn sẽ phát hiện ra sự bất hợp lý của nguyên tắc trên... Món này Bắp có từng đề cập tới (nếu tôi nhớ ko lầm)
Mến
ANH TUẤN

ongtrungducmx25
22-08-07, 06:51 PM
đúng rồi mình xem trên diễn đàn có code đó nhưng theo nguyên tắc chữ lót là phần ở giữ thì đúng ý mình rồi! có thể lấy như thế nào đây!

tedaynui
22-08-07, 07:28 PM
đúng rồi mình xem trên diễn đàn có code đó nhưng theo nguyên tắc chữ lót là phần ở giữ thì đúng ý mình rồi! có thể lấy như thế nào đây!
Chào thầy
Em gởi thầy thử mấy công thức này xem. Nếu được thì thầy khỏi dùng VBA
Tại ô A2 chứa chuỗi tên (VD : Nguyễn Trần Thanh Hùng)
Họ : =LEFT(A2,FIND(" ",A2,1))
Tên : =RIGHT(A2,LEN(A2)-FIND("*",SUBSTITUTE(A2," ","*",LEN(A2)-LEN(SUBSTITUTE(A2," ","")))))
Lót : =TRIM(RIGHT(A2,LEN(A2)-LEN(B2)-LEN(C2)))
Họ và lót : =LEFT(A2,FIND("*",SUBSTITUTE(A2," ","*",LEN(A2)-LEN(SUBSTITUTE(A2," ",""))))-1)

TDN


From AnhTuan1066:
Phước ơi... Tôi đễ ý ông này hình như ổng ko khóai dùng công thức... Thích dùng VBA cho nó sang... Tôi nhớ hình như thầy Phước có code này mà... Cho đi...
hi... hi...

tedaynui
22-08-07, 07:52 PM
Phước ơi... Tôi đễ ý ông này hình như ổng ko khóai dùng công thức... Thích dùng VBA cho nó sang... Tôi nhớ hình như thầy Phước có code này mà... Cho đi...
hi... hi...
Hi hi... tất nhiên là trong trường hợp này dùng VBA vừa sang lại vừa đẹp nhưng em muốn đưa ra 1 giải pháp khác, ai thích cái nào thì dùng cái đó vậy mà. VBA của em củ chuối lắm, em xin phép Mr.Hiếu gởi lại bài của ông Bắp vậy, OK lắm. hi hi...
File này của Mr.Hiếu làm hay lắm á.

Thân !

From AnhTuan1066:
Ngon đấy chứ... Nhưng Phước nè... Sao nó tách đến cell A8 thì nghĩ luôn vậy? Từ A9 trở đi im re... Làm sao chỉnh đây?
ANH TUẤN

minhlev
22-08-07, 09:01 PM
Hình như là phải kéo công thức của các ô "Họ", "Tên", "Lót" xuông dòng dưới hay sao bác ạ. Vì Bác Bắp chỉ lập function "tach" thôi chứ không tách luôn họ, lót, tên ra.

anhtuan1066
22-08-07, 09:05 PM
Ah... ah... quên xem... Tôi cứ tưởng macro nó làm tuốt tuồn tuột.. ko có công thức gì cả chứ
Cám ơn...

Ah... ha... nếu vậy thì có thể save file này thành .xla đễ làm User Define Function luôn nhỉ... Đở mất công Enable macro... Có lý
Cám ơn
ANH TUẤN

Mr Okebab
22-08-07, 09:36 PM
Cảm ơn các bác đã quan tâm . Cú pháp là :
tach(Chuoi, Kytu, Loai)

Ở đó :

Chuoi :Tên họ đầy đủ
Kytu : Bất kỳ ký tự đặc biệt nào để phân các từ ra. VD như chuỗi : Trần - Anh-Tuấn, thì kytu chính là -
Loai: Tùy theo lựa chọn cần tách Họ, Lót, Tên mà sẽ tương ứng là ho; lot; tenNhư vậy nó sẽ tách họ, tên và lót riêng rẽ ra.

Còn việc như bác anhtuan nói ở trên, thì đúng là Tiếng Việt phức tạp nên lúc thì họ là 1 từ lúc thì họ là 2 từ . . . . . Nếu có được qui luật thì mới làm được. Còn không thì . . . ngồi cười vậy thôi.

VD : Nguyễn Vân; Vũ Như Cẩn; Nguyễn Thị Minh Khai; Nguyễn Đình Bảo Chung; Cao Thị Lê Phương Thúy. . . .

Thân!

tedaynui
22-08-07, 11:26 PM
Ah... ha... nếu vậy thì có thể save file này thành .xla đễ làm User Define Function luôn nhỉ... Đở mất công Enable macro... Có lý
Cám ơn
ANH TUẤN
Cái này là hàm "tự tạo" nên anh phải copy công thức. Nếu muốn Click 1 cái là nó tách 1 lèo luôn thì anh sửa code lại.

Thân!

ongtrungducmx25
23-08-07, 08:29 AM
đâu có mình thấy nó chạy tốt lắm mà chạy đúng đó bạn xem lại đi!thank "Phước nhé"

ThuNghi
23-08-07, 09:33 AM
Code của Mr Be rất hay, sao không dùng hàm InStr và InStrRev theo name manager của MaiKa cũng hay lắm.

ongtrungducmx25
23-08-07, 04:54 PM
Chào thầy
Em gởi thầy thử mấy công thức này xem. Nếu được thì thầy khỏi dùng VBA
Tại ô A2 chứa chuỗi tên (VD : Nguyễn Trần Thanh Hùng)
Họ : =LEFT(A2,FIND(" ",A2,1))
Tên : =RIGHT(A2,LEN(A2)-FIND("*",SUBSTITUTE(A2," ","*",LEN(A2)-LEN(SUBSTITUTE(A2," ","")))))
Lót : =TRIM(RIGHT(A2,LEN(A2)-LEN(B2)-LEN(C2)))
Họ và lót : =LEFT(A2,FIND("*",SUBSTITUTE(A2," ","*",LEN(A2)-LEN(SUBSTITUTE(A2," ",""))))-1)

TDN

tách chữ lót đó hình như không đúng
Lót : =TRIM(RIGHT(A2,LEN(A2)-LEN(B2)-LEN(C2)))
bạn xem fiel của mình nhé tách ra 4 cột lót nhé ! có được không . bạn chỉnh sửa lại cho mình nhé! thank

anhtuan1066
23-08-07, 05:13 PM
Nếu bạn muốn thế thì dùng công thức phức tạp lắm... Vào menu Data, chọn công cụ Text to Column... 1 phát ra liền, nhanh như chớp...

tedaynui
23-08-07, 05:30 PM
tách chữ lót đó hình như không đúng
Lót : =TRIM(RIGHT(A2,LEN(A2)-LEN(B2)-LEN(C2)))
bạn xem fiel của mình nhé tách ra 4 cột lót nhé ! có được không . bạn chỉnh sửa lại cho mình nhé! thank Thầy ơi,
Em test lại thấy ổn mà. Ví dụ tên "Thái Thị Mỹ Dung" thì em nghĩ Lót là "Thị Mỹ", nêm công thức ấy vẫn ổn mà.
Ý thầy Lót là "Thị" và "Mỹ". Vậy thì thì dùng hàm Left, Mid cắt tiếp. Ví dụ ô D4 là "Thị Mỹ" thì thầy lấy chữ "Thị" bằng công thức
=LEFT(D4,FIND(" ",D4,1))

@ Ngoài ra, có thể dùng công thức mảng nhưng nó dài quá nhìn thấy ngán lắm.
Thân!

LikeIt
23-08-07, 11:34 PM
Em ko hiểu nhiều về công thức, nhưng làm đc thành công thức thì nó có tinihs tự động cao, và có thể ứng dụng đc sang những cái khác. Nhưng nếu chỉ để tách tên theo đề bài thì làm theo cách của anh Tuấn rất nhanh và đơn giản, chỉ cần chọn vùng dự liệu thì làm theo tuần tự như sau là đc.
http://giaiphapexcel.net/files/43875984376/1.JPG
http://giaiphapexcel.net/files/43875984376/2.JPG
http://giaiphapexcel.net/files/43875984376/3.JPG

ongtrungducmx25
24-08-07, 10:43 AM
cám ơn em thầy đã phải làm nhiều cột mới đạt được " nhưng phải dấu nhiều cột thôi " cách này cũng tạm được! thank nhé!

tedaynui
24-08-07, 11:04 AM
cám ơn em thầy đã phải làm nhiều cột mới đạt được " nhưng phải dấu nhiều cột thôi " cách này cũng tạm được! thank nhé!
Anh Thầy làm thế là chơi cho vui thôi. Chứ nếu tên 2 chữ, 3 chữ, 4 chữ,... thì anh thầy gặp rắc rối ngay. Tốt nhất, muốn tách kiểu này thì dùng Text to Column.

Thân !

ongtrungducmx25
24-08-07, 11:40 AM
zây hả, dung text colum thì tách ra đầy đủ lắm , nhưng mình chỉ thích tách tên thôi có được không cũng dùng text colum được không! hoặc họ
riêng như dùng công thức có được không ! chắc khó hé

anhtuan1066
24-08-07, 11:57 AM
Ông thấy này tôi bảo đảm ko phải dạy môn Văn... hi.. hi.. Bài viết đọc 10 lần mới hiểu nổi Thầy muốn cái gì...

tedaynui
24-08-07, 12:02 PM
Nếu chỉ tánh họ thì Text to Column ngon lành nhưng nếu tách tên thì không ổn lắm. Tóm lại, nếu chỉ tách tên và phần còn lại (Họ và Lót) thì dùng công thức hoặc VBA. Nhưng em vẫn thường dùng VBA vì thấy nó tiện hơn. File nhẹ hơn và không dùng thêm cột fụ thứ 3, thứ 4.

Thân!

Mr Okebab
24-08-07, 12:10 PM
Hình như có 1 hàm đảo ngược thứ tự các ký tự lại phải không các bác ??
(hàm của excel nhé)

VD : GPE --> EPG


Thân!

anhtuan1066
24-08-07, 12:47 PM
Là code này đây:


Function RevText(S As String) As String
Dim Ndx As Integer
For Ndx = Len(S) To 1 Step -1
RevText = RevText & Mid(S, Ndx, 1)
Next Ndx
End Function

Và còn nữa:


Public Function rev(t)
rev = ""
ct = Len(t)
For i = ct To 1 Step –1
rev = rev & Mid(t, i, 1)
Next i
End Function
Tiếp cái nữa:


Public Function rev(t)
rev = StrReverse(t)
End Function

Mr Okebab
24-08-07, 12:53 PM
Là code này đây:

Function RevText(S As String) As String
Dim Ndx As Integer
For Ndx = Len(S) To 1 Step -1
RevText = RevText & Mid(S, Ndx, 1)
Next Ndx
End Function

Công thức của Excel cơ, chứ lại hàm tự viết thì không được.

Thân!

anhtuan1066
24-08-07, 01:05 PM
Hình như ko có.. mình phải tự làm thôi Bắp à!

Mr Okebab
24-08-07, 01:10 PM
Ý của em định là : Vì một số thích công thức

Tìm ra vị trí của khoảng trắng đầu tiên (hàm Find)
Tìm ra vị trí khoảng tráng cuối cùng (dựa vào hàm đảo ngược và hàm LEN)Sau đó việc tiến hành tách họ, tên, lót rất đơn giản

Thân!

anhtuan1066
24-08-07, 02:07 PM
Uh... tôi cũng đoán bạn sẽ làm thế... Tôi tham khảo các trang web nước ngoài, thấy họ cũng tách họ tên bằng cách giống bạn nói, nhưng vẫn phải VBA, Excel ko có hàm này...
ANH TUẤN

nguyenchuhung1972
30-11-07, 05:00 PM
Tôi đã thực hiện các bước tách chữ như các ban hướng dẫn nhưng không thực hiện tách tên và họ được mong các bạn giúp đỡ

Tôi không hiểu VBA là gì các bạn hướng dẫn giúp nhé


From Sa_DQ:
Với từ khóa 'VBA' bạn sẽ tiếp xúc với rất chi là nhiều thứ về VBA!

tigertiger
30-11-07, 10:29 PM
Tôi đã thực hiện các bước tách chữ như các ban hướng dẫn nhưng không thực hiện tách tên và họ được mong các bạn giúp đỡ

Tôi không hiểu VBA là gì các bạn hướng dẫn giúp nhé

bạn xem bài viết này

http://www.giaiphapexcel.com/forum/showpost.php?p=40909&postcount=17

phamduylong
03-12-07, 12:36 AM
Em muốn tách tên ra khỏi họ và tên thì phải làm sao vậy các bác. Ví dụ:
Ngô Kim Tuyền -> Tuyền
Lê Tuấn Anh -> Anh
Lê Quốc Hùng -> Hùng
Cám ơn các bác nhiều!!!
Tách họ tên bằng công thức có, bằng VBA cũng có. Nhưng cách nào ta cũng phải qua nhiều thao tác. AddInHoTen giúp bạn tách họ tên từ 1 cột ra 2 cột hoặc từ 2 cột họ, tên ghép thành 1 cột chỉ bằng thao tác click chuột.
Đơn giản, nếu vùng họ tên bạn chọn:
- 1 cột > tách họ tên ra 2 cột
- 2 cột > ghép họ tên thành một cột
Tự động mở rộng vùng chọn cho bạn, cho phép bạn chọn lại vùng họ tên trên form, tách, ghép cả tên trường.
Cái này thích hợp cho các bạn đã nhập danh sách xong, nhưng xếp bảo phải tách ra, ghép vào và phải nộp ngay cho xếp.

sutrang
03-12-07, 10:27 PM
Cho em hỏi chức năng Test to column là gì thế? Ứng dụng như thế nào? Em mới nghe nói đến thôi+-+-+-+

tedaynui
04-12-07, 12:28 AM
Cho em hỏi chức năng Test to column là gì thế? Ứng dụng như thế nào? Em mới nghe nói đến thôi+-+-+-+
Đây là chức năng Text to Columns, có thể hiểu đơn giản thế này : Chức năng này cho phép tách từng chữ trong Cell ra thành một hay nhiều chữ trong từng cột ; Căn cứ vào ký tự phân cách (có thể là : dấu phẩy, chấm phẩy, Space, ...). Bạn có thể test thử rất dễ dàng : Chọn ô dữ liệu, menu Data / Text to Columns...

TDN

hard learner
10-10-08, 03:48 PM
cho em hỏi nếu lần sau mà dùng lại lệnh thì làm thế nào
chẳng lẽ lần nào dùng cũng phải copy đoạn code đó sang hay sao
E thử làm rồi nhưng chỉ áp dụng được có một lần thôi

boyxin
10-10-08, 03:53 PM
cho em hỏi nếu lần sau mà dùng lại lệnh thì làm thế nào
chẳng lẽ lần nào dùng cũng phải copy đoạn code đó sang hay sao
E thử làm rồi nhưng chỉ áp dụng được có một lần thôi

Mỗi lần copy như vầy sẽ dùng được cho 1 file.

Muốn làm 1 lần mà dùng mãi mãi thì xài Add-Ins... nhé

chibi
10-10-08, 08:16 PM
Thông thường, khi có 1 danh sách, họ tên được viết liền. Tại sao lại phải tách riêng ra cột khác nhỉ. Khi muốn sắp xếp họ tên trong tiếng Việt thường sử dụng VBA, đã dùng đến nó thì cần gì phải tách tên ra cột khác.

rollover79
11-10-08, 08:52 AM
Thông thường, khi có 1 danh sách, họ tên được viết liền. Tại sao lại phải tách riêng ra cột khác nhỉ. Khi muốn sắp xếp họ tên trong tiếng Việt thường sử dụng VBA, đã dùng đến nó thì cần gì phải tách tên ra cột khác.
Bài toán tách tên này còn áp dụng trong nhiều trường hợp nữa bạn ạ, giả sử không phải là sắp xếp theo tiếng Việt có dấu mà là sắp xếp trực tiếp luôn thì sao???.
Nhân đây tôi cũng xin góp thêm 1 cách tách Tên mà không dùng VBA(Cái này tôi từng làm khi chưa biết gì về VBA và chỉ áp dụng được trong trường hợp thực tế cụ thể, không áp dụng được cho mọi trường hợp).
1. Dùng chức năng Text to columns để tách cột Họ tên thành các cột cách nhau bởi dấu cách.
2. Tại 1 cột cách cột Họ tên ban đầu đủ lớn để chắc chắn họ tên không thể có nhiều từ hơn(Ví dụ là cột thứ 10 sau cột Họ tên, vì chắc không ai có tên nhiều hơn 10 từ, cái này chính là hạn chế)
3. Dùng hàm Index kết hợp với hàm CountA để lấy về tên
- Ví dụ Họ tên nằm ở ô A1, dùng chức năng Text to columns để tách thành các cột, tại ô J1 dùng công thức sau:


=INDEX(A1:I1,1,COUNTA(A1:I1))

Cách này hơi chuối 1 chút, nhưng được cái không phải dùng VBA --=0.

NHGiang
31-10-08, 11:38 PM
ĐÂY LÀ CÁCH TÔI ĐÃ HỌC ĐƯỢC TRÊN DIỄN ĐÀN VÀ ĐANG THỰC HIỆN, XIN CHIA SẺ CÙNG BẠN:

Từ file EXCEL có chứa dữ liệu bạn đang muốn tách họ và tên - bạn hãy nhấn Alt + F11 sau đó nhấn insert nhấn module dán đọan mã sau vào trong cửa sổ module:

Private Function Tachten(ten As String, lg As Integer)
Dim j As Integer
Name = Trim(ten)
For j = Len(Name) To 1 Step -1
If Mid(Name, j, 1) = " " Then
If lg = "1" Then
Tachten = Right(Name, Len(Name) - j)
Else
Tachten = Left(Name, j)
End If
Exit For
End If
Next
End Function


SỬ DỤNG HÀM TÍNH TÁCH HỌ VÀ TÊN:
Giả sử bạn muốn tách tên ra khỏi họ và họ đệm tại ô A1 = Phạm Xuân Trường / Gõ = tachten(A1,0) / Kết quả: Phạm Xuân
Giả sử bạn muốn tách tên ra khỏi họ và họ đệm tại ô A1 = Phạm Xuân Trường / Gõ = tachten(A1,1) / Kết quả: Trường


(Nếu muốn sử dụng hàm này cho tòan excel bạn hãy đọc thêm trên diễn đàn này)

Chúc bạn thành công !

Mình lại cần tách Họ, tên đệm và tên thành 3 cột thì công thức VBS sẽ thế nào nhỉ? Nhờ cả nhà giúp với nhé ! Thanks.

cadafi
01-11-08, 12:36 AM
Mình lại cần tách Họ, tên đệm và tên thành 3 cột thì công thức VBS sẽ thế nào nhỉ? Nhờ cả nhà giúp với nhé ! Thanks.

Bạn xem file đính kèm. File này làm bằng công thức. Cái này có nhiều trên GPE mình lắm bạn à!

dodokg
01-11-08, 04:00 PM
ĐÂY LÀ CÁCH TÔI ĐÃ HỌC ĐƯỢC TRÊN DIỄN ĐÀN VÀ ĐANG THỰC HIỆN, XIN CHIA SẺ CÙNG BẠN:

Từ file EXCEL có chứa dữ liệu bạn đang muốn tách họ và tên - bạn hãy nhấn Alt + F11 sau đó nhấn insert nhấn module dán đọan mã sau vào trong cửa sổ module:

Private Function Tachten(ten As String, lg As Integer)
Dim j As Integer
Name = Trim(ten)
For j = Len(Name) To 1 Step -1
If Mid(Name, j, 1) = " " Then
If lg = "1" Then
Tachten = Right(Name, Len(Name) - j)
Else
Tachten = Left(Name, j)
End If
Exit For
End If
Next
End Function


SỬ DỤNG HÀM TÍNH TÁCH HỌ VÀ TÊN:
Giả sử bạn muốn tách tên ra khỏi họ và họ đệm tại ô A1 = Phạm Xuân Trường / Gõ = tachten(A1,0) / Kết quả: Phạm Xuân
Giả sử bạn muốn tách tên ra khỏi họ và họ đệm tại ô A1 = Phạm Xuân Trường / Gõ = tachten(A1,1) / Kết quả: Trường


(Nếu muốn sử dụng hàm này cho tòan excel bạn hãy đọc thêm trên diễn đàn này)

Chúc bạn thành công !


Chào bạn!
cho tôi hỏi mình dán đoạn mã vào sheet 1 ah!
nhưng khi tôi dán đoạn mã vào shet 1 rôi thực hiện tại ô A1=Nguyễn Trường/ gõ Tachten(A1,0) --> #Name?
Không có kết quả bạn ah!
Mong giúp đỡ!!!

tedaynui
01-11-08, 04:05 PM
Chào bạn!
cho tôi hỏi mình dán đoạn mã vào sheet 1 ah!
nhưng khi tôi dán đoạn mã vào shet 1 rôi thực hiện tại ô A1=Nguyễn Trường/ gõ Tachten(A1,0) --> #Name?
Không có kết quả bạn ah!
Mong giúp đỡ!!!
Bạn Insert > Module, sau đó dán đoạn mã ấy vào Module mới vừa thêm vào (không phải Sheet)

TDN

chanquayxoan
02-11-08, 12:07 AM
Mình cần lấy tên đệm và tên chính thì dùng công thức nào ?
Nguyễn Tấn Dũng --> Nguyễn và Tấn Dũng

cadafi
02-11-08, 07:45 AM
Mình cần lấy tên đệm và tên chính thì dùng công thức nào ?
Nguyễn Tấn Dũng --> Nguyễn và Tấn Dũng

Bạn vui lòng đọc kỹ lại bài trong topic này, cụ thể là bài #19 (http://www.giaiphapexcel.com/forum/showpost.php?p=110637&postcount=19)

1956
24-11-08, 03:50 PM
tôi có danh sách họ tên trong excel , để tách thành họ riêng , tên riêng thì làm thế nào ?

phamduylong
24-11-08, 03:53 PM
tôi có danh sách họ tên trong excel , để tách thành họ riêng , tên riêng thì làm thế nào ?
Bạn xem bài http://www.giaiphapexcel.com/forum/showpost.php?p=17722&postcount=1

ThuNghi
24-11-08, 04:07 PM
tôi có danh sách họ tên trong excel , để tách thành họ riêng , tên riêng thì làm thế nào ?
Em cũng xin tham gia 1 code đơn giản. "Tách tên" có rất nhiều trên diễn đàn. Trước mắt em xin gởi anh 1 công thức và 1 code, tùy anh chọn:
1/ Công thức
A1: Họ tên
B1=TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",10)),18))
Hàm này nghĩa là thay 1 khỏan trắng giữa họ và tên thành 10 khỏan trắng.
Và lấy right 18. Tên VN không dài hơn 18 ký tự.
2/ Code: anh chép code này vào module. Nhấn Alt F11, và Insert Module.

Function layten(sHoTen As Range) As String
Dim Vitri As Long, sTen As String
Vitri = InStrRev(sHoTen, " ")
sTen = Right(sHoTen, Len(sHoTen) - Vitri)
layten = sTen
End Function
Cú pháp:
=layten(Ô chứa họ tên)
Hy vọng giúp được Anh.

Po_Pikachu
03-01-09, 04:47 PM
Đây là UDF hàm tách tên ngắn nhất!
Code này có sự hỗ trợ rất nhiệt tình của bác ndu96081631. Rất cảm ơn bác.


Function tachten(ten As String) As String
Dim arr() As String
If ten = "" Then tachten = "Error": Exit Function
arr() = Split(ten, " ")
tachten = arr(Len(ten) - Len(Application.WorksheetFunction.Substitute(ten, " ", "")))
End Function

Code này dùng để chỉ lấy tên của dữ liệu thôi.
Thân.

BNTT
03-01-09, 04:47 PM
...
- Nếu hàm này chỉ cắt mỗi tên thôi thì e rằng . . phí quá. hãy cho cái Option để có thể lấy HỌ - TÊN ĐỆM - TÊN

Đúng là hơi phí, vì cái này dùng hàm cũng ra mà:

=TRIM(RIGHT(SUBSTITUTE(Hovaten," ",REPT(" ",100)),100))

Po_Pikachu
03-01-09, 05:07 PM
- Nếu hàm này chỉ cắt mỗi tên thôi thì e rằng . . phí quá. hãy cho cái Option để có thể lấy HỌ - TÊN ĐỆM - TÊN
--Chúc vui--
Muốn Option thì có option liền:

Function tachten(ten As String, Optional k As String = "ten") As String
Dim arr() As String
If ten = "" Then tachten = "Error": Exit Function
arr() = Split(ten, " ")
If UCase(k) = "HO" Then
tachten = arr(0)
ElseIf UCase(k) = "TEN DEM" Then
tachten = Trim(WorksheetFunction.Substitute(WorksheetFunctio n.Substitute(ten, arr(Len(ten) - Len _
(WorksheetFunction.Substitute(ten, " ", ""))), ""), arr(0), ""))
ElseIf UCase(k) = "TEN" Then
tachten = arr(Len(ten) - Len(WorksheetFunction.Substitute(ten, " ", "")))
End If
End Function
Thân.

cadafi
03-01-09, 05:09 PM
Đây là UDF hàm tách tên ngắn nhất!


Function tachten(ten As String) As String
Dim arr() As String
If ten = "" Then tachten = "Error": Exit Function
arr() = Split(ten, " ")
tachten = arr(Len(ten) - Len(Application.WorksheetFunction.Substitute(ten, " ", "")))
End Function

Cái này sao gọi ngắn nhất được. Po_pikachu xem code này nhé:

Function TachTen(HoTen As String)
If HoTen = "" Then TachTen = "error": Exit Function
TachTen = Trim(Right(Replace(HoTen, " ", Space(100)), 100))
End Function


Còn muốn có optional thì cũng có đây:

Function TachTen(HoTen As String, Optional Vitri As Byte)
'Vị trí = 0 hoặc bỏ trống: Lấy tên (Mặc định), Vitri = 1 : Lấy Họ + Tên Lót
If HoTen = "" Then TachTen = "error": Exit Function
If IsNull(Vitri) Or Vitri = 0 Then
TachTen = Trim(Right(Replace(HoTen, " ", Space(100)), 100))
Else: TachTen = Left(HoTen, Len(HoTen) - Len(Trim(Right(Replace(HoTen, " ", Space(100)), 100))))
End If
End Function

BNTT
03-01-09, 05:14 PM
Hay lắm. Nhưng cái option... dài thòng à, Po ơi.
Làm vầy đi, nhập hàm lẹ hơn nè:

Function tachten(ten As String, Optional k As String = "ten") As String
Dim arr() As String
If ten = "" Then tachten = "Error": Exit Function
arr() = Split(ten, " ")
If k = 1 Then
tachten = arr(0)
ElseIf k = 2 Then
tachten = Trim(WorksheetFunction.Substitute(WorksheetFunctio n.Substitute(ten, arr(Len(ten) - Len _
(WorksheetFunction.Substitute(ten, " ", ""))), ""), arr(0), ""))
ElseIf k = 3 Then
tachten = arr(Len(ten) - Len(WorksheetFunction.Substitute(ten, " ", "")))
End If
End Function
Cho k = 1, k = 2, k = 3 cho nó dễ xài í mà... chớ hỏng sửa gì đâu, mà nói thiệt có biết gì đâu mà sửa...

Po_Pikachu
03-01-09, 05:14 PM
Nâng cấp nhờ bác Ca_Dafi.

Function tachten(ten As String, Optional k As String = "ten") As String
Dim arr() As String
If ten = "" Then tachten = "Error": Exit Function
arr() = Split(ten, " ")
If UCase(k) = "HO" Then
tachten = arr(0)
ElseIf UCase(k) = "TEN DEM" Then
tachten = Trim(Replace(Replace(ten, arr(Len(ten) - Len _
(Replace(ten, " ", ""))), ""), arr(0), ""))
ElseIf UCase(k) = "TEN" Then
tachten = arr(Len(ten) - Len(Replace(ten, " ", "")))
End If
End Function
Thân.

BNTT
03-01-09, 05:19 PM
Cho hỏi Cadafi tí, muốn lấy cái ở giữa thui, thì option bằng bi nhiu?
Với lại, Cadafi làm hay đó. Hàm nào VBE có thì xài, mắc gì phải lôi Application.WorksheetFunction ra hơ...

Mr Okebab
03-01-09, 05:25 PM
Hàm ngắn hàm dài chưa quan trọng.

Bây giờ các bác thử với dữ liệu khoảng 30.000 cell xem hàm nào chạy nhanh hơn ??


Thân!

BNTT
03-01-09, 05:27 PM
Bác Bắp gửi dùm cái file có 30.000 cái tên lên đây, tui test dùm cho...

Po_Pikachu
03-01-09, 05:29 PM
Test dùm cái của em luôn nha! Cảm ơn bác trước.
Thân.

cadafi
03-01-09, 05:39 PM
Cho hỏi Cadafi tí, muốn lấy cái ở giữa thui, thì option bằng bi nhiu?
Với lại, Cadafi làm hay đó. Hàm nào VBE có thì xài, mắc gì phải lôi Application.WorksheetFunction ra hơ...
Anh chọn tham số Vitri theo như code bên dưới nhé!
Code này chắc không còn ngắn hơn được nữa, chỉ mỗi cái IF để Check Hoten = Blank mà thôi:

Function TachTen(HoTen As String, Optional Vitri As Byte = 1)
'Vtri = 1: Ten ; Vtri = 2: Ho ; Vtri = 3: TenLot ; Vtri = 4: HoTenlot
If HoTen = "" Then TachTen = "error": Exit Function
Dim Ten, Ho, TenLot, HoTenlot
Ten = Trim(Right(Replace(HoTen, " ", Space(100)), 100))
Ho = Trim(Left(Replace(HoTen, " ", Space(100)), 100))
TenLot = Trim(Replace(Replace(HoTen, Ten, ""), Ho, ""))
HoTenlot = Trim(Left(HoTen, Len(HoTen) - Len(Ten)))
TachTen = Choose(Vitri, Ten, Ho, TenLot, HoTenlot)
End Function

hoangvuluan
03-01-09, 05:45 PM
Góp thêm 1 hàm cho đông vui :-)

Cách dùng: Đối số tùy chọn iPos xác định vị trí của chuỗi con cần lấy.
iPos <= 0 : hàm trả về Chuỗi con đầu tiên (tương đương với Họ)
iPos = 1, 2, ... - hàm trả về các chuỗi con kế tiếp (tương đương với chữ lót thứ 1, thứ 2...)
iPos >= (tổng số từ -1) : trả về chuỗi cuối cùng (tương đương với Tên)



Function SubStr(ByVal st As String, Optional iPos As Integer = 0) As String
Dim i As Long, lB As Long, uB As Long
Dim aStr() As String
st = WorksheetFunction.Trim(st) 'DelSpace(st)'
If st = Empty Then Exit Function
aStr = Split(st, Space(1))
lB = LBound(aStr): uB = UBound(aStr)
iPos = IIf(iPos > uB, uB, IIf(iPos < lB, lB, iPos))
SubStr = aStr(iPos)
End Function

cadafi
03-01-09, 05:52 PM
Hàm ngắn hàm dài chưa quan trọng.
Bây giờ các bác thử với dữ liệu khoảng 30.000 cell xem hàm nào chạy nhanh hơn ??
Thân!
Có ai biết cách Test hôn, Test hộ code của em tí (bài #13), test 50.000 cell nha!

Po_Pikachu
03-01-09, 06:11 PM
Em lại theo bước bác Ca_Dafi 1 lần nữa. Hiiiiiiiii
Có bác nào có dữ liệu nhiều không? Test giùm em đoạn code này với. Có thể code này là ngắn nhất luôn rồi đó.

Function TachTen(HoTen As String, Optional Vitri As Byte = 1) As String
'Vtri = 1: Ho ; Vtri = 2: TenLot ; Vtri = 3: Ten ; Vtri = 4: HoTenlot
Dim arr() As String
arr() = Split(HoTen, " ")
k = UBound(arr)
TachTen = Choose(Vitri, arr(0), Trim(Replace(Replace(HoTen, arr(k), ""), arr(0), "")), _
arr(k), Trim(Replace(HoTen, arr(k), "")))
End Function
Thân.

Mr Okebab
03-01-09, 06:55 PM
Có ai biết cách Test hôn, Test hộ code của em tí (bài #13), test 50.000 cell nha!
Pro|Rows|Time (milisecond)
Po_Pikachu|50.000|2.575
Ca_Dafi|50.000|2.739
HVL|50.000|2.530
Các bác nhớ cho Calculation = Manual nhé


Bác nào có UDF nào chạy nhanh hơn không ??

Thân!

ndu96081631
04-01-09, 07:33 AM
Cái này sao gọi ngắn nhất được. Po_pikachu xem code này nhé:

Function TachTen(HoTen As String)
If HoTen = "" Then TachTen = "error": Exit Function
TachTen = Trim(Right(Replace(HoTen, " ", Space(100)), 100))
End Function


Vẫn chưa ngắn ---> cái này nè:


Function TachTen(Hovaten As String) As String
TachTen = Trim(Right(Replace(Hovaten, " ", Space(255)), 255))
End Function
Các bạn thử xem, bào đãm hàm này sẽ không báo lổi gì, cho dù Hovaten = ""
---> Khỏi cần IF

BNTT
04-01-09, 08:49 AM
Vẫn chưa ngắn ---> cái này nè:


Function TachTen(Hovaten As String) As String
TachTen = Trim(Right(Replace(Hovaten, " ", Space(255)), 255))
End Function
Các bạn thử xem, bào đãm hàm này sẽ không báo lổi gì, cho dù Hovaten = ""
---> Khỏi cần IF
Các bạn cho tôi hỏi: Giữa cái UDF ở trên của anh Tuấn và cái công thức này:

=TRIM(RIGHT(SUBSTITUTE(Hovaten," ",REPT(" ",255)),255))
là tương đương nhau phải không.
Vậy với cùng một dữ liệu, thì nên dùng cái nào, và cái nào nhanh hơn?

Mr Okebab
04-01-09, 08:53 AM
Vẫn chưa ngắn ---> cái này nè:


Function TachTen(Hovaten As String) As String
TachTen = Trim(Right(Replace(Hovaten, " ", Space(255)), 255))
End FunctionCác bạn thử xem, bào đãm hàm này sẽ không báo lổi gì, cho dù Hovaten = ""
---> Khỏi cần IF

Dĩ nhiên với những hàm về Text thì việc Text = "" vẫn không sao cả.
Tuy nhiên việc phân định Text = "" rồi thoát giúp cho hàm chạy nhanh hơn.
Nhưng nếu người lập trình không thích thì cũng chẳng sao cả.

Bác cải tiến hàm của bác để có thể lấy đủ cả họ tên xem tốc độ ra sao, bởi bác là người thích về tốc độ. Hy vọng có những cải tiến !

Thân!

ndu96081631
04-01-09, 09:23 AM
Các bạn cho tôi hỏi: Giữa cái UDF ở trên của anh Tuấn và cái công thức này:
=TRIM(RIGHT(SUBSTITUTE(Hovaten," ",REPT(" ",255)),255))là tương đương nhau phải không.
Vậy với cùng một dữ liệu, thì nên dùng cái nào, và cái nào nhanh hơn?
Đúng vậy! 2 cái hoàn toàn như nhau
Chỉ đưa giãi pháp lên chơi thôi chứ nếu dùng thì tôi sẽ dùng công thức

Mr Okebab
04-01-09, 09:38 AM
Sau đây là kết quả. Chỉ với kết quả lấy tên (Không lấy Họ , không lấy Tên đệm), dữ liệu là 50.000 Cells

VBA

Pi_Pokachu:

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 FunctionCa_Dafi :

Function TachTenCa(HoTen As String, Optional Vitri As Byte = 1)
'ca dafi
'Vtri = 1: Ten ; Vtri = 2: Ho ; Vtri = 3: TenLot ; Vtri = 4: HoTenlot
If IsNull(HoTen) Or HoTen = "" Then TachTenCa = "error": Exit Function
Dim Ten, Ho, TenLot, HoTenlot
Ten = Trim(Right(Replace(HoTen, " ", Space(100)), 100))
Ho = Trim(Left(Replace(HoTen, " ", Space(100)), 100))
TenLot = Trim(Replace(Replace(HoTen, Ten, ""), Ho, ""))
HoTenlot = Trim(Left(HoTen, Len(HoTen) - Len(Ten)))
TachTenCa = Choose(Vitri, Ten, Ho, TenLot, HoTenlot)
End FunctionNDU


Function TachTenNDU(Hovaten As String) As String
' Bac NDU
TachTenNDU = Trim(Right(Replace(Hovaten, " ", Space(255)), 255))
End Function

Công thức (NonVBA)
Bác BNTT

=TRIM(RIGHT(SUBSTITUTE(A2;" ";REPT(" ";255));255))

Pro|Rows|Times (Milisecond)
Po_Pikachu|50.000|1.544
Ca_Dafi|50.000|1.633
HVL|50.000|1.517
NDU|50.000|1.046
BNTT|50.000|72.138
Hơi ngạc nhiên nhưng như vậy có nghĩa rằng VBA có thế mạnh của nó

Thân!

Po_Pikachu
04-01-09, 09:46 AM
Nếu bác không để ý thì thấy dùng công thức thì file sẽ nặng hơn rất nhiều đó. Vì file sẽ tính dung lượng trên số lượng ký tự gõ vào mà!
Mà code VBA của bác NUD chơi ăn gian quá! Sao chỉ có lấy tên không vậy. Code của em lấy được mọi thứ kia mà. Nếu muốn lấy tên không thì đâu cần viết dài vậy?
Code lấy tên:

Function TachTenPo(HoTen As String) As String '' Po_PiKachu
Dim arr() As String
IF HoTen = "" then TachTenPo = "Error": Exit Function
arr() = Split(HoTen, " ")
TachTenPo = arr(UBound(arr))
End Function
Thân.

123
14-01-09, 10:22 AM
Trong cùng 1 ô.VD: chÞ h»ng -71 chïa l¸ng, dong da bây giờ tớ muốn tách ra lam 4 cột mà không có cách nao, giup minh voi

BNTT
14-01-09, 10:32 AM
Trong cùng 1 ô.VD: chÞ h»ng -71 chïa l¸ng, dong da 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 cái chữ này:

chị hằng -71 chùa láng, dong da
Bạn muốn tách thành 4 cột như thế nào ? Tách từ chữ nào?

cadafi
16-01-09, 12:02 AM
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.

http://i280.photobucket.com/albums/kk163/ca_dafi/Step0.jpg

http://i280.photobucket.com/albums/kk163/ca_dafi/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 ý!
http://i280.photobucket.com/albums/kk163/ca_dafi/Stpe2.jpg

http://i280.photobucket.com/albums/kk163/ca_dafi/Step3.jpg

ongtrungducmx25
16-01-09, 08:52 AM
Xin hỏi em muốn tách tên bằng phim tắt thì sao nhỉ! Ctrl+Shift+T

ongtrungducmx25
17-01-09, 05:38 PM
Bạn xem file đính kèm. File này làm bằng công thức. Cái này có nhiều trên GPE mình lắm bạn à!
mượn đở file của pac ca_dafi , thì em đã thêm vào phím tắt được rồi nhỉ:
Ctrl+Shift+T

Po_Pikachu
04-02-09, 10:45 PM
Xin ké thêm 1 cách của em nữa!

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 (http://www.giaiphapexcel.com/forum/showthread.php?t=18112). Vì có nhiều điều trong đó cũng hay lắm.
Thân.

ngocdong
01-04-09, 02:09 PM
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?

laianhtu
01-04-09, 02:24 PM
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".

hoa35ktxd
01-04-09, 06:42 PM
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ụ


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

dunglev
01-04-09, 08:04 PM
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))

friendship293a
12-07-09, 10:27 PM
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

sealand
12-07-09, 11:19 PM
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


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ọ

sealand
13-07-09, 12:18 AM
Mình bổ xung tách Họ, lót, tên và cắt khoảng trắng thừa:


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

pecry
27-10-09, 07:24 PM
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

ptlong04x1
27-10-09, 11:20 PM
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 đủ :


1. Họ : =LEFT(TRIM(A1),FIND(" ",A1)-1)
2. Đệm : =TRIM(MID(SUBSTITUTE(TRIM(A1)," ",REPT(" ",100)),100,LEN(SUBSTITUTE(TRIM(A1)," ",REPT(" ",100)))-200))
3. Tên : =TRIM(RIGHT(SUBSTITUTE(TRIM(A1)," ",REPT(" ",100)),100))

quang85vn
29-10-09, 03:39 PM
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

Hai Lúa Miền Tây
29-10-09, 03:48 PM
E Thử rồi nhưng vẫn bị báo lỗi như này: #NAME
Bạn có Enable Macros chưa vậy ?
Bạn xem lại file nhé

havietchuong
09-11-09, 05:57 PM
Để 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.

ndu96081631
09-11-09, 07:19 PM
Để 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:

F3 =TRIM(RIGHT(SUBSTITUTE(TRIM($B3)," ",REPT(" ",LEN($B3))),LEN($B3)))

E3 =TRIM(SUBSTITUTE($B3,$F3,""))

ggoo0105
11-11-09, 09:44 AM
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!

hoaithuy194
18-03-10, 03:12 PM
Em có 1 file dữ liệu như file đính kèm. Em cần tách ra thành 2 cột khác nhau để lấy phần Họ và tên, bỏ phần chữ "chia sẻ ý kiến". Các anh chị xem có cách nào hay công thức gì mà có thể làm nhanh giúp em với vì file dữ liệu của em rất nhiều mà click chọn xóa từng ô thì mất thời gian rất nhiều...
Cảm ơn rất nhiều.

Hai Lúa Miền Tây
18-03-10, 03:19 PM
Em có 1 file dữ liệu như file đính kèm. Em cần tách ra thành 2 cột khác nhau để lấy phần Họ và tên, bỏ phần chữ "chia sẻ ý kiến". Các anh chị xem có cách nào hay công thức gì mà có thể làm nhanh giúp em với vì file dữ liệu của em rất nhiều mà click chọn xóa từng ô thì mất thời gian rất nhiều...
Cảm ơn rất nhiều.
Lần sau bạn cố gắng tìm ở diễn đàn nhé.
Bạn xem file nhe

tuan_anhbm
30-03-10, 10:17 PM
Tôi xin tham gia 1 PP tách lấy họ, tên, chữ lót (của domfootwear dùng công thức, cái này dùng VBA)
Không phụ thuộc số từ trong tên. Nó sẽ tách mỗi từ qua 1 cell.
Cái này thực ra tôi lấy từ bên mục "Các phương pháp tách họ và tên (http://www.giaiphapexcel.com/forum/showthread.php?t=426)".
Sử dụng chức năng "text to columns". Record macro sau đó tùy biến 1 chút...
Giải pháp ở bên đó rất nhiều nhưng như thế này thì chưa thấy nên đưa lên để các bạn tham khảo thêm.
Thoạt nhìn thấy dài dòng nhưng code chính chỉ có 1 dòng.


Sub TachHoVaTen()
If WorksheetFunction.CountA(Selection) = 0 Then
MsgBox "Vung chon khong co du lieu !"
Exit Sub
End If
Selection.Offset(0, 1).Select
Selection.Value = Selection.Offset(0, -1).Value
Range(Selection.Offset(0, 1), Selection.Offset(0, 100)).ClearContents
For Each Rg In Selection
Rg.TextToColumns Destination:=Rg '<--- code chinh chi co nhieu day.
Next
MsgBox "Xong !"
End Sub

(Vô mục "Các phương pháp tách họ và tên (http://www.giaiphapexcel.com/forum/showthread.php?t=426)" thì không thấy nổi các nút "Trả lời..." nên không thể post vào mục đó được).

thenambgi
28-04-10, 10:55 PM
Tôi có chuỗi họ tên: NguyễnThịThanhThuỷ
Muốn thêm ký tự trắng vào giữa họ, đệm, tên để trở thành Nguyễn Thị Thanh Thuỷ thì phải làm thế nào?
(Dùng VBA và dùng Công thức)
Cảm ơn các bác đã giúp đỡ !

BNTT
28-04-10, 11:02 PM
Tôi có chuỗi họ tên: NguyễnThịThanhThuỷ
Muốn thêm ký tự trắng vào giữa họ, đệm, tên để trở thành Nguyễn Thị Thanh Thuỷ thì phải làm thế nào?
(Dùng VBA và dùng Công thức)
Cảm ơn các bác đã giúp đỡ !
Nếu chỉ riêng một trường hợp này mà thôi, thì chắc chắc là có cách, dùng công thức cũng được mà dùng VBA cũng được.
Tuy nhiên, nếu bạn muốn tìm cách nào đó để có thể áp dụng cho mọi trường hợp tên bị viết dính nhau như thế, thì thua!
Bởi vì, họ tên (nhất là tiếng Việt) chả có cái quy luật nào để mà tách ra cả.

MinhCong
29-04-10, 07:49 AM
Nếu chỉ riêng một trường hợp này mà thôi, thì chắc chắc là có cách, dùng công thức cũng được mà dùng VBA cũng được.
Tuy nhiên, nếu bạn muốn tìm cách nào đó để có thể áp dụng cho mọi trường hợp tên bị viết dính nhau như thế, thì thua!
Bởi vì, họ tên (nhất là tiếng Việt) chả có cái quy luật nào để mà tách ra cả.
Cái này Em nghĩ cao thủ VBA có thể làm được Anh à. Em thấy có thể tách theo quy luật sau:
Quét từ trái sang phải, nếu gặp ký tự nào là chữa HOA thì thêm 1 khoảng trắng phía trước. Anh thấy thế nào?

thenambgi
29-04-10, 08:04 AM
Cái này Em nghĩ cao thủ VBA có thể làm được Anh à. Em thấy có thể tách theo quy luật sau:
Quét từ trái sang phải, nếu gặp ký tự nào là chữa HOA thì thêm 1 khoảng trắng phía trước. Anh thấy thế nào?

Tôi cũng nghĩ như vậy. Đúng là có thể quyét từ trái sang phải, gặp kỹ tự viết HOA (trừ ký tự đầu tiên) thì tự động thêm vào 1 khoảng trắng. Nhưng vấn đề là câu lệnh thế nào?? %#^#$%#^#$

ptm0412
29-04-10, 08:36 AM
Quét thì quét! Dùng tạm cái hàm sau:

Function AddSpace(MyStr As String) As String
Dim Arr, TmpStr, Chrt, i
Arr = "ABCDEGHIKLMNOPQRSTUVXY"
MyStr = Trim(MyStr)
TmpStr = UCase(Left(MyStr, 1))
With Application
For i = 2 To Len(MyStr)
Chrt = Mid(MyStr, i, 1)
TmpStr = TmpStr & IIf(.IsNumber(.Find(Chrt, Arr, 1)), " ", "") & Chrt
Next
End With
AddSpace = TmpStr
End Function

Ghi chú: chưa có các ký tự có dấu tiếng Việt. Các ký tự có dấu này còn tuỳ theo font sử dụng nên chưa cho vào.

MinhCong
29-04-10, 08:41 AM
Anh PTM ơi, Mình có thể dùng quét bằng cáh: Quét từ trái sang phải nếu gặp ký tự nào có CODE(text)<=90 thì thêm dấu cách phía trước được không Anh?

ptm0412
29-04-10, 08:46 AM
Anh PTM ơi, Mình có thể dùng quét bằng cáh: Quét từ trái sang phải nếu gặp ký tự nào có CODE(text)<=90 thì thêm dấu cách phía trước được không Anh?

Còn 1 số ký tự có dấu tiếng Việt nữa như Đặng, Ánh, Ân, Ẩn, . .., nếu dùng Font thuộc bảng mã Unicode thì character code của mấy thằng đó lung tung lắm. Nhỏ hơn 255 cũng có, lớn hơn 7000 cũng có.

Tuỳ Font mà nhét vào thôi.

concogia
29-04-10, 09:19 AM
Tôi có chuỗi họ tên: NguyễnThịThanhThuỷ
Muốn thêm ký tự trắng vào giữa họ, đệm, tên để trở thành Nguyễn Thị Thanh Thuỷ thì phải làm thế nào?
(Dùng VBA và dùng Công thức)
Cảm ơn các bác đã giúp đỡ !
Có thể như thế này


Public Function tach(vung As String) As String
Dim chu, tam, thay As String
Dim i, J As Integer
For i = 2 To Len(vung)
chu = Mid(vung, i, 1)
If chu = UCase(chu) And InStr(1, tam, chu) = False Then tam = tam & chu
Next
For J = 1 To Len(tam)
thay = Mid(tam, J, 1)
vung = Replace(vung, thay, " " & thay)
Next
tach = Trim(vung)
End Function

ptm0412
29-04-10, 09:43 AM
Bổ sung 4 chữ cái: Á, Â, Ẩ, Đ thuộc bảng mã Unicode.
Các chữ cái khác thêm vào tương tự
(Sao tự nhiên quên mất tiêu hàm InStr() của VBA, thanks cò già 1 phát)


Function AddSpace(MyStr As String) As String
Dim Arr, TmpStr, Chrt, i
Arr = "ABCDEGHIKLMNOPQRSTUVXY"
Arr = Arr & ChrW(193) & ChrW(7848) & ChrW(194) & ChrW(272)
MyStr = Trim(MyStr)
TmpStr = UCase(Left(MyStr, 1))

For i = 2 To Len(MyStr)
Chrt = Mid(MyStr, i, 1)
TmpStr = TmpStr & IIf(InStr(1, Arr, Chrt), " ", "") & Chrt
Next
AddSpace = TmpStr
End Function

Riêng font thuộc bảng mã VNI và bảng mã TCVN3 thì gõ trực tiếp vào chuỗi Arr

huuthang_bd
29-04-10, 09:51 AM
Tôi có chuỗi họ tên: NguyễnThịThanhThuỷ
Muốn thêm ký tự trắng vào giữa họ, đệm, tên để trở thành Nguyễn Thị Thanh Thuỷ thì phải làm thế nào?
(Dùng VBA và dùng Công thức)
Cảm ơn các bác đã giúp đỡ !
Nhiều người dùng VBA rồi, bây giờ tôi làm bằng công thức. Chỉ để tham khảo thôi chứ để ứng dụng thì không tốt lắm do có nhiều name và công thức mảng.

Tất cả ở trong file.

Một số hạn chế:
Công thức chỉ đúng trong trường hợp sử dụng bảng mã VNI Windows
Tên tối đa 5 chữ (Cái này có thể thêm name để khắc phục được nhưng tôi thấy 5 chữ là đủ rồi)

BNTT
29-04-10, 09:58 AM
Nếu chỉ riêng một trường hợp này mà thôi, thì chắc chắc là có cách, dùng công thức cũng được mà dùng VBA cũng được.
Tuy nhiên, nếu bạn muốn tìm cách nào đó để có thể áp dụng cho mọi trường hợp tên bị viết dính nhau như thế, thì thua!
Bởi vì, họ tên (nhất là tiếng Việt) chả có cái quy luật nào để mà tách ra cả.
Nói thật nhé, các bác các bạn để thời giờ suy nghĩ ra cái khác đi, còn hay hơn.

Không phải tôi lười, vì giải pháp dùng vòng lặp quét chữ hoa thì tôi đã nghĩ đến, nhưng ý tôi muốn nói là: Sử dụng cho tất cả mọi trường hợp, thì thua!

Một trong những lý do để... thua, đó là buộc dữ liệu cho trước phải được nhập đúng kiểu viết chữ HOA cho chữ cái đầu và viết chữ THƯỜNG cho những chữ còn lại. Nếu nhỡ như thay vì NguyễnThịThanhThuỷ, mà nó là Nguyễnthịthanhthuỷ hay là NGUYỄNTHỊTHANHTHỦY, thì sao? Đó là chưa nói đến loại font của dữ liệu cho trước.

Thêm nữa, cho dù là có khả năng tạo được một cái Hàm xử lý được chuyện này, thì liệu nó sẽ được ứng dụng ở đâu? Hay chỉ là viết cho vui? Mà nói thật chứ, chẳng vui đâu, vì nếu muốn được gọi là "Ứng dụng" thì nó phải đáp ứng được mọi trường hợp cơ!

PiEiKiu
07-05-10, 09:05 AM
Các bạn có ai biết cách tách 1 cột : Họ & tên thành 3 Cột : Họ - Tên Lót - Tên không?
Bạn nào biết thì hãy giúp mình với, mình đã tham khảo trên diễn dàn nhưng chỉ thấy tách được 2 cột thôi.
Mình không rành về cách viết macro nên mù mờ lắm.
Các bạn nếu ai biết vui long giúp mình với nhé:
VD: Nguyễn Văn A => Nguyễn | Văn | A
NGuyễn Thị Thuý Hằng => Nguyễn | Thị Thuý | Hằng

Rất mong sự giúp đỡ của các bạn. Xin chân thành các bạn rất nhiều.

Hai Lúa Miền Tây
07-05-10, 09:14 AM
Xem bài sau nhé
http://www.giaiphapexcel.com/forum/showthread.php?426-C%C3%A1c-ph%C6%B0%C6%A1ng-ph%C3%A1p-t%C3%A1ch-h%E1%BB%8D-v%C3%A0-t%C3%AAn

hoangminhtien
07-05-10, 09:16 AM
ở trên diễn đàn vấn đề này bàn nhiều lắm, đây là 1 link ví dụ, bạn tham khảo nhé! http://www.giaiphapexcel.com/forum/showthread.php?30872-T%C3%B4%CC%89ng-h%C6%A1%CC%A3p-ca%CC%81c-ph%C6%B0%C6%A1ng-pha%CC%81p-ta%CC%81ch-ho%CC%A3-va%CC%80-t%C3%AAn

tamnt07
25-06-10, 08:01 AM
Mình có một cột họ tên học sinh, bây giờ muốn tách các họ tên từng học sinh ra theo từng ký tự chữ cái, mỗi chữ cái nằm trong một ô excel thì làm thế nào cho nhanh, dùng công thức nào để tách??

ptm0412
25-06-10, 08:25 AM
B1 = MID(SUBSTITUTE($A1," ","");COLUMN()-1,1)

Fill ngang qua đến khi hết ký tự

tamnt07
25-06-10, 09:27 AM
Nhưng bây giờ em muốn bổ sung khoảng cách giữa các từ nữa tức là sẽ có thêm các ô cell khoảng trắng giữa các từ thì làm thế nào ạ?

tamnt07
25-06-10, 09:30 AM
À em làm được rồi, bỏ cái hàm sub.. đi là ổn!

ndu96081631
25-06-10, 09:39 AM
Nhưng bây giờ em muốn bổ sung khoảng cách giữa các từ nữa tức là sẽ có thêm các ô cell khoảng trắng giữa các từ thì làm thế nào ạ?
Thì bỏ hàm SUBSTITUTE đi chứ gì nữa:
=MID($A1,COLUMNS($A:A),1)

ptm0412
25-06-10, 10:09 AM
Bỏ Substitute, nhưng nên thêm Trim vào.

nganguyen.tl
28-06-10, 04:36 PM
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.

nguyensinh1988
11-07-10, 11:15 AM
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

tedaynui
11-07-10, 11:24 AM
Bạn hãy tìm trên GPE bài "Tổng hợp các cách tách tên" (http://www.giaiphapexcel.com/forum/showthread.php?30872-T%C3%B4%CC%89ng-h%C6%A1%CC%A3p-ca%CC%81c-ph%C6%B0%C6%A1ng-pha%CC%81p-ta%CC%81ch-ho%CC%A3-va%CC%80-t%C3%AAn) của Hoàng Danh sẽ đáp ứng ngoài cả ý muốn của bạn

TDN

concogia
11-07-10, 11:25 AM
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


Public Function tach(Cll As Range) As String
tach = Left(Cll, InStrRev(Cll, " ") - 1)
End Function

cuncon207
11-07-10, 11:30 AM
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

ndu96081631
11-07-10, 11:35 AM
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:

=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ì

iamcuong
21-07-10, 11:55 AM
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.

2384
cái này ăn sẵn lại hay, mà lại đơn giản....thanks

kureikain
25-07-10, 02:41 AM
@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 đó!

minh huệ A
26-07-10, 11:15 AM
ACE tải phần mềm nhỏ này về cài đặt thử xem, rất nhanh và dễ sử dụng, không cần công thức!;;;;;;;;;;;http://www.giaovien.net/index.php?option=com_docman&task=search_result&Itemid=131

yeu_excel
03-01-11, 04:10 PM
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!

khoavu87
03-01-11, 04:24 PM
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)

yeu_excel
04-01-11, 07:50 AM
Cám ơn bạn [/URL] [URL="http://www.giaiphapexcel.com/forum/member.php?140854-khoavu87"]khoavu87 (http://www.giaiphapexcel.com/forum/member.php?140854-khoavu87), nhưng mình muốn nó tự động làm việc, giống như dùng công thức ấy

dat_butmuc
04-01-11, 08:25 AM
Cám ơn bạn khoavu87 (http://www.giaiphapexcel.com/forum/member.php?140854-khoavu87), nhưng mình muốn nó tự động làm việc, giống như dùng công thức ấy

- Tại ô D1:
=LEFT(C1,FIND("/",C1)-1)
- Tại ô E1:
=SUBSTITUTE(C1,D1&"/","")

Rồi kéo xuống

Dauthivan
29-01-11, 09:33 AM
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?

MonaLisa7775
29-01-11, 09:52 AM
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.

bizinit
18-03-11, 04:53 PM
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 ạ!

MonaLisa7775
18-03-11, 09:16 PM
Bạn thích cột E hông? Lấy cột E nhen!

E5 = C5 + D5

Xế nà thong!

gaIT
22-03-11, 10:05 AM
gaIT có một vấn đề nhỏ cần thọ giáo mọi người. Bây giờ gaIT muốn tách tên và họ theo cấu trúc như thế này thành 2 cột khác nhau. Mọi người xem file đính kèm và hỗ trợ gaIT giúp nha. Thanks mọi người!

ndu96081631
22-03-11, 10:18 AM
gaIT có một vấn đề nhỏ cần thọ giáo mọi người. Bây giờ gaIT muốn tách tên và họ theo cấu trúc như thế này thành 2 cột khác nhau. Mọi người xem file đính kèm và hỗ trợ gaIT giúp nha. Thanks mọi người!
Cấu trúc mà bạn nói ấy được phát biểu và định nghĩa thế nào? Tên 4 từ thì tách làm 2 cột, mỗi cột 2 từ chăng?
Thế tên có 5 từ, 6 từ... thậm chí là 7 từ thì tách sao?
Điều mà bạn nên làm ở đây là:
- Đưa ra tất cả các trường hợp đặc biệt có thể xãy ra và kết quả mà bạn muốn đạt được
- Cần định nghĩa thật rõ về nguyên tắc

dat_butmuc
22-03-11, 10:23 AM
gaIT có một vấn đề nhỏ cần thọ giáo mọi người. Bây giờ gaIT muốn tách tên và họ theo cấu trúc như thế này thành 2 cột khác nhau. Mọi người xem file đính kèm và hỗ trợ gaIT giúp nha. Thanks mọi người!

Tách tên theo cảm tính à?
Tên lúc thì 2 từ, lúc thì một từ là sao?
Ví dụ: Bạn giải thích thế nào tên Đăng Khoa & Khoa trong Lâm Đăng Khoa & Lâm Văn Khoa ?
Đăng hay Văn trong trường hợp này đều là tên đệm

gaIT
24-03-11, 09:33 AM
tách thỏa 2 điều kiện như thế này:
1. Tên 4 -7 từ thì cột tên vẫn là 2 từ, số còn lại là học và tên đệm
2. Tên 3 từ, nếu tên đệm là "Văn" hay "Thị" thì tách theo họ (vd: Lâm Đăng Khoa tách ra là Lâm (họ) - Đăng Khoa (tên). Còn Lâm Văn Khoa, tách ra là Lâm Văn (họ) - Khoa (tên)). Tương tự với lên lót là "Thị".

Chính vì như vậy mới thực sự nhức đầu...hy vọng nhận được sự giúp đỡ từ mọi người! thanks...

ndu96081631
24-03-11, 10:06 AM
tách thỏa 2 điều kiện như thế này:
1. Tên 4 -7 từ thì cột tên vẫn là 2 từ, số còn lại là học và tên đệm
2. Tên 3 từ, nếu tên đệm là "Văn" hay "Thị" thì tách theo họ (vd: Lâm Đăng Khoa tách ra là Lâm (họ) - Đăng Khoa (tên). Còn Lâm Văn Khoa, tách ra là Lâm Văn (họ) - Khoa (tên)). Tương tự với lên lót là "Thị".

Chính vì như vậy mới thực sự nhức đầu...hy vọng nhận được sự giúp đỡ từ mọi người! thanks...
Từ đó đến giờ mới thấy có cái quy định quái dị thế này! Hỏi bạn nha:
- Người có tên Trằn Văn Văn thì tách sao?
- Người có tên Lê Thị Trái Thị thì tách sao?

dat_butmuc
24-03-11, 10:30 AM
tách thỏa 2 điều kiện như thế này:
1. Tên 4 -7 từ thì cột tên vẫn là 2 từ, số còn lại là học và tên đệm
2. Tên 3 từ, nếu tên đệm là "Văn" hay "Thị" thì tách theo họ (vd: Lâm Đăng Khoa tách ra là Lâm (họ) - Đăng Khoa (tên). Còn Lâm Văn Khoa, tách ra là Lâm Văn (họ) - Khoa (tên)). Tương tự với lên lót là "Thị".

Chính vì như vậy mới thực sự nhức đầu...hy vọng nhận được sự giúp đỡ từ mọi người! thanks...

Thực tế, làm công thức thì không nhức đầu, mà nhức đầu ở quy định tách họ tên của bạn (bởi vì nó chẳng theo một chuẩn/quy định nào cả - không phân biệt được Tên, Tên đệm)
Tôi làm một giải pháp đáp ứng yêu cầu cho bạn & tôi cho đó là tào lao:
Bắt đầu tại C2, tách tên:

=REPLACE(A2,1,IF(LEN(A2)-LEN(SUBSTITUTE(A2," ",""))<3,IF(ISERR(FIND(" Văn",A2)),IF(ISERR(FIND(" Thị",A2)),FIND(" ",A2),FIND(" Thị",A2)+4),FIND(" Văn",A2)+4),FIND("/",SUBSTITUTE(A2," ","/",LEN(A2)-LEN(SUBSTITUTE(A2," ",""))-1))),"")
Tại B2, tách họ & tên đệm:

=LEFT(A2,LEN(A2)-LEN(C2)-1)
Xem thêm file

ndu96081631
24-03-11, 11:45 AM
Thực tế, làm công thức thì không nhức đầu, mà nhức đầu ở quy định tách họ tên của bạn (bởi vì nó chẳng theo một chuẩn/quy định nào cả - không phân biệt được Tên, Tên đệm)
Tôi làm một giải pháp đáp ứng yêu cầu cho bạn & tôi cho đó là tào lao:
Bắt đầu tại C2, tách tên:

=REPLACE(A2,1,IF(LEN(A2)-LEN(SUBSTITUTE(A2," ",""))<3,IF(ISERR(FIND(" Văn",A2)),IF(ISERR(FIND(" Thị",A2)),FIND(" ",A2),FIND(" Thị",A2)+4),FIND(" Văn",A2)+4),FIND("/",SUBSTITUTE(A2," ","/",LEN(A2)-LEN(SUBSTITUTE(A2," ",""))-1))),"")Tại B2, tách họ & tên đệm:

=LEFT(A2,LEN(A2)-LEN(C2)-1)Xem thêm file

Hổng biết VN mình có ai tên Văn Văn hoặc Văn Trần Văn không nhỉ?
Ẹc... Ẹc...

dat_butmuc
24-03-11, 12:01 PM
Hổng biết VN mình có ai tên Văn Văn hoặc Văn Trần Văn không nhỉ?
Ẹc... Ẹc...

Lúc đó thì tác giả chỉ có nước cầu cứu đến Ndu... !

janghe1612
13-05-11, 04:15 PM
Giúp mình với mình muốn tách tên người hưởng thụ và số invoice No từ chuỗi ký tự như sau:
BENEFICIARY : CONG TY HANOI CHARGE : VND 11000 (DEBIT A/C 2003) INV NO.0007114 AND 0007116 DOC NO.3179575

cái mình muốn lấy là: CONG TY HANOI
và: 0007114 AND 0007116
Các ký tự mình gạch chân là những kỹ tự cố định.
Bạn nào giúp mình với chứ ngày nào cũng ngồi cut paste một đống giao dịch chắc mình chết quá à.//////
Cảm ơn nhìu nhìu!

nghiaphuc
13-05-11, 04:31 PM
Giúp mình với mình muốn tách tên người hưởng thụ và số invoice No từ chuỗi ký tự như sau:
BENEFICIARY : CONG TY HANOI CHARGE : VND 11000 (DEBIT A/C 2003) INV NO.0007114 AND 0007116 DOC NO.3179575

cái mình muốn lấy là: CONG TY HANOI
và: 0007114 AND 0007116
Các ký tự mình gạch chân là những kỹ tự cố định.
Bạn nào giúp mình với chứ ngày nào cũng ngồi cut paste một đống giao dịch chắc mình chết quá à.//////
Cảm ơn nhìu nhìu!
Giả sử chuỗi gốc nằm tại ô A1, bạn nhập công thức sau xem có được không:
- Chuỗi thứ 1: =MID(A1,15,FIND("CHARGE :",A1)-16)
- Chuỗi thứ 2: =MID(A1,FIND("NO.",A1)+3,FIND("DOC NO.",A1)-FIND("NO.",A1)-4)

janghe1612
17-05-11, 04:10 PM
Cảm ơn Nghiaphuc có vẻ như là đc bạn ạ.nhưng bạn giải thích giúp mình số 15 và -16 ở đây có nghĩa gì ko? cũng như là số +3 và -4 ở ct dưới

nguyenvietviet
31-05-11, 11:05 AM
Chào các bạn mình đã đôch qua nhiều bài viết rất hay của các bạn.
Nhưng mình chưa biết áp dụng. Minh có một ví dụ như thế này mong các bạn giúp đỡ. Cám ơn nhiều
1, Nhập kho vật liệu hàn của công ty B - Kho nhà máy
2, Nhập kho thép của công ty C - Kho Phú Tài
3, Nhập kho góc của công ty D - Kho Anh Tú
Mình muốn tách riêng tên lý do, tên công ty, kho ra 3 cột khác nhâu thì phải làm thế nào?
( Ví dụ 1 : Lý do = Nhập kho vật liệu hàn, Tên Công ty = Công ty B, kho = Ko nhà máy)
Mong các bạn

cuongetb
21-06-11, 10:22 AM
Em có file này, xin nhờ các pác tách tên giúp, vì nhiều ký tự quá, em dùng thử macro nhưng không ăn thua

huuthang_bd
21-06-11, 10:30 AM
Em có file này, xin nhờ các pác tách tên giúp, vì nhiều ký tự quá, em dùng thử macro nhưng không ăn thua
Bạn muốn tách lấy cái gì trong những chuỗi đó?

concogia
21-06-11, 10:31 AM
Em có file này, xin nhờ các pác tách tên giúp, vì nhiều ký tự quá, em dùng thử macro nhưng không ăn thua
Nếu dữ liệu chuẩn như thế, bạn chơi thử code này xem sao


Public Function Ten(Cll) As String
Ten = Left(Cll, InStr(1, Cll, ":") - 8)
End Function

Thân

cuongetb
21-06-11, 10:57 AM
Em muốn tách phần họ và tên, chức danh ra 1 cột riêng nhau

bebo021999
21-06-11, 11:08 AM
Chào các bạn mình đã đôch qua nhiều bài viết rất hay của các bạn.
Nhưng mình chưa biết áp dụng. Minh có một ví dụ như thế này mong các bạn giúp đỡ. Cám ơn nhiều
1, Nhập kho vật liệu hàn của công ty B - Kho nhà máy
2, Nhập kho thép của công ty C - Kho Phú Tài
3, Nhập kho góc của công ty D - Kho Anh Tú
Mình muốn tách riêng tên lý do, tên công ty, kho ra 3 cột khác nhâu thì phải làm thế nào?
( Ví dụ 1 : Lý do = Nhập kho vật liệu hàn, Tên Công ty = Công ty B, kho = Ko nhà máy)
Mong các bạn
Nếu dữ liệu của bạn có cấu trúc đúng như vậy, xem file đính kèm.
Trường hợp có sự khác biệt, post file lên nhé.

cuongetb
21-06-11, 11:16 AM
Em cảm ơn, nhưng em mở ra file treo luôn không mở thấy gì anh ạ

bebo021999
21-06-11, 11:19 AM
Em muốn tách phần họ và tên, chức danh ra 1 cột riêng nhau
Nếu dữ liệu của bạn có cấu trúc tương tự như ví dụ, xem file đính kèm nhé.

cuongetb
21-06-11, 11:22 AM
Được rồi anh, em đang thử xem thế nào. Xin cảm ơn các bác

huuthang_bd
21-06-11, 11:23 AM
Em muốn tách phần họ và tên, chức danh ra 1 cột riêng nhau
Tên

=LEFT(B3,FIND("Chức vụ",B3)-2)
Chức vụ

=MID(B3,FIND("Chức vụ",B3)+9,FIND("Công ty",B3)-FIND("Chức vụ",B3)-11)

nguyenhungtt6
22-06-11, 10:14 AM
có cách nào tách riêng Họ-------chữ lót--------tên không pác.., em đang cần gấp lắm...pác pro giúp giùm em với...thanh pác trước ha

bebo021999
22-06-11, 10:28 AM
có cách nào tách riêng Họ-------chữ lót--------tên không pác.., em đang cần gấp lắm...pác pro giúp giùm em với...thanh pác trước ha
Giả sử ô A1 chứa họ và tên
ô B1: Họ:

=TRIM(LEFT(SUBSTITUTE($A$1," ",REPT(" ",255)),255))
ô D1: Tên

=TRIM(RIGHT(SUBSTITUTE($A$1," ",REPT(" ",255)),255))
ô C1: Lót

=SUBSTITUTE(SUBSTITUTE(A1,B1,""),D1,"")
Với mặc định chữ đầu tiên là họ; chữ cuối cùng là Tên; các chữ ở giữa là Lót

ndu96081631
22-06-11, 10:40 AM
Giả sử ô A1 chứa họ và tên
ô B1: Họ:

=TRIM(LEFT(SUBSTITUTE($A$1," ",REPT(" ",255)),255))
ô D1: Tên

=TRIM(RIGHT(SUBSTITUTE($A$1," ",REPT(" ",255)),255))
ô C1: Lót

=SUBSTITUTE(SUBSTITUTE(A1,B1,""),D1,"")
Với mặc định chữ đầu tiên là họ; chữ cuối cùng là Tên; các chữ ở giữa là Lót
Công thức lấy CHỮ LÓT không đúng đâu nha ---> Xem lại

huuthang_bd
22-06-11, 10:45 AM
Giả sử ô A1 chứa họ và tên
ô C1: Lót

=SUBSTITUTE(SUBSTITUTE(A1,B1,""),D1,"")
Không nên dùng SUBSTITUTE(). Sẽ có một vài trường hợp cho kết quả sai.

bebo021999
22-06-11, 10:52 AM
Không nên dùng SUBSTITUTE(). Sẽ có một vài trường hợp cho kết quả sai.
Sư phụ NDu và huuthang chỉ giáo các trường hợp ERROR được không. Mình có add vài ví dụ trong file rồi, thấy OK.

ndu96081631
22-06-11, 10:54 AM
Sư phụ NDu và huuthang chỉ giáo các trường hợp ERROR được không. Mình có add vài ví dụ trong file rồi, thấy OK.
Thiếu gì tên! Nguyễn Thành hà, Lý Băng Băng... chẳng hạn

bebo021999
22-06-11, 10:56 AM
Không nên dùng SUBSTITUTE(). Sẽ có một vài trường hợp cho kết quả sai.
OK, thanks Huuthang,hiểu rồi. Một số trường hợp bị lỗi do Lót trùng với Tên hoặc trùng với Họ.ví dụ: Trần Thị Vân Vân; Nguyễn Văn Nguyễn ...

huuthang_bd
22-06-11, 11:05 AM
OK, thanks Huuthang,hiểu rồi. Một số trường hợp bị lỗi do Lót trùng với Tên hoặc trùng với Họ.ví dụ: Trần Thị Vân Vân; Nguyễn Văn Nguyễn ...
Nguyễn Văn Nguyễn thì có vấn đề gì đâu?

zwinnerz
05-09-11, 03:54 PM
Sư phụ NDu và huuthang chỉ giáo các trường hợp ERROR được không. Mình có add vài ví dụ trong file rồi, thấy OK.

Mình thấy cách này đơn giản mà thông minh!

cobecan1201
17-09-11, 06:33 PM
Dùng VBA thì nhanh thật nhưng không thể filter bạn à.Mình mong các bạn chỉ mình khi có filter

lov excel
24-09-11, 03:30 PM
Chào bạn

Thí dụ ở ô A1 bạn có tên Trần Văn Xoài.

Tách họ trong ô B1 thì dung =LEFT(A1,FIND(" ",A1)-1)

Phần tên còn lại ghi qua C1 bằng phương thức =RIGHT(A1,LEN(A1)-LEN(B1)-1)

Mến
Tôi thấy cách của bạn digita là đơn giản và dễ hiểu nhất. Tuy nhiên, có lẽ bạn hơi nhầm chút xíu. Ở công thức hàm LEFT, chữ số cuối (start num) là 1; Ở công thức hàm RIGHT không có -1 ở cuối bởi bản thân phần họ tách được ở hàm LEFT đã cộng ký tự trống rồi (Ý bạn là độ dài tổng cộng-độ dài họ-ký tự trống sau họ).

leonguyenz
24-09-11, 03:44 PM
Tôi thấy cách của bạn digita là đơn giản và dễ hiểu nhất. Tuy nhiên, có lẽ bạn hơi nhầm chút xíu. Ở công thức hàm LEFT, chữ số cuối (start num) là 1; Ở công thức hàm RIGHT không có -1 ở cuối bởi bản thân phần họ tách được ở hàm LEFT đã cộng ký tự trống rồi (Ý bạn là độ dài tổng cộng-độ dài họ-ký tự trống sau họ).
A1: Trần Văn Xoài, B1: =LEFT(A1,FIND(" ",A1)-1) sẽ cho kết quả là "Trần", nếu không trừ 1 sẽ cho kết quả là "Trần ". công thức C1: =RIGHT(A1,LEN(A1)-LEN(B1)-1) sẽ cho kết quả là "Văn Xoài", nếu không có -1 sẽ cho kết quả là " Văn Xoài", vì LEN(B1) đã bỏ khoảng trắng. digita không nhầm đâu bạn ạ.

uronmapu
03-10-11, 08:38 PM
Làm thế nào để lấy được chữ lót hả bạn? (lấy chữ nằm giữa họ và tên)

Nguyễn Văn A --> Văn

Nguyễn Hoàng Thùy Linh --> Hoàng Thùy

Ba Tê
03-10-11, 08:59 PM
Làm thế nào để lấy được chữ lót hả bạn? (lấy chữ nằm giữa họ và tên)

Nguyễn Văn A --> Văn

Nguyễn Hoàng Thùy Linh --> Hoàng Thùy
Nếu A1 chứa họ tên, xài công thức này thử xem:

=TRIM(MID(LEFT(TRIM(A1);LEN(TRIM(A1))-LEN(TRIM(RIGHT(SUBSTITUTE(TRIM(A1);" ";REPT(" ";20));20))));FIND(" ";TRIM(A1))+1;100))

uronmapu
03-10-11, 09:04 PM
Ko được ban ơi :(
Ko được ban ơi :(

Ba Tê
03-10-11, 09:15 PM
Ko được ban ơi :(
Ko được ban ơi :(
Nếu A4 là "Nguyen hoang kim thuy linh" thì kết quả là "hoang"?

uronmapu
03-10-11, 09:19 PM
Mình muốn lấy Hoàng Kim Thùy

Đây rồi

=MID(TRIM(A1),FIND(" ",TRIM(A1)),FIND("-",SUBSTITUTE(TRIM(A1)," ","-",LEN(TRIM(A1))-LEN(SUBSTITUTE(TRIM(A1)," ",""))))-FIND(" ",TRIM(A1)))

Ba Tê
03-10-11, 09:30 PM
Mình muốn lấy Hoàng Kim Thùy

Đây rồi

=MID(TRIM(A1),FIND(" ",TRIM(A1)),FIND("-",SUBSTITUTE(TRIM(A1)," ","-",LEN(TRIM(A1))-LEN(SUBSTITUTE(TRIM(A1)," ",""))))-FIND(" ",TRIM(A1)))
Công thức đó còn dư 1 khoảng trắng.

Ko được ban ơi :(
Ko được ban ơi :(
Sao lại không được? Xem trong file nè.

uronmapu
03-10-11, 09:37 PM
Mình muốn tách lấy từ bên trái ngay sau dấu cách đầu tiên của chuỗi thì làm thế nào

Ví dụ

Nguyen Van A --> Nguyen

12 345 678 --> 12

1. 234 567 --> 1.

Cảm ơn

uronmapu
03-10-11, 09:41 PM
Cảm ơn bạn

Cho mình hỏi thêm với

Mình muốn tách lấy từ bên trái ngay sau dấu cách đầu tiên của chuỗi thì làm thế nào

Ví dụ

Nguyen Van A --> Nguyen

12 345 678 --> 12

1. 234 567 --> 1.

hoangminhtien
03-10-11, 09:49 PM
Giả sử bạn muốn tách ô A1. Bạn dùng công thức sau

=LEFT(A1,FIND(" ",A1)-1)

hoangminhtien
03-10-11, 09:52 PM
Bài này bạn vừa hỏi ở đây rồi mà.
http://www.giaiphapexcel.com/forum/showthread.php?55247-Tách-từ-bên-trái-trong-chuỗi-ký-tự

Ba Tê
03-10-11, 10:06 PM
Bài này bạn vừa hỏi ở đây rồi mà.
http://www.giaiphapexcel.com/forum/showthread.php?55247-Tách-từ-bên-trái-trong-chuỗi-ký-tự
Ông này hỏi chuyện tách tách này nhiều chỗ lắm:

http://www.giaiphapexcel.com/forum/showthread.php?55244-Lấy-từ-nằm-giữa-từ-đầu-và-từ-cuối-của-câu-trong-excel&p=347583#post347583

Bài này chen vào càng "trớt quớt"
http://www.giaiphapexcel.com/forum/showthread.php?50666-Tách-tên-khách-hàng-và-địa-chỉ&p=347586#post347586

NH_DK
04-10-11, 06:51 AM
Nhân việc bàn đến tách họ tên, em xin đưa ví dụ này lên đây nhờ mọi người giúp em viết 1 hàm tách đuôi mã hàng.
Câu hỏi cụ thể trong file (http://www.4shared.com/file/JULuAqu6/vdu.html) đính kèm.

concogia
04-10-11, 07:32 AM
Nhân việc bàn đến tách họ tên, em xin đưa ví dụ này lên đây nhờ mọi người giúp em viết 1 hàm tách đuôi mã hàng.
Câu hỏi cụ thể trong file (http://www.4shared.com/file/JULuAqu6/vdu.html) đính kèm.
Đúng cấu trúc như trong bài thì thử cái này xem nhé em trai

Public Function Ma(Cll As Range) As String
Ma = Left(Cll, InStrRev(Cll, "-") - 1)
End Function
Thân

ndu96081631
04-10-11, 08:31 AM
Đúng cấu trúc như trong bài thì thử cái này xem nhé em trai

Public Function Ma(Cll As Range) As String
Ma = Left(Cll, InStrRev(Cll, "-") - 1)
End Function
Thân
Code này phải "bo" lại chút:


Function Ma(ByVal Chuoi As String) As String
On Error Resume Next
Ma = Trim(Chuoi)
Ma = Trim(Left(Chuoi, InStrRev(Chuoi, "-") - 1))
End Function

concogia
04-10-11, 03:14 PM
Code này phải "bo" lại chút:


Function Ma(ByVal Chuoi As String) As String
On Error Resume Next
Ma = Trim(Chuoi)
Ma = Trim(Left(Chuoi, InStrRev(Chuoi, "-") - 1))
End Function

Hình như em này Ma = Trim(Chuoi) bị....dư hay sao í
Híc

ndu96081631
04-10-11, 04:06 PM
Hình như em này Ma = Trim(Chuoi) bị....dư hay sao í
Híc
Khi không tìm thấy dấu "-" thì code sẽ bị lỗi, khi ấy em thêm On Error Resume Next ở trên để "vượt" lỗi, đồng thời thêm Ma = Trim(Chuoi) để lấy nguyên chuổi
Tưc: không tìm thấy dấu "-" thì để nguyên chuổi

tieutinh2503
30-11-11, 04:03 PM
Dear all!

Đề tài này mình thấy các bạn đưa ra rất nhiều giải pháp để tách họ tên rất hay. Mình thì mình chỉ thích mấy cách dùng hàm LEFT và RIGHT.
Giả sử mình có chuỗi họ tên như sau:
Nguyễn Thị Minh Khai
Lê Văn Lương
Giải Phóng

mình muốn viết thành
KhaiTTM
LuongLV
PhongG

Trong excel có hàm nào giải quyết được việc này không nhỉ?
Các bạn có biết thì chia sẻ cho mình với nhé!

Cảm ơn các bạn!

phamduydn
30-11-11, 09:25 PM
Dear all!

Giả sử mình có chuỗi họ tên như sau:
Nguyễn Thị Minh Khai
Lê Văn Lương
Giải Phóng

mình muốn viết thành
KhaiTTM
LuongLV
PhongG



Thử cách này hơi dài dòng tí (củ chuối mà), mình làm công thức cho tên tối đa đến 5 từ (Vd: Lê Nguyễn Hoàng Văn Bách)
Nguyên tắc: tạo chuỗi mới bằng thay 1 " " bằng 100 " ". Rồi cắt khúc từng 100 ký tự trong chuỗi mới này để phân từng từ ra. Sau dùng TRIM để bỏ các ký tự " " vô nghĩa. File

Vd A7 chứa tên:

Đặt 2 name:


newtext=SUBSTITUTE(TRIM(Sheet1!$A7)," ",REPT(" ",100))
nospace=LEN(TRIM(Sheet1!$A7))-LEN(SUBSTITUTE(TRIM(Sheet1!$A7)," ",""))

Công thức tại B7:


=CONCATENATE(TRIM(RIGHT(newtext,100)),UPPER(LEFT(T RIM(A7),1)))&IF(Nospace=1,"",IF(Nospace=2,UPPER(LEFT(TRIM(MID(newtext,100,100) ),1)),IF(Nospace=3,UPPER(LEFT(TRIM(MID(newtext,100 ,100)),1))&UPPER(LEFT(TRIM(MID(newtext,200,100)),1)),IF(Nospa ce=4,UPPER(LEFT(TRIM(MID(newtext,100,100)),1))&UPPER(LEFT(TRIM(MID(newtext,200,100)),1))&UPPER(LEFT(TRIM(MID(newtext,300,100)),1))))))

Chắc chắn có các cách khác ngắn gọn hơn nhiều, ... chờ để học hỏi

Ba Tê
01-12-11, 11:55 AM
Dear all!

Đề tài này mình thấy các bạn đưa ra rất nhiều giải pháp để tách họ tên rất hay. Mình thì mình chỉ thích mấy cách dùng hàm LEFT và RIGHT.
Giả sử mình có chuỗi họ tên như sau:
Nguyễn Thị Minh Khai
Lê Văn Lương
Giải Phóng

mình muốn viết thành
KhaiTTM
LuongLV
PhongG

Trong excel có hàm nào giải quyết được việc này không nhỉ?
Các bạn có biết thì chia sẻ cho mình với nhé!

Cảm ơn các bạn!
Cái này dùng hàm tự tạo đi

tieutinh2503
01-12-11, 02:51 PM
Cách của bác phamduydn (http://www.giaiphapexcel.com/forum/member.php?66728-phamduydn) dài thật, nhưng mà bác viết được cả đoạn lệnh dài như thế cũng thật là pro đó.
Mình chưa thành thạo vba nên cách của bác Ba Tê (http://www.giaiphapexcel.com/forum/member.php?163936-Ba-Tê)mình chưa hiểu ngay được, sẽ ngẫm dần dần.

Thanks all!

congacon521
09-04-12, 10:53 AM
em xin phép đc góp thêm một công thức cùi về tách họ tên(tách họ, tên đệm, tên) với điều kiện là tên của người cần tách chỉ gồm 3 từ thôi ạ
giả sử có tên ở ô A2
Thì công thức để tách phần "họ" trong tên đấy đủ là =LEFT(A2,FIND(" ",A2)-1)
" tên đệm" =MID(A2,FIND(" ",A2)+1,FIND(" ",A2,FIND(" ",A2)+1)-FIND(" ",A2))
" tên" =RIGHT(A2,LEN(A2)-FIND(" ",A2,FIND(" ",A2)+1))

các anh chị xem hộ em công thức xem dùng có vấn đề gì thì góp ý giúp cho em hiện tại em dùng thì ko vấn đề gì với tên gồm 3 từ và hàm này dùng với tên đc cách nhau bởi các khoảng trắng " ".công thức chủ yếu dựa vào " " và phân định tên tên đệm họ là mỗi 1 từ là 1 chữ.

nkiet2005
02-05-12, 04:08 PM
A chị nào có thể giúp em hàm nào lọc ra tên. VD: Nguyễn văn an thì cho ra tên là an. Còn những tên khác cũng vậy.Em có kèm file nhờ a chị giúp! Thanks

vutienhp
02-05-12, 04:30 PM
Bạn xem đây có phải là ý của ban?
Xin mời xem file đính kèm.

quanghai1969
02-05-12, 04:52 PM
A chị nào có thể giúp em hàm nào lọc ra tên. VD: Nguyễn văn an thì cho ra tên là an. Còn những tên khác cũng vậy.Em có kèm file nhờ a chị giúp! Thanks

Dùng hàm đơn giản này nhé, tại ô B2 nhâp công thức này

=TRIM(RIGHT(SUBSTITUTE(A2," ",REPT(" ",10)),10))

concogia
02-05-12, 04:58 PM
Dùng hàm đơn giản này nhé, tại ô B2 nhâp công thức này

=TRIM(RIGHT(SUBSTITUTE(A2," ",REPT(" ",10)),10))
Nếu tên hoàn toàn là của người Việt thì số 10 là Ok ( có thể thay bằng 7 là được rồi)
Nếu có tên người nước ngoài vào danh sách ( hoặc danh sách là tên người nước ngoài ) thì số 10 chưa chắc thỏa, chắc cú phải thay số 10 bằng LEN(A20)
Thân

nkiet2005
03-05-12, 03:53 PM
Thank các anh! Cho em hỏi thêm là nếu bây giờ minh muốn lọc Tên theo thứ tự chữ cái từ A->Z trong cột A thì có thể làm được không? E dùng cách data filter thi không sắp theo tên được mà nó sắp theo họ thui? A chị nào biết chỉ dùm em!

thang314
04-05-12, 09:35 AM
Thank các anh! Cho em hỏi thêm là nếu bây giờ minh muốn lọc Tên theo thứ tự chữ cái từ A->Z trong cột A thì có thể làm được không? E dùng cách data filter thi không sắp theo tên được mà nó sắp theo họ thui? A chị nào biết chỉ dùm em!
lọc một cột theo tên, dùng sort ascending hoặc sort descending để sắp xếp lại.

nkiet2005
04-05-12, 10:01 AM
lọc một cột theo tên, dùng sort ascending hoặc sort descending để sắp xếp lại.

Cái đó nó chỉ lọc được chữ cái đầu thui. Ý mình là VD: trong một cột có: Nguyễn văn a, phan văn d, trần văn c. Thì làm cách nào để cho những tên đó sắp xếp theo thứ tự Tên chữ cái chứ không phải sắp theo Họ!

Ba Tê
04-05-12, 10:20 AM
Cái đó nó chỉ lọc được chữ cái đầu thui. Ý mình là VD: trong một cột có: Nguyễn văn a, phan văn d, trần văn c. Thì làm cách nào để cho những tên đó sắp xếp theo thứ tự Tên chữ cái chứ không phải sắp theo Họ!
1 là bạn tách thêm 1 cột Họ Lót, 1 cột Tên, Rồi Sort theo thừ tự Tên - Họ Lót.
2 là bạn tham khảo các bài viết về Sort tiếng Việt trên GPE, đây là 1 Topic có liên quan nè:
http://www.giaiphapexcel.com/forum/showthread.php?3750-S%E1%BA%AFp-x%E1%BA%BFp-t%C3%AAn-t%E1%BB%B1-%C4%91%E1%BB%99ng-t%E1%BB%AB-A-Z&p=25891#post25891

thang314
12-05-12, 11:40 AM
Cái đó nó chỉ lọc được chữ cái đầu thui. Ý mình là VD: trong một cột có: Nguyễn văn a, phan văn d, trần văn c. Thì làm cách nào để cho những tên đó sắp xếp theo thứ tự Tên chữ cái chứ không phải sắp theo Họ!

lọc tên ra một cột msororso sort lại cột tên là được chứ.

minhhangg
30-05-12, 10:01 AM
Anh chị giúp dùm em, em có 1 danh sách với họ và tên tách dùm em chỉ lấy họ tên vào 1 cột khác.
VD: Nguyễn Thị Thanh Như tách ra thành Nguyễn Như thôi.

nghiaphuc
30-05-12, 10:08 AM
Anh chị giúp dùm em, em có 1 danh sách với họ và tên tách dùm em chỉ lấy họ tên vào 1 cột khác.
VD: Nguyễn Thị Thanh Như tách ra thành Nguyễn Như thôi.
Tách riêng họ:

=LEFT(B6,FIND(" ",B6))
Tách riêng tên:

=TRIM(RIGHT(SUBSTITUTE(B6," ",REPT(" ",255)),LEN(B6)))
=> Tách họ tên:

=LEFT(B6,FIND(" ",B6))&TRIM(RIGHT(SUBSTITUTE(B6," ",REPT(" ",255)),LEN(B6)))
Điều kiện là họ và tên phải từ 2 âm tiết trở lên (có ít nhất 1 khoảng trắng giữa).

xuan.nguyen82
30-05-12, 10:10 AM
Bạn dùng cái này nhé:

=TRIM(LEFT(SUBSTITUTE(B6," ",REPT(" ",255)),255))&" "&TRIM(RIGHT(SUBSTITUTE(B6," ",REPT(" ",255)),255))
Copy xuống cho các dòng khác

minhhangg
30-05-12, 10:23 AM
Tách riêng họ:

=LEFT(B6,FIND(" ",B6))
Tách riêng tên:

=TRIM(RIGHT(SUBSTITUTE(B6," ",REPT(" ",255)),LEN(B6)))
=> Tách họ tên:

=LEFT(B6,FIND(" ",B6))&TRIM(RIGHT(SUBSTITUTE(B6," ",REPT(" ",255)),LEN(B6)))
Điều kiện là họ và tên phải từ 2 âm tiết trở lên (có ít nhất 1 khoảng trắng giữa).

Cảm ơn anh và chị xuan.nguyen82 nhiều.

trannhudit
14-07-12, 11:44 AM
Cho tôi hỏi. Nếu có những sinh viên TÊN khai sinh là: Hà Anh và sinh viên tên là: Phương Anh còn HỌ ĐÊM là Đào Nguyễn Thị và cuối cùng tên ghi đầy đủ là:
Đào Nguyễn Thị Hà Anh hoặc Đào Nguyễn Thị Phương Anh

Ở đây ý nói không phải lúc nào tên cũng 1 "từ đơn" mà hiện tượng bây giờ rất nhiều gia đình đặt tên con là "từ ghép". Liệu có dùng hàm nào để tách không để các cháu không bị gọi nhầm và mất tên khi làm các thủ tục kê khai giấy tờ. Vì xưa nay đến giờ tên thường là danh "từ đơn" nếu tách như các hàm trên vô tình đã làm cho 2 đữa con trong 1 gia đình bị cùng tên đều là "ANH". Đây mới là vấn đề cần giải quyết.

hoamattroicoi
14-07-12, 12:14 PM
Cho tôi hỏi. Nếu có những sinh viên TÊN khai sinh là: Hà Anh và sinh viên tên là: Phương Anh còn HỌ ĐÊM là Đào Nguyễn Thị và cuối cùng tên ghi đầy đủ là:
Đào Nguyễn Thị Hà Anh hoặc Đào Nguyễn Thị Phương Anh

Ở đây ý nói không phải lúc nào tên cũng 1 "từ đơn" mà hiện tượng bây giờ rất nhiều gia đình đặt tên con là "từ ghép". Liệu có dùng hàm nào để tách không để các cháu không bị gọi nhầm và mất tên khi làm các thủ tục kê khai giấy tờ. Vì xưa nay đến giờ tên thường là danh "từ đơn" nếu tách như các hàm trên vô tình đã làm cho 2 đữa con trong 1 gia đình bị cùng tên đều là "ANH". Đây mới là vấn đề cần giải quyết.
Thực tế phong phú hơn những ví dụ mà các anh chị đưa lên đây nhiều bạn ạ, tùy trường hợp mà ứng dụng cho minh hoạt thôi. Ví dụ một nhà có 2 con tên thế này : Bùi Thị Kim Chi Ngọc Diệp và Bùi Thị Kim Thanh Ngọc Diệp thì lại phải tách đến 4 từ cuối để khỏi nhầm . Bây giờ các phụ huynh đặt tên con mỹ miều lắm. Rất khó để lường hết các tình huống trong thực tế, tùy tình huống để xử lý sao cho phù hợp với cái mình cần bạn ạ không phải làm một cách máy móc!!!

0167767
14-07-12, 12:20 PM
Cho tôi hỏi. Nếu có những sinh viên TÊN khai sinh là: Hà Anh và sinh viên tên là: Phương Anh còn HỌ ĐÊM là Đào Nguyễn Thị và cuối cùng tên ghi đầy đủ là:
Đào Nguyễn Thị Hà Anh hoặc Đào Nguyễn Thị Phương Anh

Ở đây ý nói không phải lúc nào tên cũng 1 "từ đơn" mà hiện tượng bây giờ rất nhiều gia đình đặt tên con là "từ ghép". Liệu có dùng hàm nào để tách không để các cháu không bị gọi nhầm và mất tên khi làm các thủ tục kê khai giấy tờ. Vì xưa nay đến giờ tên thường là danh "từ đơn" nếu tách như các hàm trên vô tình đã làm cho 2 đữa con trong 1 gia đình bị cùng tên đều là "ANH". Đây mới là vấn đề cần giải quyết.

Nếu vậy bạn đặt cho 1 cái tên là có 1 mã số, thế là hết nhằm liền.
VD: Đào Nguyễn Thị Hà Anh 000000001
Đào Nguyễn Thị Phương Anh 000000002

ndu96081631
14-07-12, 12:20 PM
Thực tế phong phú hơn những ví dụ mà các anh chị đưa lên đây nhiều bạn ạ, tùy trường hợp mà ứng dụng cho minh hoạt thôi. Ví dụ một nhà có 2 con tên thế này : Bùi Thị Kim Chi Ngọc Diệp và Bùi Thị Kim Thanh Ngọc Diệp thì lại phải tách đến 4 từ cuối để khỏi nhầm . Bây giờ các phụ huynh đặt tên con mỹ miều lắm. Rất khó để lường hết các tình huống trong thực tế, tùy tình huống để xử lý sao cho phù hợp với cái mình cần bạn ạ không phải làm một cách máy móc!!!
Cũng may là còn có.. số CMND, Mã SV, Mã CN... vân vân.. nói chung là các ID để nhân biết người này khác với người kia. Còn cái tên, cùng lắm chỉ để gọi và nó chẳng có ý nghĩa gì đối với CSDL cả vì cũng chẳng ai dại dột đi lấy tên làm khóa chính để tra cứu thông tin

tungnguyenxuan
27-07-12, 05:40 PM
trên thực tế thường thì mọi người thường chỉ tách tên ra 1 cột, họ + tên lót ra 1 cột để tiện sắp xếp.
trong đó khó nhất là tách tên riêng, còn họ + tên lót thì đơn giản.
Cách của mình khá đơn giản, và chỉ áp dụng cho người việt với chữ nhiều ký tự nhất là "nghiêng" 7 ký tự. vì thế mình sẽ thêm vào các khoảng trắng 7 khoảng trắng trở lên, rồi cắt từ bên phải ra 8 ký tự.
hàm của mình là
ten =TRIM(RIGHT(SUBSTITUTE(A1," "," "),8))
nếu ai cẩn thận muốn ký tự đầu tiên viết hoa, và phòng ngừa khi nhập họ tên ở ô A1 thừa khoảng trắng ở đằng sau tên thì sử dụng hàm sau
tên =TRIM(RIGHT(SUBSTITUTE(PROPER(TRIM(A1))," "," "),8)).

minh_duc_178
20-08-12, 10:07 PM
Mình muốn nhờ các bạn giúp mình tí!
Mình kiếm trên diễn đàn thì có bạn ghi công thức tách Họ và tên lót đi chung, còn tên đi riêng.
Ví dụ: Nguyễn Văn Nhân thì tách ra thành "Nguyễn Văn" và "Nhân"
(Tại hàng A9)
Lấy họ và tên lót:=LEFT(A9;FIND("*";SUBSTITUTE(A9;" ";"*";LEN(A9)-LEN(SUBSTITUTE(A9;" ";""))))-1)
Lấy tên: =RIGHT(A9;LEN(A9)-FIND("*";SUBSTITUTE(A9;" ";"*";LEN(A9)-LEN(SUBSTITUTE(A9;" ";"")))))

Mình muốn các bạn sửa lại giùm mình thành Họ đi riêng; Tên lót và tên thật đi chung. Ví dụ tên: Nguyễn Văn Nhân mà mình muốn tách ra "Nguyễn" và "Văn Nhân" thì làm thế nào?

hoangvuluan
20-08-12, 10:42 PM
Tách Họ+Lót với Tên mới khó, chứ tách Họ, Lót+Tên thì dễ hơn:
=LEFT(A4, FIND(" ", A4)-1)

=RIGHT(A4, LEN(A4)-FIND(" ", A4))

Ba Tê
20-08-12, 10:48 PM
Mình muốn nhờ các bạn giúp mình tí!
Mình kiếm trên diễn đàn thì có bạn ghi công thức tách Họ và tên lót đi chung, còn tên đi riêng.
Ví dụ: Nguyễn Văn Nhân thì tách ra thành "Nguyễn Văn" và "Nhân"
(Tại hàng A9)
Lấy họ và tên lót:=LEFT(A9;FIND("*";SUBSTITUTE(A9;" ";"*";LEN(A9)-LEN(SUBSTITUTE(A9;" ";""))))-1)
Lấy tên: =RIGHT(A9;LEN(A9)-FIND("*";SUBSTITUTE(A9;" ";"*";LEN(A9)-LEN(SUBSTITUTE(A9;" ";"")))))

Mình muốn các bạn sửa lại giùm mình thành Họ đi riêng; Tên lót và tên thật đi chung. Ví dụ tên: Nguyễn Văn Nhân mà mình muốn tách ra "Nguyễn" và "Văn Nhân" thì làm thế nào?
Bạn xem bài này có giúp ích gì cho bạn không?
http://www.giaiphapexcel.com/forum/showthread.php?69676-Ch%E1%BB%8Dn-h%E1%BB%8D-t%C3%AAn-theo-c%E1%BB%99t&p=428320#post428320

TrungChinhs
20-08-12, 10:48 PM
Vì không thạo về VBA và cũng không thạo về hàm nên tôi dùng phương pháp "Đông - Tây Y" kết hợp như sau:

Bước 1: Copy toàn bộ cột A (cột họ tên) sang cột B

Bước 2: Tách họ bằng cách Replace dấu cách* thành không có gì (nhấn Ctrl + H trong Find what nhập dấu cách*; trong Replace with bỏ trống; nhấn Replace All)

Bước 3: Tách tên đệm và tên. Tại C4 nhập =TRIM(SUBSTITUTE(A4;B4;;1)) rồi Fill xuống

Bạn làm thử xem, đơn giản như đan giổ.

minh_duc_178
20-08-12, 10:55 PM
Cảm ơn mọi người nhé, mình làm được rồi. Với các bạn thì dễ thật chứ mình kém lắm nên làm mãi chẳng ra! ^_^

quanghai1969
20-08-12, 10:56 PM
Vì không thạo về VBA và cũng không thạo về hàm nên tôi dùng phương pháp "Đông - Tây Y" kết hợp như sau:

Bước 1: Copy toàn bộ cột A (cột họ tên) sang cột B

Bước 2: Tách họ bằng cách Replace dấu cách* thành không có gì (nhấn Ctrl + H trong Find what nhập dấu cách*; trong Replace with bỏ trống; nhấn Replace All)

Bước 3: Tách tên đệm và tên. Tại C4 nhập =TRIM(SUBSTITUTE(A4;B4;;1)) rồi Fill xuống

Bạn làm thử xem, đơn giản như đan giổ.

Món này độc thiệt. Mặc dù mình không áp dụng cho công việc nhưng phải công nhận quá hay!
Chiêu này sửa lại là * với dấu cách thì tách tên cần gì công thức nữa!!!

Và cũng từ chiêu này viết ra cái sub tách tên thiệt là gọn



Sub tach_ten()
[a:a].Copy [b:b]
[b:b].Replace "* ", ""
End Sub

Good-Luck
22-08-12, 10:50 AM
Mình muốn nhờ các bạn giúp mình tí!
Mình kiếm trên diễn đàn thì có bạn ghi công thức tách Họ và tên lót đi chung, còn tên đi riêng.
Ví dụ: Nguyễn Văn Nhân thì tách ra thành "Nguyễn Văn" và "Nhân"
(Tại hàng A9)
Lấy họ và tên lót:=LEFT(A9;FIND("*";SUBSTITUTE(A9;" ";"*";LEN(A9)-LEN(SUBSTITUTE(A9;" ";""))))-1)
Lấy tên: =RIGHT(A9;LEN(A9)-FIND("*";SUBSTITUTE(A9;" ";"*";LEN(A9)-LEN(SUBSTITUTE(A9;" ";"")))))

Mình muốn các bạn sửa lại giùm mình thành Họ đi riêng; Tên lót và tên thật đi chung. Ví dụ tên: Nguyễn Văn Nhân mà mình muốn tách ra "Nguyễn" và "Văn Nhân" thì làm thế nào?

Public Function Tach_Ten(hoten As String, YN As Boolean)
Dim a, b, c As Byte
a = Trim(hoten)
b = 0
For c = 0 To Len(a) Step 1
b = b + 1
If Mid(a, b, 1) = " " Then
Exit For
End If
Next
If YN = True Then
Tach_Ten = Left(a, b)
Else
Tach_Ten = Trim(Right(a, Len(a) - b))
End If
End Function


87704

ndu96081631
22-08-12, 11:02 AM
Public Function Tach_Ten(hoten As String, YN As Boolean)
Dim a, b, c As Byte
a = Trim(hoten)
b = 0
For c = 0 To Len(a) Step 1
b = b + 1
If Mid(a, b, 1) = " " Then
Exit For
End If
Next
If YN = True Then
Tach_Ten = Left(a, b)
Else
Tach_Ten = Trim(Right(a, Len(a) - b))
End If
End Function


87704
Code chưa bẫy lỗi nha! (chuổi rổng hoặc chuổi chỉ có 1 từ).
Ngoài ra đã là TÁCH TÊN thì phải có HỌ, TÊN, CHỮ LÓT... Vậy CHỮ LÓT của bạn đâu?

lymx1999
23-08-12, 08:54 AM
Mình hỏi ké một chút. Mình có chuỗi Brown Miller - Stolen Dreams mình muốn chuyển nó thành Miller Brown - Stolen Dreams thì làm sao? Mình đang add rules cho Winsome File Renamer 7 để đặt lại tên cho đám ebook nước ngoài của mình mà bị vướng cái này >< Cám ơn trước

hoangvuluan
23-08-12, 10:07 AM
Mình hỏi ké một chút. Mình có chuỗi Brown Miller - Stolen Dreams mình muốn chuyển nó thành Miller Brown - Stolen Dreams thì làm sao? Mình đang add rules cho Winsome File Renamer 7 để đặt lại tên cho đám ebook nước ngoài của mình mà bị vướng cái này >< Cám ơn trước
Vì không có dữ liệu nên không thể kiểm tra hết các tình huống, với mẫu ví dụ của bạn, có thể dùng tạm công thức sau:
=MID(A1, FIND(" ", A1)+1, FIND("-", A1)-FIND(" ", A1)-1) & LEFT(A1, FIND(" ", A1)-1) & " -" & REPLACE(A1, 1,FIND("-", A1),"")

NHẤT CHI MAI
23-08-12, 02:56 PM
Vì không thạo về VBA và cũng không thạo về hàm nên tôi dùng phương pháp "Đông - Tây Y" kết hợp như sau:

Bước 1: Copy toàn bộ cột A (cột họ tên) sang cột B

Bước 2: Tách họ bằng cách Replace dấu cách* thành không có gì (nhấn Ctrl + H trong Find what nhập dấu cách*; trong Replace with bỏ trống; nhấn Replace All)

Bước 3: Tách tên đệm và tên. Tại C4 nhập =TRIM(SUBSTITUTE(A4;B4;;1)) rồi Fill xuống

Bạn làm thử xem, đơn giản như đan giổ.

cái bước 3 của BÁC nên bỏ số 1.hihi
=TRIM(SUBSTITUTE(A4,B4, )) OK.

Good-Luck
24-08-12, 10:38 PM
Code chưa bẫy lỗi nha! (chuổi rổng hoặc chuổi chỉ có 1 từ).
Ngoài ra đã là TÁCH TÊN thì phải có HỌ, TÊN, CHỮ LÓT... Vậy CHỮ LÓT của bạn đâu?

If YN = True Then
Tach_Ten = Left(a, b) ' <họ>
Else
Tach_Ten = Trim(Right(a, Len(a) - b)) '<Tên và chữ lót>

tach_ten(hoten, 0 / 1) 0 thì lấy ho, 1 lấy tên

vulhu06
12-09-12, 09:45 AM
Lâu lắm rồi chưa ghé thăm diễn đàn, hôm nay có dịp thì lại có việc nhờ các anh chị rồi
Mong các anh chị cho dùm công thức tách tên tỉnh khỏi địa chỉ
Em lấy ví dụ nhé
1. Công an Đồng Nai
2. Thuận hoà, Long Khánh, Đồng Nai
3. Biên Hoà Đồng Nai
Em đưa ra 3 trường hợp cần lấy tên tỉnh là Đồng Nai
Xin cảm ơn anh chị

dinh lua
12-09-12, 10:01 AM
hiiiiiii bạn dùng công thức này đi :


=right(a1(len(a1)-trim(find("Đồng Lai",a1))+1)

là OK ngay đấy

vulhu06
12-09-12, 10:45 AM
hiiiiiii bạn dùng công thức này đi :


=right(a1(len(a1)-trim(find("Đồng Lai",a1))+1)

là OK ngay đấy

Hi, rất cảm ơn bạn đã trả lời bài viết của mình, nhưng mình thấy là chưa tổng quát. Vì nếu tên tỉnh khác Đồng Nai thì không lấy được. Trong lúc mình đợi kết quả trả lời thì mình đã tìm được lời giải rồi, xin cảm ơn
ct:=trim(right(substitute(a1," ",rept(" ",100),200)

Ba Tê
12-09-12, 11:10 AM
Hi, rất cảm ơn bạn đã trả lời bài viết của mình, nhưng mình thấy là chưa tổng quát. Vì nếu tên tỉnh khác Đồng Nai thì không lấy được. Trong lúc mình đợi kết quả trả lời thì mình đã tìm được lời giải rồi, xin cảm ơn
ct:=trim(right(substitute(a1," ",rept(" ",100),200)
Sao mà tổng quát được với Quận 2, TP.HCM v.v...

concogia
12-09-12, 11:18 AM
Hi, rất cảm ơn bạn đã trả lời bài viết của mình, nhưng mình thấy là chưa tổng quát. Vì nếu tên tỉnh khác Đồng Nai thì không lấy được. Trong lúc mình đợi kết quả trả lời thì mình đã tìm được lời giải rồi, xin cảm ơn
ct:=trim(right(substitute(a1," ",rept(" ",100),200)
Nếu dữ liệu là:
Công an TP Hồ Chí Minh
thì sao hả bạn ????
Thân
Híc, Ba Tê không có tiết hả ????

leonguyenz
12-09-12, 11:19 AM
Nếu dữ liệu là:
Công an TP Hồ Chí Minh
thì sao hả bạn ????
Thân
Híc

Với dữ liệu chủ thớt đưa ra, rồi đưa công thức luôn (=trim(right(substitute(a1," ",rept(" ",100),200) ) cũng có đúng đâu bác.