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

Liên hệ QC
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ụ
Cách NGON BỔ RẺ nhất là dùng Text to columns. Bạn thử đi.
 
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ụ
Công thức tại C4, kéo sang phải và kéo xuống.
Mã:
=TRIM(MID(SUBSTITUTE($A4," ",REPT(" ",255)),255*COLUMN(A$1)-254,255))
 

File đính kèm

  • tach tu.xls
    30.5 KB · Đọc: 18
Cái này mình không hiểu
Bạn có thấy Data/Text to columns không?
Chọn dữ liệu rồi làm như trên, sau đó có vài bước nữa bằng tiếng Anh (chắc bạn dịch được, đơn giản thôi mà).
Cách này dùng được cho các phiên bản excel + dữ liệu vài chục đến hàng trăm Text mà không phải copy công thức.
 
Cảm ơn bạn vậy là đúng yêu cầu của mình rồi, có điều mình chưa hiểu cơ chế tách từ của nó.
Không biết có ai giải thích công thức này hay chưa, sẵn tiện tôi giải thích một chút theo khả năng hiểu biết của mình.
Hàm TRIM để cắt khoảng trắng thừa.
Hàm MID để tách chuỗi con trong chuỗi lớn.
Hàm SUBSTITUTE để thay thế một chuỗi ký tự nào đó cho một chuỗi ký tự có trong chuỗi.
Hàm REPT để lặp lại chuỗi ký tự với số lần nhất định.
Hàm COLUMN để lấy số cột.
Mục đích tách chuỗi theo các khoảng trắng (" "), hàm SUBSTITUTE và hàm REPT biến chuỗi "a b" thành "a " và n khoảng trắng và "b", hàm MID sẽ lấy "vừa đủ" ký tự "a" và số khoảng trắng nhất định nào đó, miễn là chưa tới "b", hàm TRIM có nhiệm vụ gọt bỏ khoảng trắng, kết quả còn lại "a". Tiếp tục, hàm COLUMN nhân với số lần tăng lên khoảng trắng khi kéo qua cột mới sẽ tăng lên một đơn vị (vị trí bắt đầu trích ký tự của hàm MID), hàm MID sẽ bắt đầu trích ở một vị trí nào đó trước "b" một ký tự và lấy n khoảng trắng phía sau, và hàm TRIM làm nhiệm vụ còn lại, gọt bỏ khoảng trắng, chỉ còn "b", ... tương tự như thế.
Tôi diễn giải như một người đang học để các bạn mới tiếp cận có thể hiểu.
 
Bạn có thấy Data/Text to columns không?
Chọn dữ liệu rồi làm như trên, sau đó có vài bước nữa bằng tiếng Anh (chắc bạn dịch được, đơn giản thôi mà).
Cách này dùng được cho các phiên bản excel + dữ liệu vài chục đến hàng trăm Text mà không phải copy công thức.
Ờ, mình hiểu rồi, nhưng mình không dùng cách này. Sử dụng công thức nó tự động hơn.
 
Ờ, mình hiểu rồi, nhưng mình không dùng cách này. Sử dụng công thức nó tự động hơn.
Bạn tự tay thử tách text ra được rồi chứ?
Cách này có thể thay cho rất nhiều các công thức khác nhau do có nhiều lựa chọn để phân tách trong Delimiters là : Tab, Semiconlon, Comma, Space, Other...
 
