PDA

View Full Version : Cách tách riêng Họ tên đệm & tên



lhuon42
01-01-09, 12:00 AM
Anh chị chỉ giúp e với làm sao để tách riêng
VD:thành Nguyến Thị Minh ở một cột và Thu ở một cột

hoangminhtien
01-01-09, 12:27 AM
Bạn xem ở đây (http://www.giaiphapexcel.com/forum/showthread.php?t=9384) nhé!

volga
01-01-09, 08:34 AM
Anh chị chỉ giúp e với làm sao để tách riêng
VD:thành Nguyến Thị Minh ở một cột và Thu ở một cột

Mình góp vui một cách học lóm đây
Bạn bôi chọn những tên bạn cần tách ra ( ở đây ví dụ là A1 đến A10)Bạn quét chọn A1 đến A10.vÀO Data / text to columns / Sau đó xuất hiện một bản gì đó +-+-+-+ .Bạn chọn Next / Chọn tiếp Space / Finish.
Bạn tìm hiểu thêm trong đó mình không biết hết +-+-+-+

ongtrungducmx25
01-01-09, 09:44 AM
Anh chị chỉ giúp e với làm sao để tách riêng
VD:thành Nguyến Thị Minh ở một cột và Thu ở một cột
sao cách làm ngày mình thấy ngược đời quá ah nhe! nếu tách thì chỉ tách riêng tên ra một cột thôi sao chữ Thị => Thu |||||+-+-+-+-\\/.

anhtuan1066
01-01-09, 10:11 AM
sao cách làm ngày mình thấy ngược đời quá ah nhe! nếu tách thì chỉ tách riêng tên ra một cột thôi sao chữ Thị => Thu |||||+-+-+-+-\\/.
Có gì đâu mà ngược đời!
Người ta tên là Nguyễn Thị Minh Thu ---> Tách ra thành Nguyễn Thị Minh 1 cột và Thu 1 cột
Ổn chứ

BNTT
01-01-09, 10:46 AM
Tui nhớ ở đâu đó trên GPE có công thức này:

Giả sử ô A1 chứa tên đầy đủ: Nguyễn Thị Minh Thu

Để tách phần tên ra (Thu), dùng công thức:

=TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",100)),100))
Phần còn lại của tên (Nguyễn Thị Minh), dùng công thức:

=TRIM(LEFT(A1, LEN(A1)-LEN(C1)-1))
Góp chút cho vui ngày đầu năm.

ndu96081631
01-01-09, 11:06 AM
Tui nhớ ở đâu đó trên GPE có công thức này:

Giả sử ô A1 chứa tên đầy đủ: Nguyễn Thị Minh Thu

Để tách phần tên ra (Thu), dùng công thức:
=TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",100)),100))Phần còn lại của tên (Nguyễn Thị Minh), dùng công thức:
=TRIM(LEFT(A1, LEN(A1)-LEN(C1)-1))Góp chút cho vui ngày đầu năm.
Công thức này:
=TRIM(LEFT(A1, LEN(A1)-LEN(C1)-1))
dùng để lấy phần HỌ và HỌ ĐỆM
Nếu như ta đã lấy được TÊN rồi thì sao không SUBSTITUTE tiếp tục, cho TÊN thành rổng là ra ngay ---> Gọn hơn nhiều

BNTT
01-01-09, 12:40 PM
Xin lỗi, bài trên tôi không ghi rõ C1 là cái gì. Xin nói lại:

Giả sử ô A1 chứa tên đầy đủ: Nguyễn Thị Minh Thu

Để tách phần tên ra (Thu), dùng công thức (tại C1)


[C1] =TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",100)),100))

Phần còn lại của tên (Nguyễn Thị Minh), dùng công thức (tại B1):


[B]=TRIM(LEFT(A1, LEN(A1)-LEN(C1)-1))

Có nghĩa là HỌ và TÊN LÓT (cột B) làm sau phần tách TÊN (cột C)

Theo đề nghị của Anh Tuấn, cũng có thể dùng công thức sau cho cột B, để lấy phần HỌ và TÊN LÓT sau khi đã tách TÊN (ở cột C):

[B]= TRIM(SUBSTITUTE(A1, C1, ""))
Sở dĩ tôi dùng hàm TRIM là để cắt luôn ký tự trắng cuối cùng trong chuỗi (nếu như còn sót)

TrungChinhs
01-01-09, 01:45 PM
Chủ đề này tuy không mới nhưng xem ra còn nhiều cách làm mới.
Mình xin bổ sung bài của Volga tại sheet ví dụ 1 và tham gia thêm 1 cách khác tại sheet ví dụ 2 trong File đính kèm.

Chúc các bạn năm mới vui vẻ !

volga
01-01-09, 04:17 PM
Chủ đề này tuy không mới nhưng xem ra còn nhiều cách làm mới.
Mình xin bổ sung bài của Volga tại sheet ví dụ 1 và tham gia thêm 1 cách khác tại sheet ví dụ 2 trong File đính kèm.

Chúc các bạn năm mới vui vẻ !


Bạn Trung Chinh có thể giới thiệu hết những chức năng trong đó cho mọi người tham khảo được không ?

cadafi
01-01-09, 06:58 PM
Chủ đề này tuy không mới nhưng xem ra còn nhiều cách làm mới.
Mình xin bổ sung bài của Volga tại sheet ví dụ 1 và tham gia thêm 1 cách khác tại sheet ví dụ 2 trong File đính kèm.

Chúc các bạn năm mới vui vẻ !

Cách tách tên ở ví dụ 1 của bạn chỉ áp dụng đúng khi cả danh sách họ tên phải có cùng số chữ, và phải cố định là 3 chữ!? Xem ra có vẻ vô lý nhỉ!? . Nếu danh sách ngẫu nhiên mà làm theo cách này thì không làm được. Tôi lấy ví dụ danh sách này nhé:
|Họ tên|Tên cần tách ra
1|TRẦN MINH|MINH
2|NGUYỄN THỊ NGỌC NỮ|NỮ
3|LÊ HỒNG LĨNH|LĨNH
4|CÔNG TẰNG TÔN NỮ TRÀ MI NHẬT NGUYỆT THẦN KIẾM|KIẾM
5|PHẠM NGUYỄN MINH CÔNG HẰNG|HẰNG
6|NGUYỄN THỊ MỸ NGHIÊNG|NGHIÊNG
7|LÝ RỰC|RỰC
8|.....
Tương tự, bạn hãy dùng cách thứ hai của bạn (ví dụ 2) để tách họ tên theo danh sách mình đưa cho bạn rồi xem thử bạn bị sai chỗ nào nhé!


Để có được tổng hợp các phương pháp tách tên (cả công thức và VBA), hãy xem theo link này, bài của hoangdanh282vn! Rất đầy đủ, không cần phải tìm thêm cách làm gì nữa!

http://www.giaiphapexcel.com/forum/showthread.php?p=64642

TrungChinhs
02-01-09, 01:51 PM
[quote=ca_dafi;126845]Cách tách tên ở ví dụ 1 của bạn chỉ áp dụng đúng khi cả danh sách họ tên phải có cùng số chữ, và phải cố định là 3 chữ!? Xem ra có vẻ vô lý nhỉ!? . Nếu danh sách ngẫu nhiên mà làm theo cách này thì không làm được. Tôi lấy ví dụ danh sách này nhé:
|Họ tên|Tên cần tách ra
1|TRẦN MINH|MINH
2|NGUYỄN THỊ NGỌC NỮ|NỮ
3|LÊ HỒNG LĨNH|LĨNH
4|CÔNG TẰNG TÔN NỮ TRÀ MI NHẬT NGUYỆT THẦN KIẾM|KIẾM
5|PHẠM NGUYỄN MINH CÔNG HẰNG|HẰNG
6|NGUYỄN THỊ MỸ NGHIÊNG|NGHIÊNG
7|LÝ RỰC|RỰC
8|.....
Tương tự, bạn hãy dùng cách thứ hai của bạn (ví dụ 2) để tách họ tên theo danh sách mình đưa cho bạn rồi xem thử bạn bị sai chỗ nào nhé!

Cảm ơn ca_dafi ! Đúng là không ổn, mình thiển cận quá không lường hết tình huống.

Nhưng bổ sung thêm công thức tìm dữ liệu cột cuối = LOOKUP(2;1/(1-ISBLANK($K9:$V9));$K9:$V9)) thì OK và mình cũng đã sửa lại sub theo kiểu VBD các bạn góp ý cho mình nhé.

