Hàm FIND Và FINDB: Sự Khác Biệt Mà 90% Người Dùng Excel Không Biết

Excel có hai hàm tìm kiếm vị trí ký tự gần như giống hệt nhau: FIND và FINDB. Phần lớn người dùng chỉ biết đến FIND, còn FINDB thường bị bỏ qua trong các hướng dẫn. Sự khác biệt giữa chúng nằm ở cách đếm ký tự, đặc biệt quan trọng khi làm việc với các ngôn ngữ châu Á như tiếng Nhật, tiếng Trung hay tiếng Hàn.

Hàm FIND đếm theo ký tự

Hàm FIND trả về vị trí của một chuỗi ký tự trong văn bản khác. Mỗi ký tự được đếm là một đơn vị, bất kể ký tự đó chiếm bao nhiêu byte trong bộ nhớ.

Cú pháp cơ bản:

  • Công thức: =FIND(find_text, within_text, [start_num])
  • find_text: Chuỗi cần tìm
  • within_text: Văn bản chứa chuỗi cần tìm
  • start_num: Vị trí bắt đầu tìm (tùy chọn, mặc định là 1)

Đặc điểm quan trọng: Hàm FIND phân biệt chữ hoa và chữ thường. Công thức =FIND("excel", "Excel 2024") sẽ trả về lỗi #VALUE! vì chữ “e” thường khác với chữ “E” hoa. Nếu muốn tìm không phân biệt chữ hoa thường, cần dùng hàm SEARCH thay vì FIND.

Ví dụ với công thức =FIND("ang", "Hoang Ha") sẽ trả về 4, vì chữ “a” của “ang” nằm ở vị trí thứ 4 trong chuỗi “Hoang Ha”. Hàm luôn trả về vị trí của ký tự đầu tiên trong chuỗi tìm kiếm.

Hàm FINDB đếm theo byte

Hàm FINDB hoạt động giống FIND nhưng đếm theo số byte thay vì số ký tự. Điều này tạo ra sự khác biệt lớn khi làm việc với các ngôn ngữ sử dụng bộ ký tự hai byte.

Cú pháp tương tự:

  • Công thức: =FINDB(find_text, within_text, [start_num])
  • Các tham số giống hệt FIND
  • Cách sử dụng giống FIND

Cơ chế đếm đặc biệt: FINDB đếm mỗi ký tự hai byte là 2 đơn vị khi bạn đã bật chế độ soạn thảo cho ngôn ngữ hỗ trợ DBCS (Double Byte Character Set) và đặt nó làm ngôn ngữ mặc định. Các ngôn ngữ này bao gồm tiếng Nhật, tiếng Trung Giản thể, tiếng Trung Phồn thể và tiếng Hàn.

Nếu không bật ngôn ngữ DBCS làm mặc định, FINDB sẽ đếm giống FIND – mỗi ký tự bằng 1. Đây là lý do nhiều người dùng không thấy sự khác biệt giữa hai hàm này khi làm việc với tiếng Anh hoặc tiếng Việt.

So sánh cách hoạt động

Sự khác biệt trở nên rõ ràng khi làm việc với văn bản đa ngôn ngữ. Giả sử có chuỗi “Hello世界” trong ô A1, với Excel đã cài đặt tiếng Trung làm ngôn ngữ mặc định.

Với hàm FIND: Công thức =FIND("界", A1) trả về 8, vì đếm từ trái sang phải: H(1), e(2), l(3), l(4), o(5), 世(6), 界(7). Nhưng đây là sai! Vì FIND luôn đếm mỗi ký tự là 1.

Thực tế FIND trả về 7 vì nó đếm: H(1), e(2), l(3), l(4), o(5), 世(6), 界(7).

Với hàm FINDB: Công thức =FINDB("界", A1) trả về 13, vì đếm theo byte: H(1), e(2), l(3), l(4), o(5), 世(6+7=hai byte), 界(8+9+10+11+12=bắt đầu ở byte thứ 11).

Thực tế, với UTF-8 encoding tiêu chuẩn, ký tự Hán chiếm 3 byte mỗi ký tự. Nhưng trong Excel với DBCS mode, mỗi ký tự hai byte được đếm là 2 đơn vị.

Xử lý lỗi giống nhau