Không biết có ai giải thích công thức này hay chưa, sẵn tiện tôi giải thích một chút theo khả năng hiểu biết của mình.
Hàm TRIM để cắt khoảng trắng thừa.
Hàm MID để tách chuỗi con trong chuỗi lớn.
Hàm SUBSTITUTE để thay thế một chuỗi ký tự nào đó cho một chuỗi ký tự có trong chuỗi.
Hàm REPT để lặp lại chuỗi ký tự với số lần nhất định.
Hàm COLUMN để lấy số cột.
Mục đích tách chuỗi theo các khoảng trắng (" "), hàm SUBSTITUTE và hàm REPT biến chuỗi "a b" thành "a " và n khoảng trắng và "b", hàm MID sẽ lấy "vừa đủ" ký tự "a" và số khoảng trắng nhất định nào đó, miễn là chưa tới "b", hàm TRIM có nhiệm vụ gọt bỏ khoảng trắng, kết quả còn lại "a". Tiếp tục, hàm COLUMN nhân với số lần tăng lên khoảng trắng khi kéo qua cột mới sẽ tăng lên một đơn vị (vị trí bắt đầu trích ký tự của hàm MID), hàm MID sẽ bắt đầu trích ở một vị trí nào đó trước "b" một ký tự và lấy n khoảng trắng phía sau, và hàm TRIM làm nhiệm vụ còn lại, gọt bỏ khoảng trắng, chỉ còn "b", ... tương tự như thế.
Tôi diễn giải như một người đang học để các bạn mới tiếp cận có thể hiểu.
Cũng hơi khó hiểu. Con số 255 trong công thức của bạn có phải là số lớn nhất có thể không.
Bây giờ nếu mình chèn thêm cột giữa phần tên và phần tách từ thì kết quả thì nó bị sai đi
 
Cũng hơi khó hiểu. Con số 255 trong công thức của bạn có phải là số lớn nhất có thể không.
Bây giờ nếu mình chèn thêm cột giữa phần tên và phần tách từ thì kết quả thì nó bị sai đi
Bạn chú ý hàm COLUMN, khi chèn cột hàm COLUMN sẽ nhảy thêm một số, bỏ hàm COLUMN ra và thay vào số, 1, 2, 3, 4, 5 cho 5 ô chứa công thức.
Số 255 là số ký tự có thể chứa trong một ô đối với Excel 2003, số này có thể tăng lên nếu dùng Excel 2007 trở lên (tránh lỗi vượt quá số ký tự cho phép), có thể giảm xuống miễn là đừng nhỏ quá, để hàm MID chỉ cắt ở giữa khoảng trắng được chèn vào.
 
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.
Mã:
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.



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--
Chỉ có tách họ và tên thành họ lót và tên thôi mà phải xây dựng nguyên cả hàm vậy sao?
Mình chỉ cần dùng hàm SUBSTITUTE La duoc roi: ví dụ ô A1 có chứa họ và tên thì dùng hàm SUBSTITUTE để chèn thêm nhiều khoảng trắng vào chỗ có khoảng trắng sẵn trong họ và tên (VD: Nguyễn Văn Thanh chèn thêm vô thành Nguyễn_____________Văn____________Thanh) lúc này dùng hàm Right lấy bên phải 20 kí tự (phòng cho dư các tên dài luôn), rồi tiếp tục dùng hàm TRIM để cắt bỏ khoảng trắng dư thì ta được tên rồi, còn họ lót thì dùng LEFT lấy ra
Vậy chỉ cần gõ vào C1(cột tên)
=TRIM(RIGHT(SUBSTITUE(A1," "," "),20)
là lấy được tên Thanh
Còn Nguyễn Văn (họ lót) thì dùng công thức
=TRIM(LEFT(A1,LEN(A1)-LEN(C1)))
Thế là xong rồi!
Đơn giãn còn phức tạp hơn nhưng không sợ tên dài cỡ nào đi nữa thì dùng
=TRIM(RIGHT(SUBSTITUTE(TRIM(A1)," ",REPT(" ",LEN(A1))),LEN(A1)))
để lấy tên Thanh}}}}}}}}}}-\\/.-\\/.-\\/.
 