Cảm ơn Bạn Ndu đã giúp công thức này.

@ Tất cả các bạn: Mình làm cho vui thôi, vì đối với mình đó cũng là một cách học tập, mong các bạn đừng trách vì làm mất thì giờ của bạn.

Thân!

ongtrungducmx25
02-01-09, 04:12 PM
[quote=ca_dafi;126845]Cách tách tên ở ví dụ 1 của bạn chỉ áp dụng đúng khi cả danh sách họ tên phải có cùng số chữ, và phải cố định là 3 chữ!? Xem ra có vẻ vô lý nhỉ!? . Nếu danh sách ngẫu nhiên mà làm theo cách này thì không làm được. Tôi lấy ví dụ danh sách này nhé:
|Họ tên|Tên cần tách ra
1|TRẦN MINH|MINH
2|NGUYỄN THỊ NGỌC NỮ|NỮ
3|LÊ HỒNG LĨNH|LĨNH
4|CÔNG TẰNG TÔN NỮ TRÀ MI NHẬT NGUYỆT THẦN KIẾM|KIẾM
5|PHẠM NGUYỄN MINH CÔNG HẰNG|HẰNG
6|NGUYỄN THỊ MỸ NGHIÊNG|NGHIÊNG
7|LÝ RỰC|RỰC
8|.....
Tương tự, bạn hãy dùng cách thứ hai của bạn (ví dụ 2) để tách họ tên theo danh sách mình đưa cho bạn rồi xem thử bạn bị sai chỗ nào nhé!