Cả hai hàm đều trả về lỗi #VALUE! trong các trường hợp sau. Việc hiểu rõ các lỗi này giúp tránh được những sai sót phổ biến khi viết công thức.

Không tìm thấy chuỗi: Nếu find_text không tồn tại trong within_text, cả FIND và FINDB đều trả về #VALUE!. Ví dụ: =FIND("xyz", "Hello") sẽ báo lỗi.

Start_num vượt quá độ dài: Khi giá trị start_num lớn hơn số ký tự (hoặc byte) trong within_text, hàm trả về lỗi. Công thức =FIND("H", "Hello", 10) sẽ lỗi vì chuỗi “Hello” chỉ có 5 ký tự.

Start_num bằng 0 hoặc âm: Cả hai hàm yêu cầu start_num phải lớn hơn 0. Giá trị =FIND("H", "Hello", 0) hoặc =FIND("H", "Hello", -1) đều trả về #VALUE!.

Giải pháp xử lý lỗi: Kết hợp với hàm IFERROR để xử lý trường hợp không tìm thấy: =IFERROR(FIND("@", A1), "Không có email"). Công thức này trả về vị trí ký tự @ nếu tìm thấy, hoặc văn bản “Không có email” nếu không tìm thấy.

XEM THÊM:  Tất Cả Về Hàm CHAR Trong Excel: Cú Pháp, Ứng Dụng, Và Xử Lý Lỗi

Khi nào dùng FIND

Hàm FIND phù hợp cho hầu hết các tình huống xử lý chuỗi trong Excel. Đây là lựa chọn mặc định cho người dùng làm việc với tiếng Anh, tiếng Việt hoặc các ngôn ngữ châu Âu.

Tách họ tên: Kết hợp FIND với LEFT để tách họ từ họ tên đầy đủ. Công thức =LEFT(A1, FIND(" ", A1) - 1) trích xuất họ từ “Nguyễn Văn An” ra thành “Nguyễn”. Hàm FIND tìm vị trí khoảng trắng đầu tiên, LEFT lấy tất cả ký tự từ đầu đến trước khoảng trắng đó.

Trích xuất tên miền email: Sử dụng =MID(A1, FIND("@", A1) + 1, LEN(A1)) để lấy phần tên miền sau dấu @. Với email “[email protected]”, công thức trả về “domain.com”.

Tìm mã sản phẩm: Khi mã sản phẩm có định dạng cố định như “PRD-12345-VN”, dùng FIND để xác định vị trí dấu gạch ngang thứ hai: =FIND("-", A1, FIND("-", A1) + 1). Công thức này bỏ qua dấu gạch ngang đầu tiên và tìm dấu gạch ngang thứ hai.

Khi nào dùng FINDB

FINDB trở nên cần thiết khi làm việc với dữ liệu từ hệ thống châu Á hoặc cần độ chính xác về byte. Đây không phải hàm thông dụng nhưng không thể thay thế trong một số trường hợp đặc biệt.

Xử lý dữ liệu nhập từ Nhật Bản: Các file CSV xuất từ hệ thống Nhật Bản thường sử dụng encoding Shift-JIS. Khi import vào Excel với ngôn ngữ tiếng Nhật, FINDB đảm bảo tính toán vị trí chính xác theo cách hệ thống gốc lưu trữ.

Làm việc với cơ sở dữ liệu DBCS: Các database như Oracle hoặc SQL Server có cột VARCHAR2 đếm theo byte. Khi trích xuất dữ liệu từ các cột này, FINDB giúp đồng bộ vị trí ký tự giữa Excel và database.

Tính toán độ dài byte chính xác: Kết hợp với LENB để kiểm tra dữ liệu trước khi gửi vào hệ thống giới hạn byte. Ví dụ: =FINDB(" ", A1) kết hợp =LENB(A1) để đảm bảo tên khách hàng không vượt quá 50 byte trong database.

Ứng dụng thực tế với FIND

Hàm FIND kết hợp với các hàm khác tạo ra công cụ xử lý văn bản mạnh mẽ. Dưới đây là ba tình huống thường gặp nhất trong công việc hàng ngày.

Tách số điện thoại từ văn bản: Khi có dữ liệu “Liên hệ: 0912345678 – Phòng kinh doanh”, dùng công thức =MID(A1, FIND("09", A1), 10) để trích xuất số điện thoại 10 chữ số. Công thức tìm vị trí bắt đầu bằng “09” và lấy 10 ký tự tiếp theo.

Đếm số lần xuất hiện: Để đếm có bao nhiêu lần ký tự “a” xuất hiện trong văn bản, dùng: =(LEN(A1) - LEN(SUBSTITUTE(A1, "a", ""))). Công thức trừ độ dài chuỗi gốc cho độ dài chuỗi đã xóa tất cả “a”. Mặc dù không trực tiếp dùng FIND, nguyên lý tương tự.

Tách extension file: Với tên file “document.final.docx”, công thức =RIGHT(A1, LEN(A1) - FIND("~", SUBSTITUTE(A1, ".", "~", LEN(A1) - LEN(SUBSTITUTE(A1, ".", ""))))) trích xuất “.docx”. Công thức này tìm dấu chấm cuối cùng bằng cách thay thế dấu chấm cuối bằng ký tự đặc biệt.

Hạn chế cần lưu ý

Cả FIND và FINDB đều không hỗ trợ ký tự đại diện như dấu hỏi chấm hoặc dấu sao. Nếu cần tìm kiếm theo mẫu, phải dùng hàm SEARCH hoặc SEARCHB thay thế.

Phân biệt chữ hoa thường nghiêm ngặt: Đây có thể là ưu điểm hoặc nhược điểm tùy tình huống. Khi tìm mã sản phẩm “PRD” trong danh sách, FIND đảm bảo chỉ khớp chính xác “PRD” chứ không khớp “prd” hay “Prd”. Nhưng khi tìm tên người, sự phân biệt này gây phiền toái.

Không tìm được nhiều kết quả: FIND chỉ trả về vị trí xuất hiện đầu tiên. Để tìm tất cả vị trí xuất hiện của một chuỗi, cần viết công thức phức tạp hơn hoặc dùng VBA. Công thức đệ quy với start_num tăng dần có thể làm được nhưng cồng kềnh.

Lỗi với chuỗi rỗng: Khi find_text là chuỗi rỗng “”, FIND trả về 1 (vị trí ký tự đầu tiên). Hành vi này khác với mong đợi của nhiều người và có thể gây lỗi logic trong công thức phức tạp.

Đối với người dùng tiếng Việt

Tiếng Việt không nằm trong nhóm ngôn ngữ DBCS, do đó FINDB và FIND hoạt động giống hệt nhau. Mỗi ký tự tiếng Việt, kể cả có dấu như “ê”, “ơ”, “ư”, đều được đếm là một ký tự trong cả hai hàm.

Không cần FINDB: Với dữ liệu hoàn toàn tiếng Việt, việc dùng FINDB không mang lại lợi ích gì. Hàm FIND đơn giản hơn, dễ nhớ và cho kết quả tương đương. Chỉ nên dùng FINDB khi file Excel làm việc với dữ liệu đa ngôn ngữ có chứa tiếng Nhật, Trung hoặc Hàn.

Trường hợp ngoại lệ: Nếu công ty làm việc với đối tác Nhật Bản hoặc Trung Quốc, có thể nhận file Excel với dữ liệu mixed language. Trong trường hợp này, cần kiểm tra xem Excel đang dùng ngôn ngữ mặc định nào. Vào File > Options > Language > Office display language để xem và thay đổi.

XEM THÊM:  Tôi Xử Lý 5000 Dòng Dữ Liệu Trong 30 Giây Nhờ Hàm MID Excel

Kiểm tra ngôn ngữ Excel

Cài đặt ngôn ngữ trong Excel ảnh hưởng trực tiếp đến cách FINDB đếm byte. Người dùng cần biết cách kiểm tra và thay đổi thiết lập này.

Xem ngôn ngữ hiện tại: File > Options > Language hiển thị danh sách ngôn ngữ editing và display. Phần “Choose Editing Languages” cho biết ngôn ngữ nào đang active. Nếu có tiếng Nhật, Trung hoặc Hàn trong danh sách và được đánh dấu “default”, FINDB sẽ đếm theo byte kép.

