
Có ba hướng chính để lọc trùng Google Sheet: dùng công cụ Dữ liệu → Dọn dẹp dữ liệu → Xóa bản sao nếu bạn muốn xóa hẳn dòng thừa; dùng UNIQUE nếu muốn giữ nguyên dữ liệu gốc và tách ra một danh sách sạch ở chỗ khác; dùng COUNTIF kèm định dạng có điều kiện nếu chỉ muốn nhìn thấy dòng nào bị lặp để tự quyết định. Nếu trùng phải xét từ hai cột trở lên (ví dụ cùng số điện thoại và cùng ngày mua), bạn dùng COUNTIFS. Bài này tôi đi qua đủ 5 cách, kèm công thức copy được ngay và những lỗi khiến hai ô nhìn giống hệt nhau mà máy vẫn báo không trùng.
Trước khi lọc trùng, phải thống nhất «trùng» là trùng theo cột nào
Đây là bước nhiều người bỏ qua và sau đó mất dữ liệu. Trùng không phải một khái niệm duy nhất — nó phụ thuộc vào cột bạn chọn làm căn cứ.
Giả sử bạn có trang Khach_hang với cấu trúc như sau:
| Cột | A — Ho_ten | B — So_dien_thoai | C — Email | D — Ngay_mua |
|---|---|---|---|---|
| Dòng 2 | Nguyễn Văn An | 0901234567 | an@gmail.com | 01/03/2026 |
| Dòng 3 | Nguyen Van An | 0901234567 | an@gmail.com | 14/05/2026 |
| Dòng 4 | Trần Thị Bình | 0912345678 | binh@gmail.com | 14/05/2026 |
| Dòng 5 | Nguyễn Văn An | 0901234567 | an@gmail.com | 01/03/2026 |
Ba kiểu trùng hoàn toàn khác nhau trong cùng bảng này:
- Trùng cả dòng: dòng 2 và dòng 5 giống nhau từng ô một. Đây là trùng thật, xóa bớt một dòng gần như luôn đúng.
- Trùng một cột: dòng 2, 3, 5 cùng số điện thoại. Nhưng dòng 3 là lần mua khác ngày — nếu bạn xóa trùng theo cột B, bạn mất luôn một đơn hàng.
- Trùng hai cột: dòng 2 và dòng 5 trùng cả số điện thoại lẫn ngày mua — khả năng cao là một đơn bị nhập hai lần.
Nên trước khi làm gì, hãy trả lời: một dòng bị coi là thừa khi nó giống dòng khác ở những cột nào? Câu trả lời đó quyết định bạn chọn cách nào bên dưới.
Chuẩn hoá dữ liệu trước, nếu không sẽ lọc hụt
Google Sheet so sánh chuỗi khá cứng nhắc: "0901234567 " có khoảng trắng cuối không bằng "0901234567". Trước khi lọc, tôi luôn làm hai việc:
- Vào Dữ liệu → Dọn dẹp dữ liệu → Cắt khoảng trắng để cắt khoảng trắng thừa trong vùng đã chọn.
- Nếu so email hoặc mã hàng do nhiều người nhập, tạo thêm một cột phụ chuẩn hoá:
=LOWER(TRIM(C2))rồi lọc trùng trên cột phụ đó thay vì cột gốc.
Cách 1: Xóa trùng lặp trong Google Sheet bằng công cụ có sẵn
Đây là cách nhanh nhất khi bạn muốn xóa thật các dòng thừa. Google Sheet có sẵn chức năng này, không cần công thức.
- Chọn toàn bộ vùng dữ liệu, kể cả dòng tiêu đề (ví dụ A1:D500).
- Vào Dữ liệu → Dọn dẹp dữ liệu → Xóa bản sao.
- Tích vào ô Dữ liệu có hàng tiêu đề nếu dòng đầu là tên cột.
- Chọn các cột làm căn cứ so sánh. Mặc định Google tích hết — nghĩa là chỉ xóa khi cả dòng giống hệt nhau. Nếu chỉ muốn một khách một dòng, bỏ tích hết và chỉ giữ cột
So_dien_thoai. - Bấm Xóa bản sao. Google sẽ báo đã tìm thấy và xóa bao nhiêu dòng.
Hai điều cần nhớ. Thứ nhất, công cụ này giữ lại dòng xuất hiện đầu tiên và xóa các dòng sau, nên thứ tự sắp xếp ảnh hưởng tới việc bản nào được giữ — nếu bạn muốn giữ lần mua mới nhất, hãy sắp xếp giảm dần theo ngày trước khi xóa. Thứ hai, đây là thao tác phá huỷ. Trước khi bấm, tôi luôn nhân bản trang tính (chuột phải vào tên trang → Tạo bản sao) hoặc vào Tệp → Nhật ký phiên bản → Đặt tên cho phiên bản hiện tại để có chỗ quay về.