Cảm ơn ca_dafi ! Đúng là không ổn, mình thiển cận quá không lường hết tình huống.

Nhưng bổ sung thêm công thức tìm dữ liệu cột cuối = LOOKUP(2;1/(1-ISBLANK($K9:$V9));$K9:$V9)) thì OK và mình cũng đã sửa lại sub theo kiểu VBD các bạn góp ý cho mình nhé.

Cảm ơn Bạn Ndu đã giúp công thức này.

@ Tất cả các bạn: Mình làm cho vui thôi, vì đối với mình đó cũng là một cách học tập, mong các bạn đừng trách vì làm mất thì giờ của bạn.

Thân!

Tách tên này có tạo ra cột phụ không nhỉ! thường thì mình thấy tách tên bằng VBA thì hay tạo ra cột phụ lém.

TrungChinhs
02-01-09, 07:25 PM
Cảm ơn Bác HYen về câu lệnh tìm ô dữ liệu cuối dòng.
Từ gợi ý của Bác HYen Tôi vừa làm thêm sub tách tên bằng phương pháp kết hợp TextToColumns với công thức và VBA

Sub TachTen2()
Dim Rcuoi As Long
Rcuoi = [B65536].End(xlUp).Row
[C4:Z65500].Clear
Range("B4:B" & Rcuoi).Copy Destination:=[Z4]
[Z4].CurrentRegion.TextToColumns Destination:=Range("K4"), _
DataType:=xlDelimited, Space:=True, Other:=False, _
FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1))
For i = 4 To Rcuoi
If Cells(i, 2) > 0 Then
Cells(i, 4) = Cells(i, 25).End(xlToLeft)
Cells(i, 3).FormulaR1C1 = "=LEFT(RC2,LEN(RC2)-LEN(RC4))": Cells(i, 3).Value = Cells(i, 3)
End If
Next
[K:Z].Clear: [C3].Select
End Sub


tại dòng Cells(i, 3).... do không biết dùng hàm VBA nên tôi dùng tạm công thức kiểu này. Nhờ các bạn sửa giúp.

Xin cảm ơn !

phamduylong
02-01-09, 08:12 PM
Nếu dùng VBA, Trung Chinh dùng hàm InstrRev sẽ gọn hơn.
InstrRev tìm vị trí 1 chuỗi con trong chuỗi lớn từ phía bên phải chuỗi lớn. Nếu chuỗi con là dấu cách thì vị trí tìm thấy chính là vị trí giữa họ và tên.

Sub TachTen()
Dim Rcuoi As Long, i As Long, vitri As Long, hoten As String
Rcuoi = [B65536].End(xlUp).Row
[C4:D65500].Clear
For i = 4 To Rcuoi
hoten = Trim(Cells(i, 2))
vitri = InStrRev(hoten, " ")
If vitri > 0 Then
Cells(i, 4) = Mid(hoten, vitri + 1)
Cells(i, 3) = Trim(Left(hoten, vitri))
Else
Cells(i, 4) = hoten
End If
Next
End Sub
hoten = Trim(Cells(i, 2)) để loại các khoản trắng dư 2 đầu.

TrungChinhs
02-01-09, 08:44 PM
Loay hoay mấy ngày với TextToColumns và các cột phụ thế mà chỉ với một câu InstrRev của Bác PhamDuyLong ! bao công lao của mình đổ xuống sông xuống bể hết...
Nói đùa thôi, em rất vui vì qua bài này các bác đã giúp em nhiều điều bổ ích. Cảm ơn các Bác rất nhiều !

ndu96081631
02-01-09, 09:32 PM
Loay hoay mấy ngày với TextToColumns và các cột phụ thế mà chỉ với một câu InstrRev của Bác PhamDuyLong ! bao công lao của mình đổ xuống sông xuống bể hết...
Nói đùa thôi, em rất vui vì qua bài này các bác đã giúp em nhiều điều bổ ích. Cảm ơn các Bác rất nhiều !
Xin nói thêm: Việc tách họ tên không ai dùng Text to Columns để làm cả
Nếu là tôi thì tôi không dùng Text to Columns, và cũng không dùng InstrRev ---> Vì phải For mất công lắm
Tôi khoái nhất là dùng Replace thay mỗi khoãng trắng thành 255 khoảng trắng khác, sau đó RIGHT 1 nhất là ra TÊN ---> Khỏi PHO PHO gì ráo
Nhưng không sao cả... nghiên cứu vẫn có cái lợi riêng, cho dù việc bạn đã làm là hay hay dở (ích lợi lớn nhất là những gì bạn thu được)

