hitava

Mẹo Google Sheets · 14 phút đọc

Cách tách họ và tên trong Google Sheets, Excel: tách cột, gộp cột, tách chuỗi

Muốn tách họ và tên trong Google Sheets, dùng =REGEXEXTRACT(TRIM(A2); "[^ ]+$") để lấy tên (chữ cuối) và =REGEXEXTRACT(TRIM(A2); "^[^ ]+") để lấy họ; tên đệm là phần ở giữa. Bài này đi qua từng công thức với tên tiếng Việt có dấu, hàm SPLIT và hai cái bẫy của nó, công cụ Phân tách văn bản thành các cột, cách gộp lại bằng & và TEXTJOIN, tách địa chỉ, mã đơn, số điện thoại, và cách làm tương đương trong Excel.

Đăng HiTaVaTách cộtGộp cộtREGEXEXTRACTSPLITGoogle Sheets
Bảng tách 4 họ tên như Nguyễn Thị Minh Khai thành 3 cột Họ, Tên đệm, Tên kèm công thức REGEXEXTRACT cho từng cột

Cách tách họ và tên nhanh nhất

Giả sử cột A chứa họ tên đầy đủ, bắt đầu từ A2. Ba công thức dưới đây đặt ở B2, C2, D2 rồi kéo xuống là xong. Cả ba đều bọc TRIM trước, để những ô lỡ có dấu cách thừa ở đầu, cuối hoặc giữa vẫn tách đúng.

Tên (chữ cuối)
=REGEXEXTRACT(TRIM(A2); "[^ ]+$")
Họ (chữ đầu)
=REGEXEXTRACT(TRIM(A2); "^[^ ]+")
Tên đệm
=IFNA(REGEXEXTRACT(TRIM(A2); "^[^ ]+ (.+) [^ ]+$"); "")
Họ + đệm
=IFNA(REGEXEXTRACT(TRIM(A2); "^(.+) [^ ]+$"); "")
Bảng 4 họ tên Nguyễn Thị Minh Khai, Lê Văn An có dấu cách thừa, Trần Bảo, Phạm Đức Tuấn được tách thành 3 cột Họ, Tên đệm, Tên; bên dưới là 3 công thức REGEXEXTRACT cho từng cột
Tên hai chữ như Trần Bảo thì cột Tên đệm để trống, không báo lỗi.

Thử lại với A2 = "Nguyễn Thị Minh Khai": cột Tên ra Khai, cột Họ ra Nguyễn, cột Tên đệm ra Thị Minh, cột Họ + đệm ra Nguyễn Thị Minh. Với A2 = "Trần Bảo" (không có tên đệm), mẫu tìm tên đệm không khớp nên REGEXEXTRACT báo #N/A; IFNA đổi lỗi đó thành ô trống.

Đọc mẫu tìm như sau: [^ ]+ là "một hoặc nhiều ký tự không phải dấu cách", tức là một chữ. Dấu $ là cuối chuỗi, dấu ^ là đầu chuỗi. Vậy "[^ ]+$" là chữ cuối cùng, "^[^ ]+" là chữ đầu tiên. Phần nằm trong ngoặc đơn ( ) là phần được lấy ra. Chữ có dấu tiếng Việt như "Nguyễn", "Đức" vẫn được tính là một chữ bình thường.

Lấy tên cuối không dùng REGEX: RIGHT + SUBSTITUTE

Nếu bạn cần một công thức chạy được cả trên Excel đời cũ, dùng mẹo kinh điển: thay mỗi dấu cách bằng 50 dấu cách, lấy 50 ký tự bên phải, rồi cắt khoảng trắng.

Lấy chữ cuối cùng. 50 phải lớn hơn độ dài chữ dài nhất, với tên người Việt là thừa đủ.
=TRIM(RIGHT(SUBSTITUTE(TRIM(A2); " "; REPT(" "; 50)); 50))

Thử lại với "Nguyễn Thị Minh Khai": sau SUBSTITUTE, giữa các chữ là 50 dấu cách. 50 ký tự bên phải gồm 46 dấu cách và "Khai"; TRIM bỏ dấu cách, còn Khai.

Họ và phần họ + đệm lấy bằng LEFT và FIND:

Họ: lấy các ký tự đứng trước dấu cách đầu tiên. Nối thêm " " để ô chỉ có một chữ không bị lỗi.
=LEFT(TRIM(A2); FIND(" "; TRIM(A2)&" ")-1)
Họ + đệm: bỏ phần tên ở D2 khỏi bên phải.
=TRIM(LEFT(TRIM(A2); LEN(TRIM(A2))-LEN(D2)))

Thử lại: "Nguyễn Thị Minh Khai" dài 20 ký tự, tên "Khai" dài 4. LEFT lấy 16 ký tự "Nguyễn Thị Minh " (có dấu cách cuối), TRIM bỏ dấu cách, còn Nguyễn Thị Minh. Hàm LEN của Google Sheets đếm "ễ" là một ký tự, nên chữ có dấu không làm lệch kết quả.

Hàm SPLIT: tách họ tên thành từng chữ

SPLIT chia chuỗi theo dấu phân cách và đổ kết quả sang các ô bên phải. Cú pháp: SPLIT(văn_bản; dấu_phân_cách; [tách_theo_từng_ký_tự]; [bỏ_ô_trống]), hai đối số sau mặc định là TRUE.

Đặt ở B2, cần chừa đủ ô trống bên phải.
=SPLIT(TRIM(A2); " ")

Thử lại: "Nguyễn Thị Minh Khai" ra 4 ô Nguyễn | Thị | Minh | Khai; "Trần Bảo" ra 2 ô. Vì mỗi người có số chữ khác nhau, các cột sau SPLIT không thẳng hàng: cột E là tên với người 4 chữ nhưng trống với người 3 chữ. Đó là lý do muốn có đúng ba cột Họ, Đệm, Tên thì nên dùng REGEXEXTRACT ở phần trên. Nếu vẫn muốn dùng SPLIT để lấy chữ cuối:

COUNTA đếm số chữ, INDEX lấy chữ ở vị trí cuối. Với "Nguyễn Thị Minh Khai" là chữ thứ 4: Khai.
=INDEX(SPLIT(TRIM(A2); " "); 1; COUNTA(SPLIT(TRIM(A2); " ")))

Hai bẫy của SPLIT

Thứ nhất, SPLIT(A2; ", ") không tách theo cụm ", " mà tách ở mọi dấu phẩy và mọi dấu cách, vì đối số thứ ba mặc định là TRUE. Muốn tách theo cả cụm, thêm FALSE: SPLIT(A2; ", "; FALSE). Thứ hai, phần tách ra trông giống số có thể bị đổi thành số, nên mã "NV-0012" tách theo "-" có thể ra 12 thay vì 0012. Cần giữ nguyên thì dùng REGEXEXTRACT, hàm này luôn trả về chữ.

Muốn một công thức cho cả cột thay vì kéo xuống, bọc ARRAYFORMULA và bỏ dòng trống: =ARRAYFORMULA(IF(A2:A=""; ""; REGEXEXTRACT(TRIM(A2:A); "[^ ]+$"))). Cách viết và các lỗi #REF! khi bị chặn chỗ tràn có ở bài hàm ARRAYFORMULA.

Tách cột không cần công thức: Phân tách văn bản thành các cột

Khi chỉ cần tách một lần, ví dụ dữ liệu dán từ file khác, dùng công cụ có sẵn:

  1. Chèn đủ cột trống bên phải cột cần tách. Công cụ này ghi đè lên các cột bên cạnh mà không hỏi.
  2. Chọn cả cột, vào Dữ liệu › Phân tách văn bản thành các cột.
  3. Ở hộp chọn dấu phân cách hiện ra phía dưới, chọn dấu cách (hoặc dấu phẩy, hoặc gõ ký tự tuỳ chỉnh như "-").

Kết quả là giá trị tĩnh: sửa ô gốc thì các cột đã tách không đổi theo. Với danh sách họ tên, công cụ này cũng có cùng vấn đề như SPLIT: người 4 chữ ra 4 cột, người 2 chữ ra 2 cột. Công cụ này còn hay được dùng để đổi số dạng chữ thành số thật, xem bài sửa lỗi SUM bằng 0.

Xử lý khoảng trắng thừa và viết hoa trước khi tách

Dữ liệu dán từ Zalo, form hay web thường có dấu cách ở đầu, ở cuối hoặc hai dấu cách liền nhau. Mắt không thấy nhưng công thức thì thấy: " Lê Văn An " sẽ cho ra chữ đầu là ô trống nếu không TRIM. Hàm TRIM của Google Sheets bỏ dấu cách ở hai đầu và gộp các dấu cách liền nhau ở giữa thành một.

Dọn khoảng trắng và viết hoa chữ cái đầu mỗi chữ.
=PROPER(TRIM(A2))

Thử lại: A2 = " nguyễn thị minh KHAI " cho ra Nguyễn Thị Minh Khai. PROPER cũng đưa các chữ còn lại về chữ thường nên "KHAI" thành "Khai". Muốn toàn bộ viết hoa (in phong bì, thẻ tên) thì dùng UPPER.

Dữ liệu chép từ trang web đôi khi có dấu cách không ngắt (CHAR(160)) mà TRIM không xoá được; cách xử lý và các kiểu "gần trùng" khác đã có trong bài lọc dữ liệu trùng lặp. Nếu chỉ cần dọn một lần, dùng Dữ liệu › Dọn dẹp dữ liệu › Cắt bớt khoảng trắng.

Họ kép, tên kép: khi công thức tách sai

Công thức nào cũng dựa trên quy ước "chữ đầu là họ, chữ cuối là tên". Quy ước đó đúng với đa số tên người Việt, nhưng có ngoại lệ bạn nên biết trước khi tách cả nghìn dòng:

Họ tênCông thức cho raThực tế có thể là
Tôn Nữ Thanh HàHọ: TônHọ kép: Tôn Nữ (tuỳ gia đình)
Âu Dương MinhHọ: ÂuHọ kép: Âu Dương
Nguyễn Ngọc Bảo AnhTên: AnhCó người dùng tên gọi Bảo Anh
John NguyễnHọ: John, Tên: NguyễnTên nước ngoài đặt trước họ

Không công thức nào đoán đúng được những trường hợp này. Cách thực tế: tách bằng công thức, rồi lọc những dòng có từ 4 chữ trở lên để soát bằng mắt. Số chữ của một ô đếm bằng =COUNTA(SPLIT(TRIM(A2); " ")). Về lâu dài, nếu danh sách cần sắp theo tên hoặc in thư mời theo tên gọi, hãy để người nhập tự gõ cột Tên riêng ngay từ đầu.

Khi đã có cột Tên, xếp danh sách theo tên rất đơn giản: =SORT(A2:D100; 4; TRUE) xếp cả bảng theo cột thứ 4 (Tên) từ A đến Z.

Cách gộp họ và tên từ nhiều cột: &, TEXTJOIN, CONCATENATE

Chiều ngược lại hay gặp khi file nhận về có Họ, Đệm, Tên ở ba cột riêng mà bạn cần một cột họ tên đầy đủ để in hay tra cứu.

Bảng so sánh 5 công thức gộp với B2 là Lê, C2 trống, D2 là An, E2 là ngày 05/01/2026: dấu & cho ra Lê hai dấu cách An, TEXTJOIN bỏ ô trống ra Lê An, CONCATENATE ra Lê An, nối ngày trực tiếp ra số 46027, bọc TEXT ra 05/01/2026
Nhanh nhất. Với B2 = "Nguyễn", C2 = "Thị Minh", D2 = "Khai" cho ra Nguyễn Thị Minh Khai.
=B2&" "&C2&" "&D2

Nhược điểm của dấu &: người không có tên đệm sẽ bị hai dấu cách liền nhau ("Lê An"). Bọc TRIM bên ngoài, hoặc dùng TEXTJOIN với đối số thứ hai là TRUE để bỏ qua ô trống:

Nối B2, C2, D2 bằng dấu cách, bỏ ô trống. Với Lê | (trống) | An cho ra Lê An.
=TEXTJOIN(" "; TRUE; B2:D2)

CONCATENATE(B2; " "; C2; " "; D2) cho kết quả như dấu & nhưng dài hơn; trong Google Sheets, hàm CONCAT chỉ nhận đúng hai giá trị nên ít dùng.

Gộp ô chứa ngày hoặc số tiền phải bọc TEXT, nếu không ngày hiện thành số sê-ri: ="Vào làm: "&TEXT(E2; "dd/mm/yyyy") cho ra "Vào làm: 05/01/2026"; nối trực tiếp thì ra "Vào làm: 46027". Ngày gõ sai từ đầu thì xem sửa lỗi ngày tháng; nối số tiền có dấu chấm hàng nghìn xem phần hàm TEXT trong bài định dạng số tiền.

Gộp nhiều dòng vào một ô, ví dụ liệt kê tên mọi người phòng Kinh doanh: =TEXTJOIN(", "; TRUE; FILTER(B2:B100; C2:C100="Kinh doanh")). Cách viết điều kiện cho FILTER có ở bài hàm FILTER. Muốn xuống dòng trong ô thay vì dấu phẩy thì thay ", " bằng CHAR(10).