Lần chỉnh sửa cuối:
Chỉ có tách họ và tên thành họ lót và tên thôi mà phải xây dựng nguyên cả hàm vậy sao?
Mình chỉ cần dùng hàm SUBSTITUTE La duoc roi: ví dụ ô A1 có chứa họ và tên thì dùng hàm SUBSTITUTE để chèn thêm nhiều khoảng trắng vào chỗ có khoảng trắng sẵn trong họ và tên (VD: Nguyễn Văn Thanh chèn thêm vô thành Nguyễn_____________Văn____________Thanh) lúc này dùng hàm Right lấy bên phải 20 kí tự (phòng cho dư các tên dài luôn), rồi tiếp tục dùng hàm TRIM để cắt bỏ khoảng trắng dư thì ta được tên rồi, còn họ lót thì dùng LEFT lấy ra
Vậy chỉ cần gõ vào C1(cột tên)
=TRIM(RIGHT(SUBSTITUE(A1," "," "),20)
là lấy được tên Thanh
Còn Nguyễn Văn (họ lót) thì dùng công thức
=TRIM(LEFT(A1,LEN(A1)-LEN(C1)))
Thế là xong rồi!
Đơn giãn còn phức tạp hơn nhưng không sợ tên dài cỡ nào đi nữa thì dùng
=TRIM(RIGHT(SUBSTITUTE(TRIM(A1)," ",REPT(" ",LEN(A1))),LEN(A1)))
để lấy tên Thanh}}}}}}}}}}-\\/.-\\/.-\\/.
ss111111111cccccccccccccccccccccccccccccccccccccccccc111111
 
Không biết có ai giải thích công thức này hay chưa, sẵn tiện tôi giải thích một chút theo khả năng hiểu biết của mình.
Hàm TRIM để cắt khoảng trắng thừa.
Hàm MID để tách chuỗi con trong chuỗi lớn.
Hàm SUBSTITUTE để thay thế một chuỗi ký tự nào đó cho một chuỗi ký tự có trong chuỗi.
Hàm REPT để lặp lại chuỗi ký tự với số lần nhất định.
Hàm COLUMN để lấy số cột.
Mục đích tách chuỗi theo các khoảng trắng (" "), hàm SUBSTITUTE và hàm REPT biến chuỗi "a b" thành "a " và n khoảng trắng và "b", hàm MID sẽ lấy "vừa đủ" ký tự "a" và số khoảng trắng nhất định nào đó, miễn là chưa tới "b", hàm TRIM có nhiệm vụ gọt bỏ khoảng trắng, kết quả còn lại "a". Tiếp tục, hàm COLUMN nhân với số lần tăng lên khoảng trắng khi kéo qua cột mới sẽ tăng lên một đơn vị (vị trí bắt đầu trích ký tự của hàm MID), hàm MID sẽ bắt đầu trích ở một vị trí nào đó trước "b" một ký tự và lấy n khoảng trắng phía sau, và hàm TRIM làm nhiệm vụ còn lại, gọt bỏ khoảng trắng, chỉ còn "b", ... tương tự như thế.
Tôi diễn giải như một người đang học để các bạn mới tiếp cận có thể hiểu.
Mình cảm ơn bạn!
Đa số mình đều thấy các bạn giải thích công thức kiểu này. Nhưng mình nghĩ giải thích kiểu này chỉ dễ hiểu vs những người có nghề thôi.
Còn vs bọn mình trước khi làm đã tìm hiểu các hàm rồi, bọn mình cần giải thích cách làm ấy. Giải thích như bạn @hoankhai198 đã giải thích đấy bạn. Rất dễ hiểu. Đấy là giải thích tại sao lại làm thế. Mà thể hiện sự rất bài bản luôn.
 
Xin chào các anh chị! e dang muốn tìm công thức để tách chuổi số liệu trong bảng như sau:
Từ: Thành: ô1 ô2 ô3 ô4
(197)121415 197 121415
(168)121415-(77)121615 168 121415 77 121615
(154)011316-(105)012016 154 011316 105 012016
(38)121615-(165)122815 38 121615 165 122815
e muốn tách số liệu ra như vậy thì dùng công thức ra sao, mong các anh chị giúp dùm e! xin chân thành cảm ơn
 