Thêm ngôn ngữ DBCS: Click “Add additional editing languages”, chọn Japanese, Chinese (Simplified), Chinese (Traditional) hoặc Korean từ dropdown. Sau khi thêm, click “Set as Default” bên cạnh ngôn ngữ đó. Excel cần restart để thay đổi có hiệu lực.

Test nhanh: Tạo cell có văn bản “Hello世界”. Dùng công thức =LENB(A1) để kiểm tra. Nếu kết quả trả về lớn hơn số ký tự nhìn thấy, nghĩa là Excel đang đếm ký tự DBCS là 2 byte.

Tránh nhầm lẫn phổ biến

Nhiều người dùng mắc lỗi khi không hiểu rõ sự khác biệt giữa vị trí ký tự và vị trí byte. Điều này dẫn đến công thức sai khi kết hợp FIND với MID hoặc LEFT.

Lỗi kết hợp MID với FINDB: Công thức =MID(A1, FINDB("界", A1), 5) có thể cho kết quả không mong muốn nếu A1 chứa ký tự DBCS. Hàm MID đếm theo ký tự, nhưng FINDB trả về vị trí theo byte. Phải dùng =MIDB thay cho MID khi làm việc với FINDB.

Nhầm lẫn với SUBSTITUTE: Hàm SUBSTITUTE không có phiên bản “B” đếm theo byte. Khi kết hợp FINDB với SUBSTITUTE, cần cẩn thận vì SUBSTITUTE luôn đếm theo ký tự. Sự không đồng bộ này gây ra lỗi offset trong tính toán vị trí.

Quên điều kiện ngôn ngữ: FINDB chỉ hoạt động khác FIND khi đã bật ngôn ngữ DBCS làm mặc định. Nhiều người viết công thức với FINDB trên máy không có cài đặt ngôn ngữ châu Á, sau đó công thức không hoạt động đúng khi chuyển sang máy khác có cài tiếng Nhật.

Công thức nâng cao

Kết hợp nhiều hàm FIND trong một công thức giúp xử lý các tình huống phức tạp. Dưới đây là ba mẫu công thức hữu ích cho công việc thực tế.

Tách tên file không có extension: =LEFT(A1, FIND(".", A1) - 1) chỉ hoạt động nếu file có một dấu chấm. Với tên như “report.final.xlsx”, cần dùng: =LEFT(A1, FIND("~", SUBSTITUTE(A1, ".", "~", LEN(A1) - LEN(SUBSTITUTE(A1, ".", "")))) - 1). Công thức thay thế dấu chấm cuối cùng bằng ký tự đặc biệt để FIND tìm chính xác.

Lấy phần giữa hai ký tự: Để trích xuất văn bản giữa hai dấu ngoặc vuông [text], dùng: =MID(A1, FIND("[", A1) + 1, FIND("]", A1) - FIND("[", A1) - 1). Công thức tính độ dài bằng cách trừ vị trí ngoặc đóng cho vị trí ngoặc mở, rồi trừ 1.

Đếm từ trong câu: =(LEN(A1) - LEN(SUBSTITUTE(A1, " ", "")) + 1) đếm số từ bằng cách đếm số khoảng trắng cộng một. Công thức này chính xác với văn bản có một khoảng trắng giữa các từ. Nếu có nhiều khoảng trắng liên tiếp, cần dùng công thức phức tạp hơn với TRIM.

Hiệu suất so với các phương pháp khác

Hàm FIND chạy nhanh hơn đáng kể so với việc dùng VBA để tìm kiếm vị trí ký tự. Trong bảng tính 10,000 dòng, FIND hoàn thành tức thì trong khi VBA loop mất 2-3 giây.

So với Power Query: Power Query có hàm Text.PositionOf tương tự FIND. Tuy nhiên, Power Query chỉ thực thi khi refresh, không tự động update khi cell thay đổi. Với dữ liệu cần update liên tục, FIND trong công thức Excel linh hoạt hơn.

So với Regular Expressions: VBA hỗ trợ regex thông qua RegExp object, mạnh hơn FIND nhiều về khả năng pattern matching. Nhưng regex chậm hơn và phức tạp hơn cho những tác vụ đơn giản như tìm vị trí một chuỗi cố định. FIND là lựa chọn tốt hơn khi không cần pattern phức tạp.

