Robin đã hỏi liệu có cách nào để thực hiện một hàm VLOOKUP phân biệt chữ hoa chữ thường không.

Bảng / phạm vi tra cứu của cô ấy có các mục nhập giống nhau (AbC và aBC) với sự khác biệt duy nhất là trường hợp của các chữ cái. Cô ấy không thể thay đổi các giá trị (đặt tất cả chúng là chữ hoa hoặc chữ thường) vì các giá trị duy nhất rất quan trọng.

Hàm VLOOKUP không có cách nào để kiểm tra trường hợp thông tin; nó không phân biệt chữ hoa chữ thường. Tuy nhiên, có một số cách bạn có thể khắc phục khuyết điểm này. Một cách là sử dụng hàm CODE để tạo một cột trung gian có thể được tìm kiếm bằng hàm VLOOKUP. Giả sử rằng dữ liệu ban đầu của bạn nằm trong cột B, bạn có thể đặt công thức sau vào ô A1 và sao chép nó xuống cột:

=CODE(LEFT(B1,1))&"."&CODE(MID(B1,2,1))&"."&CODE(RIGHT(B1,1))

Công thức này xem xét ba ký tự đầu tiên của bất kỳ ký tự nào trong ô B1 và ​​chuyển đổi các ký tự đó thành mã ký tự thập phân được phân tách bằng dấu chấm. Do đó, nếu A1 chứa “ABC” thì B1 sẽ chứa “65,66,67”.

Giả sử rằng giá trị bạn muốn định vị nằm trong ô C1, bạn có thể sử dụng giá trị sau làm công thức VLOOKUP của mình:

=VLOOKUP(CODE(LEFT(C1,1))&"."&CODE(MID(C1,2,1))&"."& CODE(MID(C1,3,1)), A:B,2,)

Một cách tiếp cận khác là sử dụng hàm EXACT để xác định vị trí của những gì bạn đang tìm kiếm. Phương pháp này hoàn toàn không sử dụng hàm VLOOKUP, thay vào đó dựa vào hàm INDEX. Công thức giả định rằng các ô bạn muốn so sánh nằm trong cột A và những gì bạn muốn trả về là ô tương ứng trong cột B.

=IF(MIN(IF(EXACT(C1,$A$1:$A$100),ROW($A$1:$A$100)))=0,NA(), INDEX($B$1:$B$100,MIN(IF(EXACT(C1,$A$1:$A$100),ROW($A$1:$A$100)))))

Công thức này cần được nhập dưới dạng công thức mảng (Shift + Ctrl + Enter). Phần đầu tiên của công thức (ví dụ đầu tiên của EXACT) so sánh C1 (những gì bạn đang tìm kiếm) với từng giá trị trong phạm vi A1: A100. Vì đây là công thức mảng, trong trường hợp này, bạn có 100 giá trị Đúng / Sai tùy thuộc vào việc có khớp chính xác hay không. Nếu có một kết quả phù hợp, thì hàm ROW đầu tiên trả về hàng của kết quả phù hợp và hàm INDEX được sử dụng để lấy giá trị từ cột B trong hàng đó.

Trong một số trường hợp, bạn có thể muốn tạo hàm do người dùng xác định của riêng mình để thực hiện việc tra cứu cho bạn. Sau đây là một ví dụ về macro như vậy:

Function CaseVLook(compare_value, table_array As Range, _   Optional col_index As Integer = 1)

Dim c As Range     Dim rngColumn1 As Range

Application.Volatile

Set rngColumn1 = table_array.Columns(1)

CaseVLook = "Not Found"



'Loop first column     For Each c In rngColumn1.Cells         If c.Value = compare_value Then             CaseVLook = c.Offset(0, col_index - 1).Value             Exit For         End If     Next c End Function

Để sử dụng macro, chỉ cần gọi hàm với giá trị bạn muốn tìm (giả sử ô C1), phạm vi có cột đầu tiên sẽ được tìm kiếm (chẳng hạn như A: B) và tùy chọn độ lệch của cột trong phạm vi đó, như tại đây:

=CaseVLook(C1,A:B,2)

Bạn có thể tìm thấy một số cách tiếp cận bổ sung tại bài viết Cơ sở Kiến thức sau:

http://support.microsoft.com/kb/214264

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (6833) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: