Hướng Dẫn Kết Hợp CLEAN, TRIM, SUBSTITUTE Để Xóa Mọi Ký Tự Thừa

Dữ liệu Excel nhập từ nguồn bên ngoài thường chứa ba loại ký tự thừa: ký tự không in được (ASCII 0-31), khoảng trắng thừa (ASCII 32), và khoảng trắng không ngắt (ASCII 160). Công thức kết hợp =TRIM(CLEAN(SUBSTITUTE(A2,CHAR(160),” “))) xử lý triệt để cả ba loại theo thứ tự: SUBSTITUTE chuyển CHAR(160) thành khoảng trắng thường, CLEAN xóa ký tự không in, TRIM dọn khoảng trắng thừa. Áp dụng cho 5000 dòng chỉ mất 15 giây, giảm file từ 25MB xuống 18MB, VLOOKUP chạy nhanh hơn 80%.

File Excel của tôi chứa 5000 dòng dữ liệu khách hàng từ hệ thống CRM cũ. Mỗi lần chạy VLOOKUP đều trả về lỗi dù kiểm tra kỹ đã đúng mã. Sau khi dùng hàm LEN phát hiện ra ô A2 có 8 ký tự trong khi chỉ hiển thị 6 ký tự nhìn thấy. Hai ký tự ẩn này phá hỏng toàn bộ công thức tra cứu.

Vấn đề với dữ liệu import từ nguồn bên ngoài

Khi sao chép dữ liệu từ website, phần mềm kế toán hoặc file CSV sang Excel, dữ liệu thường mang theo ký tự không mong muốn. Ba loại phổ biến nhất:

Ký tự không in được – Mã ASCII từ 0 đến 31 như tab, ngắt dòng, ký tự điều khiển. Thường xuất hiện khi export từ database hoặc legacy systems. Excel hiển thị chúng dưới dạng hộp vuông hoặc hoàn toàn vô hình.

Khoảng trắng thừa – Dấu cách đầu dòng, cuối dòng, hoặc nhiều dấu cách liên tiếp giữa các từ. Copy từ PDF hoặc email thường tạo ra 5-10 khoảng trắng liên tục thay vì một.

Khoảng trắng không ngắt – Ký tự HTML   với mã ASCII 160. Rất phổ biến khi copy từ trang web. Nhìn giống hệt khoảng trắng thường nhưng Excel coi là ký tự khác hoàn toàn.

XEM THÊM:  7 Lỗi Phổ Biến Khi Dùng Hàm RIGHT Và Cách Khắc Phục Trong 30 Giây

Mỗi loại cần cách xử lý riêng. Dùng sai hàm sẽ không có tác dụng hoặc chỉ giải quyết một phần.

Tại sao mỗi hàm riêng lẻ không đủ

Tôi thử hàm TRIM đầu tiên cho 5000 dòng dữ liệu. Kết quả chỉ 1500 dòng sạch, còn 3500 dòng vẫn bị lỗi. Sau đó thử CLEAN, thêm 1000 dòng được fix nhưng vẫn còn 2500 dòng lỗi. Cuối cùng phải dùng cả ba hàm CLEAN, TRIM và SUBSTITUTE mới xử lý triệt để.

Hàm CLEAN giới hạn ở ASCII 0-31

Hàm CLEAN trong Excel được thiết kế xóa 32 ký tự đầu tiên trong bảng mã ASCII 7-bit. Bao gồm:

  • CHAR(10): Ngắt dòng (Line Feed)
  • CHAR(13): Xuống đầu dòng (Carriage Return)
  • CHAR(9): Tab
  • CHAR(0) đến CHAR(31): Các ký tự điều khiển khác

Công thức cơ bản: =CLEAN(A2)

Vấn đề: CLEAN không xóa được ký tự có mã từ 32 trở lên, đặc biệt là CHAR(160) – khoảng trắng không ngắt. Khi data từ web có chứa  , CLEAN không tác dụng gì.

Hàm TRIM chỉ xử lý khoảng trắng ASCII 32

TRIM loại bỏ khoảng trắng thừa ở đầu, cuối, và giữa văn bản. Chỉ giữ lại một khoảng trắng duy nhất giữa các từ.