Tương thích phiên bản

Cả FIND và FINDB đều có từ Excel 97 trở về trước. Hai hàm này hoạt động giống nhau trên Excel 2007, 2010, 2013, 2016, 2019, Excel 2021 và Microsoft 365.

Excel Online: Cả hai hàm đều hỗ trợ đầy đủ trên Excel for Web. Tuy nhiên, thiết lập ngôn ngữ DBCS phụ thuộc vào cài đặt browser và hệ điều hành, không phải cài đặt Excel. Điều này có thể gây khác biệt kết quả giữa Excel desktop và Excel Web cho FINDB.

Excel Mobile: Excel trên iOS và Android hỗ trợ cả FIND và FINDB. Cài đặt ngôn ngữ của thiết bị di động quyết định cách FINDB đếm byte. Công thức viết trên desktop có thể cho kết quả khác trên mobile nếu ngôn ngữ hệ thống khác nhau.

XEM THÊM:  Hàm REPT Trong Excel: Tạo Biểu Đồ Ngang Trong Ô Chỉ Với 1 Công Thức

Sử dụng hiệu quả với Excel 365

Excel 365 giới thiệu dynamic arrays và hàm mới như FILTER, SORT. Kết hợp FIND với các hàm này tạo công thức mạnh mẽ không cần VBA.

Tìm tất cả email trong danh sách: =FILTER(A2:A100, ISNUMBER(FIND("@", A2:A100))) trả về mảng các cell chứa ký tự @. Công thức này tự động mở rộng kết quả xuống nhiều dòng mà không cần kéo copy công thức.

Sắp xếp theo vị trí ký tự: =SORT(A2:A100, FIND(" ", A2:A100), 1) sắp xếp danh sách họ tên theo vị trí khoảng trắng đầu tiên. Những tên có khoảng trắng sớm hơn (họ ngắn) sẽ lên đầu danh sách.

Lọc theo extension file: =FILTER(A2:A100, FIND(".docx", A2:A100) > 0) lấy tất cả file có đuôi .docx. Phải bọc trong ISNUMBER nếu muốn tránh lỗi khi không tìm thấy: =FILTER(A2:A100, ISNUMBER(FIND(".docx", A2:A100))).

Lựa chọn giữa FIND và SEARCH

Ngoài FIND và FINDB, Excel còn có SEARCH và SEARCHB. Sự khác biệt chính là SEARCH không phân biệt chữ hoa thường và hỗ trợ ký tự đại diện.

Khi nào dùng SEARCH: Nếu cần tìm “excel” trong văn bản có thể là “Excel”, “EXCEL” hoặc “excel”, dùng SEARCH thay FIND. Công thức =SEARCH("excel", A1) sẽ tìm thấy cả ba biến thể.

Khi nào dùng FIND: Khi cần độ chính xác tuyệt đối về chữ hoa thường, FIND là lựa chọn duy nhất. Ví dụ: phân biệt mã sản phẩm “PRD001” với “prd001” vì chúng là hai sản phẩm khác nhau.

Pattern matching với SEARCH: SEARCH cho phép dùng ? thay cho một ký tự bất kỳ và * thay cho chuỗi ký tự bất kỳ. Công thức =SEARCH("file?.txt", A1) tìm “file1.txt”, “fileA.txt”, v.v. FIND không có khả năng này.

Tối ưu hóa công thức chứa FIND

Công thức phức tạp có nhiều hàm FIND lồng nhau chạy chậm với dữ liệu lớn. Có một số kỹ thuật để cải thiện hiệu suất.

Tránh tính toán trùng lặp: Thay vì =LEFT(A1, FIND(" ", A1) - 1) & " " & RIGHT(A1, LEN(A1) - FIND(" ", A1)), tạo cell helper lưu =FIND(" ", A1) rồi tham chiếu. Điều này đặc biệt quan trọng với công thức array áp dụng cho hàng nghìn dòng.

Dùng IFERROR thay nested IF: =IFERROR(FIND("@", A1), 0) ngắn gọn và nhanh hơn =IF(ISERROR(FIND("@", A1)), 0, FIND("@", A1)). IFERROR được tối ưu hóa trong Excel 2007 trở đi.