Nút Hợp nhất ô không phải là gộp dữ liệu

Hợp nhất ô (merge) chỉ giữ giá trị của ô trên cùng bên trái và bỏ phần còn lại. Muốn gộp nội dung, dùng công thức ở trên. Gộp xong định xoá cột gốc thì chép cột kết quả, dán chỉ giá trị (Ctrl+Shift+V) trước khi xoá, nếu không công thức sẽ báo #REF!.

Tách địa chỉ, mã đơn, số điện thoại ra khỏi chuỗi

Cùng hai hàm SPLIT và REGEXEXTRACT tách được hầu hết các kiểu chuỗi có dấu phân cách rõ ràng.

Bảng 6 ví dụ: tách địa chỉ 12 Lê Lợi, Phường Bến Thành, TP. Hồ Chí Minh thành 3 phần và lấy riêng TP. Hồ Chí Minh; lấy A101 từ mã HD-A101-202509; SPLIT mã NV-0012 mất số 0 còn REGEXEXTRACT giữ 0012; lấy số 0912345678 ra khỏi ghi chú

Địa chỉ. Với A2 = "12 Lê Lợi, Phường Bến Thành, TP. Hồ Chí Minh":

Ra 3 ô: 12 Lê Lợi | Phường Bến Thành | TP. Hồ Chí Minh. TRIM bỏ dấu cách đứng sau dấu phẩy.
=ARRAYFORMULA(TRIM(SPLIT(A2; ",")))
Chỉ lấy phần sau dấu phẩy cuối cùng (tỉnh/thành): TP. Hồ Chí Minh.
=TRIM(REGEXEXTRACT(A2; "[^,]+$"))

Lấy phần cuối an toàn hơn lấy "cột thứ 3", vì địa chỉ cũ có thêm quận/huyện còn địa chỉ mới (từ 01/07/2025) chỉ còn phường/xã và tỉnh/thành, nên số phần mỗi dòng khác nhau.

Mã ghép. Mã hoá đơn kiểu "HD-A101-202509" (tiền tố, phòng, kỳ):

Lấy phần thứ hai: A101.
=REGEXEXTRACT(A2; "^[^-]+-([^-]+)")
Lấy phần cuối: 202509 (dạng chữ). Với "NV-0012" ra 0012, giữ nguyên số 0.
=REGEXEXTRACT(A2; "[^-]+$")

Cần dùng phần số để tính toán thì bọc VALUE: =VALUE(REGEXEXTRACT("SP0012"; "\d+")) ra số 12. \d+ là "một hoặc nhiều chữ số".

Số điện thoại lẫn trong ghi chú. A2 = "Anh Tuấn 0912345678 giao chiều":

Lấy dãy bắt đầu bằng 0 và có thêm đúng 9 chữ số: 0912345678. Không có số nào thì để trống.
=IFNA(REGEXEXTRACT(A2; "0\d{9}"); "")

Số gõ có dấu cách hay dấu chấm ở giữa (0912 345 678) sẽ không khớp mẫu này; bỏ ký tự thừa trước bằng REGEXREPLACE như trong bài lọc dữ liệu trùng lặp. Cột số điện thoại nên để định dạng văn bản thuần tuý để không mất số 0 ở đầu.

Danh sách nhân viên: nên để họ tên một cột hay tách sẵn?

Với danh sách nhân sự, khách hàng, học viên, cách gọn nhất là một cột Họ và tên để nhập và tra cứu, còn cột Tên chỉ tách ra (bằng công thức) khi cần sắp xếp hay in thư theo tên. Người nhập chỉ gõ một lần, không ai phải nhớ tách tay.

Tab Danh sách NV của mẫu Quản lý nhân sự PRO với dữ liệu mẫu: cột Mã NV NV001 đến NV012, cột Họ và tên như Phan Minh Trang, Huỳnh Khánh Anh, cùng các cột Phòng ban, Vị trí công việc, Cấp bậc, Loại công việc, Ngày vào làm, Nguồn tuyển dụng
Tab Danh sách NV của mẫu Quản lý nhân sự PRO: mỗi nhân viên một dòng, họ tên một cột.

Cách tổ chức hồ sơ nhân viên (cột nào nên có, chia nhóm thế nào) có ở bài quản lý hồ sơ nhân sự bằng Google Sheets.