Xin chào các anh chị! e dang muốn tìm công thức để tách chuổi số liệu trong bảng như sau:
Từ: Thành: ô1 ô2 ô3 ô4
(197)121415 197 121415
(168)121415-(77)121615 168 121415 77 121615
(154)011316-(105)012016 154 011316 105 012016
(38)121615-(165)122815 38 121615 165 122815
e muốn tách số liệu ra như vậy thì dùng công thức ra sao, mong các anh chị giúp dùm e! xin chân thành cảm ơn

Bạn coi file này xem được khônng

Mình làm bằng công thức còn nếu bạn đang xài Excel 2013 hoặc 2016 thì sử dụng chức năng Flas fill trong trường hợp này sẽ rất hữu ích
 

File đính kèm

  • tach.xlsx
    8.9 KB · Đọc: 8
Bạn coi file này xem được khônng

Mình làm bằng công thức còn nếu bạn đang xài Excel 2013 hoặc 2016 thì sử dụng chức năng Flas fill trong trường hợp này sẽ rất hữu ích

Cảm ơn khuongvietphong rất nhiều! rất hữu ích! Cho mình hỏi thêm nếu có thêm
(118)110315-(86)110515-(48)110615
hoặc
(118)110315-(86)110515-(48)110615-(5)021516
thì công thức triển khai như thế nào? xin bạn chỉ giúp
Một lần nửa xin cảm ơn rất nhiều!
 
Các bạn trên GPE giúp mình viết hàm tách họ tên để tạo mã theo nguyên tác sau:

Mã:
Ngô Bảo Chí         => NBC
Nguyễn Du           => NJD
Nguyễn Thị Viết Hòa => NVH
Ngô Trần Vy Hải     => NVH
Đăng Ngữ            => FJN
Đỗ Đông             => FJF
Đồng Đức Điện       => FFF
Ung Thư             => UJT
Ôn Như Hầu          => ONH

Xin cảm ơn các bạn nhiều!
 
Mã:
Ngô Bảo Chí         => NBC
Nguyễn Du           => NJD
Nguyễn Thị Viết Hòa => NVH
Ngô Trần Vy Hải     => NVH
Đăng Ngữ            => FJN
Đỗ Đông             => FJF
Đồng Đức Điện       => FFF
Ung Thư             => UJT
Ôn Như Hầu          => ONH

Xin cảm ơn các bạn nhiều!
bạn nên nói rõ quy luật làm thì người ta mới có cơ sở giúp bạn được, nhìn vô yêu cầu bạn thì cũng hiểu được sơ sơ chứ chưa lường trước hết các trường hợp bạn phát sinh thêm
 
Bạn nêu rõ quy luật làm thì người khác mới có cơ sở giúp bạn được;
Nhìn vô yêu cầu bạn thì cũng hiểu được sơ sơ chứ chưa lường trước hết các trường hợp bạn phát sinh thêm

Chuyển chuỗi họ tên (CHT) bất kỳ thành chuỗi gồm 3 kí tự viết hoa (VH), mà trong đó:

(*) Nếu CHT chỉ có 2 từ thì thêm kí tự 'J' vô giữa
Như Võ Trữ => VJT

(*) Nếu CHT gồm hơn 3 từ thì chỉ lấy ký tự đầu tiên (VH) của từ đầu & 2 kí tự (VH) đầu tiên của 2 từ cuối
Như Ngô Ngọc Bảo Trâm => NBT

(*) Nếu Kí tự cần lấy là chữ 'Đ' thì chuyển thành 'F'
Nhằm mục đích tạo mã toàn chữ cái tiếng Anh & cũng để bớt trùng mã CHT tiếng Việt
Như Đỗ Đại Việt => FFV

(*) Các nguyên âm đầu từ cần lấy làm mã sẽ chuyển sang nguyên âm tiếng Anh tương ứng.
Như Ôn => O; Âu => A; Ửng => U,. . . . .

Nếu các bạn thấy còn trường hợp nào khác, thì đưa lên giúp tôi, để chúng ta cùng trao đổi

Rất cảm ơn các bạn!
 
Web KT
Back
Top Bottom