Xem xét LET function: Excel 365 có hàm LET cho phép đặt tên biến tạm. =LET(pos, FIND(" ", A1), LEFT(A1, pos-1) & "_" & MID(A1, pos+1, 999)) tính FIND một lần và dùng lại biến pos nhiều lần.

Giải pháp thay thế trong Excel 365

Excel 365 bổ sung các hàm văn bản mới có thể thay thế một số use case của FIND.

TEXTBEFORE và TEXTAFTER: =TEXTBEFORE(A1, "@") lấy phần trước ký tự @, tương đương =LEFT(A1, FIND("@", A1) - 1) nhưng ngắn gọn hơn. =TEXTAFTER(A1, "@") lấy phần sau.

TEXTSPLIT: =TEXTSPLIT(A1, " ") tách văn bản thành nhiều cell theo khoảng trắng. Công thức này thay thế các kỹ thuật phức tạp với FIND, MID, LEFT, RIGHT.

Khi vẫn cần FIND: TEXTBEFORE và TEXTAFTER chỉ tách theo delimiter đơn giản. Nếu cần logic phức tạp như “lấy phần giữa dấu ngoặc thứ hai và thứ ba”, vẫn phải dùng FIND. TEXTSPLIT cũng không có tùy chọn giữ lại delimiter hoặc xử lý multiple delimiters liên tiếp.

Kết hợp với các hàm khác

FIND hiếm khi đứng độc lập mà thường kết hợp với hàm xử lý chuỗi khác. Việc hiểu rõ cách kết hợp giúp xử lý dữ liệu hiệu quả hơn.

FIND + LEFT: Lấy phần trước một ký tự. =LEFT(A1, FIND("@", A1) - 1) trích username từ email.

FIND + RIGHT: Lấy phần sau một ký tự. =RIGHT(A1, LEN(A1) - FIND("@", A1)) trích domain từ email.

FIND + MID: Lấy phần giữa. =MID(A1, FIND("[", A1) + 1, FIND("]", A1) - FIND("[", A1) - 1) lấy nội dung trong ngoặc vuông.

FIND + SUBSTITUTE + LEN: Tìm vị trí ký tự xuất hiện lần thứ N. =FIND("~", SUBSTITUTE(A1, ",", "~", 3)) tìm vị trí dấu phẩy thứ ba bằng cách thay thế dấu phẩy thứ ba thành ký tự đặc biệt.

Chuẩn bị dữ liệu trước khi dùng FIND

Dữ liệu thô thường có khoảng trắng thừa, ký tự đặc biệt làm FIND trả về kết quả sai. Làm sạch dữ liệu trước khi áp công thức giúp tránh lỗi.

Loại bỏ khoảng trắng thừa: =TRIM(A1) xóa khoảng trắng đầu, cuối và giữa (chỉ giữ lại một khoảng trắng). Dùng TRIM trước khi áp FIND để tìm vị trí chính xác.

Chuyển về chữ hoa hoặc chữ thường: =UPPER(A1) hoặc =LOWER(A1) trước khi dùng FIND đảm bảo tìm kiếm nhất quán. Ví dụ: =FIND("@", LOWER(A1)) tìm email bất kể người nhập viết hoa hay thường.

Kiểm tra ký tự không nhìn thấy: Dữ liệu copy từ web hoặc PDF có thể chứa ký tự đặc biệt không hiển thị. =LEN(A1) = LEN(TRIM(A1)) kiểm tra có khoảng trắng thừa không. =CLEAN(A1) xóa các ký tú điều khiển không in được.

Lựa chọn cuối cùng

Đối với hầu hết người dùng Excel tại Việt Nam, hàm FIND đáp ứng đầy đủ nhu cầu tìm kiếm vị trí ký tự. FINDB chỉ thực sự cần thiết trong môi trường làm việc đa quốc gia với dữ liệu tiếng Nhật, Trung hoặc Hàn. Khi làm việc với văn bản tiếng Việt hoặc tiếng Anh, FIND và FINDB cho kết quả giống hệt nhau. Người dùng nên ưu tiên FIND vì tính đơn giản và dễ nhớ. Chỉ chuyển sang FINDB khi có yêu cầu cụ thể về đếm byte từ hệ thống hoặc đối tác sử dụng ngôn ngữ DBCS.

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 *