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

Liên hệ QC
các anh chị cho e xin đoạn code VBA viết ghép các ký tự lại như trong file e đưa lên nhé

cám ơn
Tặng bạn Function đơn giản này chép vào cửa số VBA

[GPECODE=vb]
Function GhepChuoi(ByVal Vung As Range, Optional DauNoi As String) As String
With WorksheetFunction
GhepChuoi = .Trim(Join(.Transpose(Vung.Value), DauNoi))
End With
End Function
[/GPECODE]

Công thức chỉ đúng với vùng dữ liệu là 1 cột nếu 2 cột sẽ bị sai hiện tại chỉ viết theo yêu cầu của bạn
Ví dụ:
=ghepchuoi(E5:E8,",")
Bạn post nhiều bài rồi nên chú ý đừng post không đúng chủ để
 
Tặng bạn Function đơn giản này chép vào cửa số VBA

[GPECODE=vb]
Function GhepChuoi(ByVal Vung As Range, Optional DauNoi As String) As String
With WorksheetFunction
GhepChuoi = .Trim(Join(.Transpose(Vung.Value), DauNoi))
End With
End Function
[/GPECODE]

Công thức chỉ đúng với vùng dữ liệu là 1 cột nếu 2 cột sẽ bị sai hiện tại chỉ viết theo yêu cầu của bạn
Ví dụ:
=ghepchuoi(E5:E8,",")
Bạn post nhiều bài rồi nên chú ý đừng post không đúng chủ để
minh biết lổi rui, cám ơn bạn đã nhac nhở, nhưng bạn ơi minh copy vao xong không dùng được bạn chỉ mình dùng thế nào với
 
Tranh thủ lúc hắn đang ngủ!

[thongbao]
nhưng bạn ơi minh copy vao xong không dùng được bạn chỉ mình dùng thế nào với [/thongbao]
 

File đính kèm

  • gpeUDF.rar
    9.9 KB · Đọc: 18
Topic "Tổng hợp các phương pháp tách họ và tên" (đăng ngày 3.5.14)

Phần II. Tách tên lót, có ghi công thức là:

