Chào các bạn, mình là thành viên mới của diễn đàn. Hôm nay mình muốn chia sẻ một kinh nghiệm nhỏ khi xử lý lỗi #N/A với hàm VLOOKUP mà mình vừa gặp phải.
Thông thường, lỗi #N/A khi dùng VLOOKUP là do giá trị tìm kiếm không có trong bảng dữ liệu. Tuy nhiên, trường hợp của mình phức tạp hơn một chút. Mình cần tìm kiếm một mã sản phẩm duy nhất, nhưng trong bảng dữ liệu lại có nhiều dòng cùng mã sản phẩm đó, và mình chỉ muốn lấy thông tin từ dòng đầu tiên xuất hiện.
Cách giải quyết thông thường là thêm một cột phụ để tạo mã duy nhất, nhưng mình muốn hạn chế thêm cột phụ để giữ cho bảng tính gọn gàng. Sau một hồi tìm tòi, mình đã tìm ra cách kết hợp VLOOKUP với MIN và IF để giải quyết vấn đề này.
Công thức có dạng như sau:
=VLOOKUP(A2, IF({1,0}, RangeMaSP, RangeDuLieuCanLay), 2, FALSE)Trong đó:
A2là ô chứa mã sản phẩm cần tìm.RangeMaSPlà cột chứa mã sản phẩm trong bảng dữ liệu.RangeDuLieuCanLaylà cột chứa dữ liệu bạn muốn lấy về.
Cách này sẽ tạo ra một mảng ảo, trong đó IF({1,0},...) sẽ ưu tiên lấy giá trị từ RangeDuLieuCanLay nếu mã sản phẩm trùng khớp. Tuy nhiên, cách này chưa thực sự xử lý được trường hợp có nhiều mã trùng.
Cách tốt hơn mà mình áp dụng là kết hợp INDEX và AGGREGATE:
=INDEX(CộtDữLiệuCầnLấy, AGGREGATE(15, 6, (ROW(CộtMaSP)-ROW(INDEX(CộtMaSP,1,1))+1)/(CộtMaSP=ÔTìmKiếm), 1))Giải thích công thức:
CộtDữLiệuCầnLấy: Vùng chứa kết quả bạn muốn trả về.CộtMaSP: Vùng chứa mã sản phẩm để so sánh.ÔTìmKiếm: Ô chứa mã sản phẩm bạn đang tìm.AGGREGATE(15, 6, ..., 1): Hàm này tìm số thứ tự dòng nhỏ nhất (15là Small,6là bỏ qua lỗi) của mã sản phẩm khớp vớiÔTìmKiếmtrongCộtMaSP.ROW(CộtMaSP)-ROW(INDEX(CộtMaSP,1,1))+1: Tạo ra một dãy số thứ tự của các dòng trongCộtMaSP.
Hy vọng chia sẻ này hữu ích cho các bạn nào đang gặp tình huống tương tự. Nếu có cách nào hay hơn, mọi người cùng thảo luận nhé!