Tran Mui
01-02-09, 05:06 PM
Bạn đang cần tách Họ đệm, tên như mong muốn
Trong diễn đàn có các cách giúp bạn, riêng mình đã sử dụng thành công công việc tách này,
bạn có thể tham khảo: cài đạt phần mền kèm theo ( dưới đây), xuất hiện tiện ích tiếng việt, bạn chỉ việc chọn công cụ bạn muốn
Chúc bạn thành công
Một người bạn EXCEl

Không hiểu sao mình không gửi được file đính kèm
Bạn có thể cho địa chỉ E_Mail mình chuyển trực tiếp nhé
Thành thật xin lỗi

Po_Pikachu
01-02-09, 05:15 PM
Vấn đề tách họ và tên thì có rất nhiều trên diễn đàn bạn chịu khó tìm thì sẽ thấy ngay.
http://www.giaiphapexcel.com/forum/showthread.php?t=18112
http://www.giaiphapexcel.com/forum/showthread.php?t=2367
Google (http://www.google.com.vn/custom?hl=vi&cof=&domains=www.giaiphapexcel.com&q=t%C3%A1ch+h%E1%BB%8D+t%C3%AAn&sitesearch=www.giaiphapexcel.com&meta=)

Gửi file đính kèm thì bạn nhấn vào nút "Đổi Sang Khung Lớn" -> kéo thanh trượt xuống -> Rồi nhấn vào nút "Tải File Từ Máy".
Thân.

duongthanh_nhh
07-02-09, 02:47 PM
cái topic này hay quá, mình học hỏi đc rất nhiều,cám ơn tất cả các bạn
nhưng mình muốn hỏi 1 vấn đề nữa: khi tách tên ra rùi mình muốn xếp tên đó theo thứ tự abc và phần họ cũng đi cùng tương ứng với tên thì làm thế nào ????????

cadafi
07-02-09, 02:49 PM
nhưng mình muốn hỏi 1 vấn đề nữa: khi tách tên ra rùi mình muốn xếp tên đó theo thứ tự abc và phần họ cũng đi cùng tương ứng với tên thì làm thế nào ????????
Trời! Thế khi bạn Sort dữ liệu bạn chỉ sort mỗi cột tên thôi sao! Phải chiếu sáng cả hai cột [Họ] và [Tên} rồi mới sort theo [Tên] chứ nhỉ!

duongthanh_nhh
07-02-09, 04:10 PM
bạn làm ơn chỉ cụ thể giúp mình đc ko ? thanks bạn nhiều

bactu
07-02-09, 04:16 PM
Bạn chọn hết tất cả vùng dữ liệu rồi chọn Data\Sort, chọn cột cần sort theo tăng dần hoặc giảm dần!

Chuot Xinh
03-08-10, 10:17 PM
e chưa hiểu. Trung Chinh chỉ bảo lại đi

TrungChinhs
04-08-10, 06:43 PM
e chưa hiểu. Trung Chinh chỉ bảo lại đi

Bạn chưa hiểu cái gì ? sao không gõ thêm vài từ nữa cho rõ. Nếu bạn muốn hỏi tôi về cách tách tên thì bạn tham khảo thêm 2 cách này

1.Tách ra 2 cột: Họ và đệm, tên

Sub TachChuoi_Cuoi()
Application.Calculation = 2
Application.ScreenUpdating = 0
On Error Resume Next
For Each cls In [b5:b50000].SpecialCells(2)
tmp = Split(cls, " ")
cls.Replace " " & tmp(UBound(tmp)), " " & tmp(UBound(tmp))
tmp2 = Split(cls, " ")
For i = 1 To UBound(tmp2) + 1
cls(1, i).Offset(, 1) = tmp2(i - 1)
Next
Next
Cells.Replace " ", " "
End Sub

2. Tách họ, tên, đệm ra từng cột

Sub TachChuoi()
Application.Calculation = 2
Application.ScreenUpdating = 0
On Error Resume Next
For Each cls In [b5:b50000].SpecialCells(2)
tmp = Split(cls, " ")
For i = 1 To UBound(tmp) + 1
cls(1, i).Offset(, 5) = tmp(i - 1)
Next
Next
End Sub

Tran Mui
04-08-10, 09:07 PM
Chủ đề này đã có nhiều, tôi thường dùng tiện ích của Thầy Phạm Văn Trung
trong đó có cả tách và gộp, ngoài ra còn nhiều tiện ích khác bạn lấy về dùng nhé