Mã:
[COLOR=#000000][COLOR=#007700]{=[/COLOR][COLOR=#0000BB]MID[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]TRIM[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]A2[/COLOR][COLOR=#007700]),[/COLOR][COLOR=#0000BB]FIND[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]" "[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]TRIM[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]A2[/COLOR][COLOR=#007700]))+[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]MAX[/COLOR][COLOR=#007700](([/COLOR][COLOR=#0000BB]MID[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]TRIM[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]A2[/COLOR][COLOR=#007700]),[/COLOR][COLOR=#0000BB]ROW[/COLOR][COLOR=#007700]($[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]:$[/COLOR][COLOR=#0000BB]50[/COLOR][COLOR=#007700]),[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) =[/COLOR][COLOR=#DD0000]" "[/COLOR][COLOR=#007700])*[/COLOR][COLOR=#0000BB]ROW[/COLOR][COLOR=#007700]($[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]:$[/COLOR][COLOR=#0000BB]50[/COLOR][COLOR=#007700]))-[/COLOR][COLOR=#0000BB]FIND[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]" "[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]TRIM[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]A2[/COLOR][COLOR=#007700])))}[/COLOR][/COLOR]

anh xem lại công thức trên một tí nhé, hình như ta quên trừ đi 1 khoảng trắng dư thừa, Em xin fix lại như này:

Mã:
[COLOR=#000000][COLOR=#007700]{=[/COLOR][COLOR=#0000BB]MID[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]TRIM[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]A2[/COLOR][COLOR=#007700]),[/COLOR][COLOR=#0000BB]FIND[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]" "[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]TRIM[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]A2[/COLOR][COLOR=#007700]))+[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]MAX[/COLOR][COLOR=#007700](([/COLOR][COLOR=#0000BB]MID[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]TRIM[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]A2[/COLOR][COLOR=#007700]),[/COLOR][COLOR=#0000BB]ROW[/COLOR][COLOR=#007700]($[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]:$[/COLOR][COLOR=#0000BB]50[/COLOR][COLOR=#007700]),[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) =[/COLOR][COLOR=#DD0000]" "[/COLOR][COLOR=#007700])*[/COLOR][COLOR=#0000BB]ROW[/COLOR][COLOR=#007700]($[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]:$[/COLOR][COLOR=#0000BB]50[/COLOR][COLOR=#007700]))-[/COLOR][COLOR=#0000BB]FIND[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]" "[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]TRIM[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]A2[/COLOR][COLOR=#007700]))[/COLOR][/COLOR][COLOR=#ff0000][B]-1[/B][/COLOR][COLOR=#000000][COLOR=#007700])}[/COLOR][/COLOR]

Topic rất hay,
Thân ái !
 
Đúng như bạn nói họ lót bị dư 1 khoảng trắng, nhưng nếu mình -1 như công thức bạn đề nghị sẽ có trường hợp bị lỗi do không có họ lót (Trường hợp Họ và Tên có 2 chữ).

Nếu Họ và Tên chỉ có 1 chữ thì hàm cũng sẽ bị lỗi.

Xem thêm bài này về tách họ tên:
http://www.giaiphapexcel.com/forum/showthread.php?92281

TPhong
 
Đúng như bạn nói họ lót bị dư 1 khoảng trắng, nhưng nếu mình -1 như công thức bạn đề nghị sẽ có trường hợp bị lỗi do không có họ lót (Trường hợp Họ và Tên có 2 chữ).

Nếu Họ và Tên chỉ có 1 chữ thì hàm cũng sẽ bị lỗi.

Xem thêm bài này về tách họ tên:
http://www.giaiphapexcel.com/forum/showthread.php?92281

TPhong

Anh nói rất đúng, sẽ có trường hợp người dùng không có chữ lót sẽ gây ra lỗi,
Vậy ta ta phải thay công thức như thế này, giờ nó tạm thời sẽ trông như thế này:

Mã:
[COLOR=#000000][COLOR=#007700]{[/COLOR][/COLOR][COLOR=#000000][COLOR=#007700]=MID(TRIM(A2),FIND(" ",TRIM(A2))+1,IF([/COLOR][/COLOR][COLOR=#b22222]MAX((MID(TRIM(A2),ROW(1:50),1)=" ")*ROW(1:50))-FIND(" ",TRIM(A2))[/COLOR][COLOR=#ff0000]-1[/COLOR][COLOR=#000000][COLOR=#007700]<0,0, _
[/COLOR][/COLOR][COLOR=#b22222]MAX((MID(TRIM(A2),ROW(1:50),1)=" ")*ROW(1:50))-FIND(" ",TRIM(A2))[/COLOR][COLOR=#ff0000]-1[/COLOR][COLOR=#000000][COLOR=#007700]))}[/COLOR][/COLOR]

Công thức giờ cứ luxubu cả lên, nhìn không đẹp gì cả !!!
-> Nếu không cắt bỏ chuỗi dư thừa, sau này (nếu có) đếm số ký tự thì sẽ gặp rắc rối !
-> Nếu dùng IFERROR thì ta sẽ phiền phức trong tương lai khi kiểm tra lỗi
-> Nếu dùng ERROR.TYPE thì cũng phải lặp lại công thức như IF
... )):zz
 
Lần chỉnh sửa cuối:
{=RIGHT(C2;LEN(C2)-LARGE((MID(C2;ROW(INDIRECT("1:"&LEN(C2)));1)=" ")*ROW(INDIRECT("1:"&LEN(C2)));1))}

Ai test thử cái này xảy ra lỗi gì không?
 
{=RIGHT(C2;LEN(C2)-LARGE((MID(C2;ROW(INDIRECT("1:"&LEN(C2)));1)=" ")*ROW(INDIRECT("1:"&LEN(C2)));1))}

Ai test thử cái này xảy ra lỗi gì không?

Đã test: công thức mảng (Ctrl+Shift+Enter), nếu C2 không có gì thì xảy ra lỗi #REF, nếu có thì lấy chuỗi bên phải khoảng trắng, nếu chỉ có 1 chuỗi thì lấy chính nó. Nếu gõ công thức bình thường thì lấy nguyên chuỗi của C2. Không biết là còn lỗi gì nữa không.
 
Có một phương pháp khá đơn giản không cần VBA hoặc công thức quá phức tạp. Xin góp thêm để mọi người tham khảo.
Ví dụ ban đầu ta có Cột A chứa Họ và Tên. Cần tách Họ sang cột B và Tên sang cột C. Cách làm như sau:
1. Chép toàn bộ dữ liệu cột A sang cột C.
2. Sử dụng tìm và thay trong excel đối với cột C. Ở mục Find what nhập * và một khoảng trắng. Mục Replace with để trống. Chọn Replace All. Sau khi thay thế cột C giờ chỉ còn tên.
3. Lập công thức ở cột B như sau: =LEFT(A2,LEN(A2)-LEN(C2)).
Cuối cùng ta đã có hai cột B và C đã tách họ tên theo yêu cầu. Quá đơn giản phải không!
Chúc mọi người có một ngày vui.
 
Có một phương pháp khá đơn giản không cần VBA hoặc công thức quá phức tạp. Xin góp thêm để mọi người tham khảo.
Ví dụ ban đầu ta có Cột A chứa Họ và Tên. Cần tách Họ sang cột B và Tên sang cột C. Cách làm như sau:
1. Chép toàn bộ dữ liệu cột A sang cột C.
2. Sử dụng tìm và thay trong excel đối với cột C. Ở mục Find what nhập * và một khoảng trắng. Mục Replace with để trống. Chọn Replace All. Sau khi thay thế cột C giờ chỉ còn tên.
3. Lập công thức ở cột B như sau: =LEFT(A2,LEN(A2)-LEN(C2)).
Cuối cùng ta đã có hai cột B và C đã tách họ tên theo yêu cầu. Quá đơn giản phải không!
Chúc mọi người có một ngày vui.
không hiểu luật như thế nào mà Find what nhập * như vậy nó xóa hết họ và tên đệm hay quá ta, cho ta thêm 1 cách ưa thích nữa
 
Đơn giản là ta tìm text bất kỳ có ký tự trống đi kèm ngay sau nó, thay thế bằng "không ai cả". Riêng tên nằm cuối cùng không có ký tự trống đi kèm nên được giữ lại.
 
Cái này hay đó nha;
Nếu anh/chị nào nhập dư khoảng trống cuối của họ & tên cũng fải dè chừng!
 
Tách tên từ chuỗi họ tên

em có một cột chuỗi họ và tên, em đã chạy công thức tách tên từ chuỗi nhưng một vài dòng chạy còn lại thì không, những chuỗi không tách được tên em phai đánh thủ công vào thì công thức mới chạy được. anh (chị) cho em hỏi là vì sao vậy và mình làm cách nào để chạy ko bị lỗi.E cảm ơn
 

File đính kèm

  • tach ten 1.xlsx
    8.9 KB · Đọc: 18
em có một cột chuỗi họ và tên, em đã chạy công thức tách tên từ chuỗi nhưng một vài dòng chạy còn lại thì không, những chuỗi không tách được tên em phai đánh thủ công vào thì công thức mới chạy được. anh (chị) cho em hỏi là vì sao vậy và mình làm cách nào để chạy ko bị lỗi.E cảm ơn
Thực ra trên diễn đàn nói rất nhiều về vấn đề này rồi nên bạn có thể search để tìm giải pháp khác ngắn hơn.

Riêng cách của bạn hiện tại do chuỗi từ dòng số 2 có dấu cách trống ở phía cuối chuỗi nên khi bạn thay thế ký tự cách trống cuối cùng trong chuỗi bằng ký tự * để đánh dấu thì nó lại thay thế ký tự ở cuối chuỗi nên tham số thứ 2 của right() được chỉ định bị sai là đúng rồi. Muốn khắc phục thì bạn kẹp thêm hàm trim() vào chỗ nào có B3 là được.
 
Chào cả nhà.

Mình có 1 file cần mọingưiời chỉ giáo. File gồm 2 sheet
- Sheet MA: thể hiện tên nhân viên và mã tương ứng
- Sheet NV: tại đây mình muốn
Vì 1 nhân viên sẽ làm nhiều việc nên mình mã nhân viên đó và kèm theo số thứ tự đằng sau để tách từng công việc.
Ví dụ: Nguyen Van A mã là VA và công việc sẽ lần lượt là 01, 02, 03...
Mình muốn sau khi nhập mã VA01 cột A thì bên cột B sẽ hiện tên tương ứng.
Cảm ơn cả nhà%#^#$
 

File đính kèm

  • TEN-NV.xls
    13.5 KB · Đọc: 16
Lần chỉnh sửa cuối:
Bạn có thể hoán đổi dữ liệu giữa 2 cột & [C] ở trang 'Ma'; Sau đó tìm cách mà VLOOKUP() thôi.
 
Quả là giải pháp ex, đa dạng cách giải quyết vấn đề, và đây là một trong nnhững cách khá đơn giản giống như cách của bạn tenday(data to text). Hay
 
Mình muốn các bạn giúp mình tách: họ, tên đệm, tên ra mỗi chữ một ô. Mục đích để làm từ điển Việt - Hán.
Có thể sử dụng công thức hoặc macro.
Mình gửi kèm file ví dụ
 

File đính kèm

  • tach tu.xls
    28 KB · Đọc: 5
Web KT
Back
Top Bottom