Cách 2: Hàm UNIQUE Google Sheet để lấy danh sách không trùng
Khi bạn không được phép đụng vào dữ liệu gốc, hàm UNIQUE Google Sheet là lựa chọn an toàn nhất: nó tạo ra một danh sách sạch ở vùng khác, dữ liệu gốc giữ nguyên, và kết quả tự cập nhật khi bảng gốc thay đổi.
- Lấy danh sách số điện thoại không trùng:
=UNIQUE(B2:B500) - Lấy nhiều cột cùng lúc (xét trùng theo cả cụm A–C):
=UNIQUE(A2:C500) - Sắp xếp luôn cho dễ đọc:
=SORT(UNIQUE(B2:B500)) - Chỉ lấy giá trị xuất hiện đúng một lần:
=UNIQUE(B2:B500,FALSE,TRUE)
Tham số thứ ba hay bị hiểu nhầm. =UNIQUE(B2:B500) trả về mỗi giá trị một lần, kể cả giá trị bị lặp 5 lần. Còn =UNIQUE(B2:B500,FALSE,TRUE) loại bỏ hẳn những giá trị bị lặp, chỉ giữ lại các giá trị duy nhất thật sự — hữu ích khi bạn muốn tìm khách chỉ mua đúng một lần. Chi tiết tham số bạn có thể xem trong tài liệu hàm UNIQUE của Google.
Mẹo thực tế: nếu vùng dữ liệu còn tăng lên, viết =UNIQUE(B2:B) thay vì cố định 500 dòng. Nhược điểm là nếu cột B có ô trống phía dưới, kết quả sẽ kèm một dòng rỗng — bọc thêm FILTER để bỏ trống: =UNIQUE(FILTER(B2:B,B2:B<>"")).
Cách 3: Hàm lọc trùng Google Sheet bằng COUNTIF để đánh dấu
Khi bạn chưa muốn xóa mà muốn nhìn thấy dòng nào trùng để kiểm tra bằng mắt, COUNTIF là công cụ chuẩn. Đây cũng là cách tôi khuyên dùng với file có nhiều người nhập, vì không ai bị mất dữ liệu.
Tạo cột phụ E với tiêu đề Trung, ô E2 gõ:
- Đánh dấu mọi dòng có liên quan đến trùng:
=COUNTIF($B$2:$B$500,B2)>1— cả dòng đầu tiên lẫn các dòng lặp sau đều raTRUE. - Chỉ đánh dấu lần xuất hiện thứ 2 trở đi:
=COUNTIF($B$2:B2,B2)>1— dòng đầu tiên làFALSE, các bản sao sau làTRUE. Đây chính là cột để lọc ra và xóa.
Khác biệt nằm ở vùng tham chiếu: công thức thứ hai cố định điểm đầu $B$2 nhưng để điểm cuối B2 chạy theo dòng, nên nó chỉ đếm từ trên xuống tới dòng hiện tại. Kéo công thức xuống, rồi dùng bộ lọc trên cột E để chọn TRUE và xử lý.
Muốn tô màu thay vì hiện chữ TRUE/FALSE: chọn vùng A2:D500, vào Định dạng → Định dạng có điều kiện, chọn Công thức tùy chỉnh là và nhập =COUNTIF($B$2:$B$500,$B2)>1. Lưu ý dấu $ đứng trước B trong $B2 — thiếu nó thì màu sẽ nhảy lung tung sang các cột khác. Nếu phần này còn lạ, tôi có viết riêng một bài về định dạng có điều kiện trong Google Sheet với cách tô màu cả dòng.
Cách 4 và 5: Lọc trùng 2 cột trong Google Sheet và so hai danh sách
Để lọc trùng 2 cột trong Google Sheet, bạn đổi COUNTIF thành COUNTIFS và thêm cặp vùng–điều kiện thứ hai. Đây là trường hợp thực tế nhất với file đơn hàng.
Trùng theo cặp: cùng số điện thoại và cùng ngày mua
Ở ô E2, gõ:
=COUNTIFS($B$2:$B,B2,$D$2:$D,D2)>1
Công thức này chỉ báo TRUE khi cả số điện thoại lẫn ngày mua cùng lặp lại. Quay lại bảng mẫu ở đầu bài: dòng 2 và dòng 5 sẽ ra TRUE, còn dòng 3 (cùng khách nhưng mua ngày khác) vẫn là FALSE — đúng ý bạn. Cần xét ba cột thì cứ nối tiếp: =COUNTIFS($B$2:$B,B2,$D$2:$D,D2,$C$2:$C,C2)>1.
Một cách khác cho kết quả tương tự là tạo cột khoá ghép: =B2&"|"&TEXT(D2,"dd/mm/yyyy") rồi lọc trùng trên cột khoá đó. Cách này chậm hơn một bước nhưng dễ kiểm tra bằng mắt, và sau đó bạn có thể dùng thẳng công cụ Xóa bản sao trên cột khoá.
So hai danh sách ở hai trang khác nhau
Tình huống quen thuộc: bạn vừa nhận file khách mới từ đợt hội chợ, muốn biết ai đã có trong danh sách cũ ở trang DS_cu.
- Đánh dấu khách đã có:
=COUNTIF(DS_cu!B:B,B2)>0 - Lấy riêng danh sách khách chưa có:
=FILTER(B2:B, ISNA(MATCH(B2:B, DS_cu!B:B, 0)))
MATCH trả về lỗi #N/A khi không tìm thấy, ISNA biến lỗi đó thành TRUE, và FILTER giữ lại đúng những dòng đó. Nếu hai danh sách nằm ở hai file Google Sheet khác nhau, bạn cần kéo dữ liệu về trước bằng hàm IMPORTRANGE rồi mới so. Danh sách đầy đủ các hàm và cú pháp, bạn tra ở bảng hàm chính thức của Google Sheets.
Bảng chọn nhanh: tình huống nào dùng cách nào
| Bạn muốn | Dùng cách nào | Dữ liệu gốc |
|---|---|---|
| Xóa hẳn dòng thừa, làm một lần | Dữ liệu → Dọn dẹp dữ liệu → Xóa bản sao | Bị thay đổi |
| Giữ gốc, lấy ra danh sách sạch | UNIQUE, SORT(UNIQUE(...)) | Giữ nguyên |
| Nhìn thấy dòng nào trùng để tự quyết | COUNTIF + định dạng có điều kiện | Giữ nguyên |
| Trùng theo 2 cột trở lên | COUNTIFS hoặc cột khoá ghép | Giữ nguyên |
| So danh sách mới với danh sách cũ | COUNTIF liên trang, FILTER + MATCH | Giữ nguyên |
| Chỉ lấy giá trị xuất hiện đúng 1 lần | UNIQUE(vùng,FALSE,TRUE) | Giữ nguyên |
Nói công bằng: công cụ Xóa bản sao nhanh và không cần biết công thức, nhưng nó không nhớ được gì — lần sau có dữ liệu mới bạn phải làm lại từ đầu. Nhóm hàm thì cập nhật tự động nhưng chiếm thêm vùng trang tính và làm file nặng dần nếu bạn để vùng mở B2:B trên file vài chục nghìn dòng. File nhỏ, dọn một lần: dùng công cụ. File chạy hằng ngày: dùng hàm.
5 lỗi hay gặp khi lọc trùng
- Khoảng trắng thừa. Hai ô nhìn y hệt nhưng một ô có dấu cách cuối. Chạy Cắt khoảng trắng hoặc so bằng
TRIM()trước. - Số điện thoại mất số 0 đầu. Nếu cột lưu dạng số,
0901234567thành901234567và không khớp với ô lưu dạng chữ. Hãy định dạng cả cột về Văn bản ngay từ đầu, hoặc so bằng=COUNTIF($B$2:$B,TEXT(B2,"@"))cho đồng bộ kiểu dữ liệu. - Chữ hoa, chữ thường. Riêng
COUNTIFkhông phân biệt hoa thường, nhưngUNIQUEvà công cụ Xóa bản sao thì có —An@Gmail.comvàan@gmail.comsẽ bị coi là hai giá trị khác nhau. Chuẩn hoá bằngLOWER()cho chắc. - Quên dấu $ khi kéo công thức. Vùng so sánh phải cố định
$B$2:$B$500; nếu không, kéo xuống dòng 50 thì vùng trượt thànhB50:B548và kết quả sai hoàn toàn. - Xóa trùng theo một cột làm mất dữ liệu ở cột khác. Lỗi nặng nhất. Một khách mua 5 lần, bạn xóa trùng theo số điện thoại là mất 4 đơn hàng. Khi file vừa chứa danh mục khách vừa chứa giao dịch, hãy tách ra hai trang riêng trước khi dọn.
Lỗi thứ 5 thực ra là dấu hiệu dữ liệu đã vượt khỏi khuôn khổ một bảng tính phẳng. Tôi gặp mẫu này rất thường xuyên ở các cửa hàng bán lẻ: file duy nhất tên «Khách hàng 2026» vừa ghi thông tin khách, vừa ghi từng lần mua, nên tháng nào cũng phải lọc trùng. Giải pháp đúng không nằm ở công thức mà ở cấu trúc — một trang Khách hàng (mỗi khách một dòng, có mã khách) và một trang Đơn hàng (mỗi đơn một dòng, trỏ về mã khách).
Tóm lại và việc nên làm tiếp
Ghi nhớ ba câu: muốn xóa hẳn thì dùng Xóa bản sao (nhớ sao lưu trước); muốn giữ gốc thì dùng UNIQUE; muốn soi xem dòng nào trùng thì dùng COUNTIF kèm tô màu, và đổi sang COUNTIFS khi trùng phải xét từ hai cột.
Bước tiếp theo bạn tự làm được ngay trong 15 phút: mở file khách hàng hoặc đơn hàng của mình, tạo một bản sao trang tính để thử, thêm cột phụ với công thức =COUNTIF($B$2:B2,B2)>1 và kéo hết bảng. Nhìn số dòng TRUE hiện ra, bạn sẽ biết file của mình đang trùng ở mức nào và có đáng để dọn hay không.
Nếu muốn đi xa hơn với dữ liệu trên Google Sheet, hai bài này nối tiếp tự nhiên: hàm QUERY Google Sheet để lọc và tổng hợp theo nhiều điều kiện cùng lúc, và các hàm Google Sheet hay dùng nhất gồm IF, SUMIF, COUNTIF, SUMIFS.
Câu hỏi thường gặp
›Hàm nào lọc trùng nhanh nhất trong Google Sheet?
Nhanh nhất là UNIQUE nếu bạn chỉ cần lấy ra danh sách không trùng, ví dụ =UNIQUE(B2:B500) — chỉ một công thức, dữ liệu gốc giữ nguyên và kết quả tự cập nhật. Nếu bạn cần biết dòng nào trùng chứ không phải lấy danh sách sạch, dùng COUNTIF: =COUNTIF($B$2:$B$500,B2)>1. Còn muốn xóa hẳn và làm một lần cho xong thì không cần hàm nào, dùng Dữ liệu → Dọn dẹp dữ liệu → Xóa bản sao là nhanh nhất.
›Làm sao lọc trùng 2 cột trong Google Sheet?
Dùng COUNTIFS thay cho COUNTIF, mỗi cột là một cặp vùng–điều kiện. Ví dụ muốn tìm đơn trùng cả số điện thoại (cột B) và ngày mua (cột D), bạn gõ =COUNTIFS($B$2:$B,B2,$D$2:$D,D2)>1 rồi kéo xuống; ô nào ra TRUE là dòng bị lặp theo cả hai cột. Cách thay thế là tạo cột khoá ghép =B2&"|"&D2 rồi lọc trùng trên cột khoá đó.
›Xóa trùng lặp xong có khôi phục được không?
Được, nếu bạn xử lý ngay. Nhấn Ctrl+Z để hoàn tác, hoặc vào Tệp → Nhật ký phiên bản → Xem nhật ký phiên bản để mở lại bản trước khi xóa, vì Google Sheet lưu lịch sử chỉnh sửa tự động. Tuy nhiên khôi phục sẽ trả lại toàn bộ trang về thời điểm cũ, nên những thay đổi sau đó cũng mất theo — an toàn nhất vẫn là nhân bản trang tính trước khi bấm Xóa bản sao.
›Vì sao hai ô nhìn giống nhau mà không bị tính là trùng?
Thường do ba nguyên nhân: ô có khoảng trắng thừa ở đầu hoặc cuối, một ô lưu dạng số còn ô kia lưu dạng văn bản (số điện thoại bị mất số 0 đầu là ví dụ điển hình), hoặc khác chữ hoa chữ thường khi dùng UNIQUE và công cụ Xóa bản sao. Cách xử lý là chạy Dữ liệu → Dọn dẹp dữ liệu → Cắt khoảng trắng, định dạng cột số điện thoại về kiểu Văn bản, và tạo cột phụ =LOWER(TRIM(B2)) để so trên cột đã chuẩn hoá.
Tác giả
Chuyên gia chuyển đổi số · Đại diện 5F Edu
Hơn 8 năm triển khai và tư vấn chuyển đổi số cho doanh nghiệp vừa và nhỏ: chuẩn hoá quy trình, xây phần mềm quản lý bằng AppSheet và web app, tự động hoá bằng N8N. Người làm kênh YouTube Nghiện AppSheet.