Tách họ và tên trong Excel: TEXTSPLIT, TEXTAFTER, Flash Fill

Excel có những công cụ riêng, tuỳ phiên bản:

CáchCông thức / thao tácPhiên bản
Lấy tên cuối=TEXTAFTER(TRIM(A2); " "; -1)Microsoft 365, Excel cho web
Lấy họ + đệm=TEXTBEFORE(TRIM(A2); " "; -1)Microsoft 365, Excel cho web
Tách thành từng chữ=TEXTSPLIT(TRIM(A2); " ")Microsoft 365, Excel cho web
Lấy tên cuối (mọi bản)=TRIM(RIGHT(SUBSTITUTE(TRIM(A2); " "; REPT(" "; 50)); 50))Mọi phiên bản
Flash FillGõ mẫu 1–2 dòng, bấm Ctrl+EExcel 2013 trở lên
Text to ColumnsData › Text to Columns, chọn Delimited, SpaceMọi phiên bản
Gộp bỏ ô trống=TEXTJOIN(" "; TRUE; B2:D2)Excel 2019 trở lên, 365

Số -1 trong TEXTAFTER và TEXTBEFORE nghĩa là "tính từ dấu cách cuối cùng". Thử lại với "Nguyễn Thị Minh Khai": TEXTAFTER ra Khai, TEXTBEFORE ra Nguyễn Thị Minh.

Flash Fill đoán quy luật từ ví dụ bạn gõ: ở B2 gõ "Khai", ở B3 gõ tên của dòng 3, rồi bấm Ctrl+E để Excel điền phần còn lại. Nhanh, nhưng kết quả là giá trị tĩnh và có thể đoán sai với họ tên dài ngắn khác nhau, nên soát lại vài dòng 4 chữ.

Excel dùng dấu ; hay dấu , giữa các đối số tuỳ cài đặt vùng của máy. Hai nền tảng khác nhau ở những điểm khác nữa, xem Google Sheets hay Excel.

Đọc tiếp

Câu hỏi thường gặp

Làm sao lấy tên (chữ cuối) trong họ tên ở Google Sheets?

Dùng =REGEXEXTRACT(TRIM(A2); "[^ ]+$"). Với "Nguyễn Thị Minh Khai" kết quả là Khai. Cách không dùng REGEX: =TRIM(RIGHT(SUBSTITUTE(TRIM(A2); " "; REPT(" "; 50)); 50)).

Tách họ, tên đệm, tên ra 3 cột riêng thế nào?

Họ: =REGEXEXTRACT(TRIM(A2); "^[^ ]+"). Tên đệm: =IFNA(REGEXEXTRACT(TRIM(A2); "^[^ ]+ (.+) [^ ]+$"); ""). Tên: =REGEXEXTRACT(TRIM(A2); "[^ ]+$"). Người không có tên đệm thì cột giữa để trống.

Tách cột rồi sửa họ tên gốc thì cột đã tách có đổi theo không?

Có, nếu bạn tách bằng công thức (REGEXEXTRACT, SPLIT). Không, nếu dùng Dữ liệu › Phân tách văn bản thành các cột hoặc Flash Fill trong Excel, vì hai cách đó cho ra giá trị tĩnh.

Gộp họ và tên mà không bị thừa dấu cách khi thiếu tên đệm?

Dùng =TEXTJOIN(" "; TRUE; B2:D2). Đối số TRUE bỏ qua ô trống. Hoặc dùng =TRIM(B2&" "&C2&" "&D2).

Vì sao tách mã "NV-0012" bằng SPLIT lại mất số 0?

SPLIT có thể đổi phần trông giống số thành số, nên 0012 thành 12. Dùng =REGEXEXTRACT(A2; "[^-]+$"), hàm này luôn trả về chữ nên giữ nguyên 0012.

Excel có hàm tách họ tên như Google Sheets không?

Microsoft 365 có TEXTSPLIT, TEXTAFTER, TEXTBEFORE: =TEXTAFTER(TRIM(A2); " "; -1) lấy tên cuối. Excel đời cũ dùng công thức RIGHT + SUBSTITUTE, hoặc Flash Fill (Ctrl+E) từ Excel 2013.

Nguồn tham khảo

Mẫu làm sẵn cho việc này

Đọc tiếp

Xem thêm mẹo và video hướng dẫn trên kênh YouTube HiTaVa, hoặc đọc các bài khác trong chủ đề Mẹo Google Sheets.

Cần hỏi thêm?Zalo 0935077673 (Hải Vân)