Chào các bạn,
Mình thường xuyên phải làm việc với các file Excel có dung lượng lớn, chứa hàng chục nghìn dòng dữ liệu. Gần đây, mình gặp phải một vấn đề khá khó chịu khi sử dụng hàm VLOOKUP để tra cứu thông tin. Cụ thể, khi tra cứu một mã hàng hoặc một tên không có trong danh sách gốc, thay vì trả về #N/A một cách bình thường, file của mình lại bị treo hoặc xử lý rất chậm, đôi khi còn báo lỗi không phản hồi.
Sau một hồi mày mò và tìm hiểu, mình đã phát hiện ra một vài nguyên nhân và cách khắc phục khá hiệu quả, muốn chia sẻ lại cho mọi người để tránh gặp phải tình huống tương tự:
- Nguyên nhân: Khi
VLOOKUPkhông tìm thấy giá trị, nó sẽ cố gắng tìm kiếm trong toàn bộ phạm vi dữ liệu, điều này gây tốn tài nguyên, đặc biệt với file lớn. - Cách khắc phục 1: Sử dụng
IFERROR
Đây là cách đơn giản và phổ biến nhất. Thay vì đểVLOOKUPtrả về#N/A, ta bọc nó trong hàmIFERRORđể trả về một giá trị khác (ví dụ: chuỗi trống""hoặc thông báo"Không tìm thấy").=IFERROR(VLOOKUP(A2, Sheet2!$A$1:$B$10000, 2, FALSE), "Không tìm thấy") - Cách khắc phục 2: Sử dụng kết hợp
MATCHvàINDEX
HàmINDEXvàMATCHthường được đánh giá là linh hoạt và hiệu quả hơnVLOOKUP, đặc biệt với dữ liệu lớn.MATCHsẽ tìm vị trí của giá trị cần tra cứu, vàINDEXsẽ trả về giá trị tại vị trí đó. NếuMATCHkhông tìm thấy, nó sẽ trả về#N/A, và ta có thể xử lý bằngIFERROR.=IFERROR(INDEX(Sheet2!$B$1:$B$10000, MATCH(A2, Sheet2!$A$1:$A$10000, 0)), "Không tìm thấy") - Lưu ý thêm:
- Đảm bảo cột tra cứu trong bảng dữ liệu (cột đầu tiên của phạm vi) đã được sắp xếp nếu bạn dùng
VLOOKUPvới đối số thứ 4 làTRUE(mặc dù khuyến khích dùngFALSEcho tra cứu chính xác). - Kiểm tra định dạng dữ liệu giữa hai bảng, tránh trường hợp số bị lưu dưới dạng text hoặc ngược lại.
- Đảm bảo cột tra cứu trong bảng dữ liệu (cột đầu tiên của phạm vi) đã được sắp xếp nếu bạn dùng
Hy vọng chia sẻ này hữu ích cho các bạn. Nếu có cách nào khác hay hơn, mọi người cùng thảo luận nhé!