Công thức: =TRIM(A2)

Ví dụ:

  • Input: " Excel Tutorial "
  • Output: "Excel Tutorial"

Hạn chế: TRIM chỉ nhận diện khoảng trắng thông thường mã 32. Với khoảng trắng không ngắt mã 160, TRIM hoàn toàn bó tay. Tôi đã thử TRIM trên cột địa chỉ có 800 dòng lỗi, chỉ 300 dòng được fix.

Khi cần SUBSTITUTE cho ký tự đặc biệt

SUBSTITUTE thay thế ký tự cụ thể bằng ký tự khác hoặc xóa hoàn toàn.

Cú pháp: =SUBSTITUTE(text, old_text, new_text, [instance_num])

Để xóa khoảng trắng không ngắt:

=SUBSTITUTE(A2,CHAR(160)," ")

Công thức này chuyển CHAR(160) thành khoảng trắng thường, sau đó dùng TRIM xóa sạch.

Giới hạn: Phải biết chính xác mã ký tự cần xóa. Nếu không biết, phải dùng hàm CODE để phát hiện: =CODE(RIGHT(A2,1)) cho ký tự cuối cùng.

Công thức kết hợp ba hàm hoàn hảo

Sau khi test nhiều cách, công thức này xử lý được 99% trường hợp:

=TRIM(CLEAN(SUBSTITUTE(A2,CHAR(160)," ")))

Thứ tự quan trọng – từ trong ra ngoài:

XEM THÊM:  Hàm LENB Trong Excel: Cách Đếm Byte Chính Xác Cho Văn Bản Tiếng Việt

Bước 1 – SUBSTITUTE trước tiên
Chuyển khoảng trắng không ngắt thành khoảng trắng thường. Nếu không làm bước này trước, CHAR(160) sẽ tồn tại đến cuối.

Bước 2 – CLEAN loại bỏ ký tự không in
Xóa tab, ngắt dòng, và các ký tự ASCII 0-31. Sau khi SUBSTITUTE chuyển CHAR(160) thành khoảng trắng thường, CLEAN không ảnh hưởng đến nó.

Bước 3 – TRIM dọn sạch khoảng trắng
Xóa khoảng trắng đầu, cuối, và khoảng trắng thừa giữa các từ. Chỉ giữ lại một dấu cách giữa mỗi từ.

Ví dụ thực tế với data khách hàng

File ban đầu có cột địa chỉ từ website:

A B
" 123 Lê Lợi (5 khoảng trắng đầu, 2 khoảng trắng cuối)
"456·Hai·Bà·Trưng" (dấu · là CHAR(160))
"789 Nguyễn Huệ ← " (có CHAR(10) – ngắt dòng ẩn)

Áp dụng công thức vào B2:

=TRIM(CLEAN(SUBSTITUTE(A2,CHAR(160)," ")))

Kết quả:

  • Dòng 1: "123 Lê Lợi" – Xóa sạch khoảng trắng thừa
  • Dòng 2: "456 Hai Bà Trưng" – Chuyển CHAR(160) thành khoảng trắng thường
  • Dòng 3: "789 Nguyễn Huệ" – Loại bỏ ký tự ngắt dòng

Sau khi có kết quả ở cột B, copy và dán dạng giá trị (Paste Special > Values) để thay thế dữ liệu gốc.

Xử lý nhiều ký tự đặc biệt cùng lúc

Với data phức tạp hơn chứa nhiều loại ký tự lạ, mở rộng công thức:

=TRIM(CLEAN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,CHAR(160)," "),CHAR(13)," "),CHAR(10)," ")))

Công thức này xử lý:

  • CHAR(160): Khoảng trắng không ngắt
  • CHAR(13): Carriage Return
  • CHAR(10): Line Feed

Với file 5000 dòng của tôi, công thức kết hợp xử lý sạch 4950 dòng. 50 dòng còn lại chứa ký tự đặc biệt ngoài phạm vi cần xác định bằng CODE rồi thêm SUBSTITUTE tương ứng.

Phát hiện ký tự ẩn với hàm CODE

Khi không biết ký tự lạ là gì, dùng CODE để xác định mã ASCII:

Kiểm tra ký tự đầu:

=CODE(LEFT(A2,1))

Kiểm tra ký tự cuối:

=CODE(RIGHT(A2,1))

Nếu kết quả trả về 160, biết ngay là khoảng trắng không ngắt. Nếu là 10, đó là ngắt dòng. Sau đó thêm SUBSTITUTE tương ứng vào công thức.

Áp dụng nhanh cho cả cột dữ liệu

Với dataset lớn, không cần gõ lại công thức cho từng ô:

XEM THÊM:  Hàm ARRAYTOTEXT trong Excel: Chuyển Mảng Thành Text Dễ Đọc (Hoặc Mã Máy Tính Hiểu Được)

Bước 1: Nhập công thức vào ô B2

=TRIM(CLEAN(SUBSTITUTE(A2,CHAR(160)," ")))

Bước 2: Double-click vào góc dưới bên phải ô B2 (fill handle)
Excel tự động điền công thức xuống toàn bộ cột có dữ liệu tương ứng.

Bước 3: Copy toàn bộ cột B > Paste Special vào cột A > Values only
Thay thế data gốc bằng data đã làm sạch.

Bước 4: Xóa cột B sau khi hoàn tất

Với 5000 dòng, quá trình này mất 15 giây thay vì xử lý thủ công từng ô trong 3 giờ.

Kiểm tra kết quả với công thức so sánh

Sau khi làm sạch, xác nhận data đã đúng:

=LEN(A2)=LEN(TRIM(CLEAN(SUBSTITUTE(A2,CHAR(160)," "))))

Nếu trả về TRUE, ô đã sạch. Nếu FALSE, vẫn còn ký tự ẩn cần xử lý thêm.

So sánh trực tiếp hai ô:

=EXACT(A2,B2)

TRUE nghĩa là hai ô giống hệt. FALSE cho thấy vẫn có sự khác biệt.

Khi nào dùng Find & Replace thay vì công thức

Với một số trường hợp đơn giản, Find & Replace (Ctrl + H) nhanh hơn:

Xóa khoảng trắng không ngắt:

  1. Copy một khoảng trắng lạ từ ô có vấn đề (Ctrl + C)
  2. Mở Find & Replace (Ctrl + H)
  3. Dán vào ô “Find what”
  4. Để trống ô “Replace with” hoặc nhập khoảng trắng thường
  5. Replace All

Xóa ngắt dòng:

  1. Find what: Nhấn Ctrl + J (tạo ký tự ngắt dòng)
  2. Replace with: Khoảng trắng thường
  3. Replace All

Phương pháp này phù hợp cho xử lý nhanh không cần giữ lại data gốc.

Lưu ý về version Excel và tương thích

Công thức TRIM, CLEAN, SUBSTITUTE hoạt động trên:

  • Excel 2007 trở về sau (Windows)
  • Excel 2011 trở về sau (Mac)
  • Excel Online
  • Google Sheets (cú pháp giống hệt)

Excel 365 có hàm TEXTJOIN và CONCAT mạnh hơn cho trường hợp phức tạp, nhưng công thức kết hợp ba hàm này đủ cho 95% tình huống.

Đối với file có hàng triệu dòng, nên chia nhỏ ra xử lý từng phần 10,000-50,000 dòng mỗi lần để tránh Excel bị treo.

Kết quả sau khi áp dụng

File 5000 dòng của tôi từ 25MB giảm xuống 18MB sau khi xóa ký tự thừa. Công thức VLOOKUP chạy trong 0.8 giây thay vì 4 giây trước đó. Tất cả lỗi #N/A đều biến mất vì data đã khớp chính xác.

Công thức này cứu vãn report cuối tháng của team tôi. Thay vì mất 2 ngày kiểm tra thủ công từng dòng lỗi, 15 phút áp dụng công thức đã giải quyết toàn bộ. Bắt đầu với SUBSTITUTE cho CHAR(160), sau đó CLEAN loại ký tự ẩn, cuối cùng TRIM dọn khoảng trắng. Nhớ đúng thứ tự này sẽ xử lý được phần lớn data lỗi từ nguồn bên ngoài.

Related Posts

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *