HÀM VLOOKUP

Quảng cáo

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
10,790
Được thích
13,267
Điểm
4,868
Thay số 1 thì nó ra kết quả nhưng ko chính xác bác à, lúc đó H7 đúng bằng 1 nhưng H8 sai (=3). Có điều lạ là khi mở ở chế độ Protect View thì kết quả tất cả đêu đúng. (Hoặc mở trên trang tính của điện thoại Android thì bình thường.
Bảng tính không thể nói chuyện chế độ, điện thoại hay máy tính gì cả. Công thức đúng thì phải ra đúng kết quả.
Chỉ là bạn không biết số 1 và 0 khác nhau ra sao thôi?
 

saobekhonglac

Thành viên mới
Tham gia ngày
1 Tháng mười một 2008
Bài viết
1,497
Được thích
1,390
Điểm
1,168
Nơi ở
Long An - HCM
VLOOKUP

Hàm VLOOKUP sẽ dò tìm một hàng (Row) chứa giá trị mà bạn cần tìm ở cột đầu tiên (bên trái) của một bảng dữ liệu (chữ V trong VLOOKUP có nghĩa là Vertical), nếu tìm thấy, nó sẽ tìm tiếp trong hàng này, và sẽ lấy giá trị ở cột mà bạn đã chỉ định trước.

Cú pháp: =VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])

lookup_value
: Giá trị dùng để tìm kiếm trong cột đầu tiên của table_array, giá trị này có thể là một số, một chuỗi, hoặc là một tham chiếu

table_array: Bảng dùng để dò tìm, có thể là một vùng tham chiếu hoặc là tên (Name) của một vùng đã được đặt tên

col_index_num: Số thứ tự của các cột trong table_array, chứa kết quả mà bạn muốn tìm kiếm. col_index_num: Số thứ tự này được tính từ trái sang phải (cột chứa lookup_value là cột thứ nhất)

range_lookup: Là một giá trị kiểu Boolean, để chỉ kiểu tìm kiếm: chính xác hay tương đối.
• TRUE (hoặc 1 là mặc định): Là kiểu dò tìm tương đối VLOOKUP sẽ tìm giá trị lookup_value đầu tiên mà nó tìm được trong cột đầu tiên của table_array. Trong trường hợp không tìm ra, nó sẽ trả về giá trị lớn nhất mà nhỏ hơn lookup_value
• FALSE (hoặc 0): Là kiểu dò tìm chính xác VLOOKUP sẽ tìm chính xác giá trị lookup_value trong cột đầu tiên của table_array. Trong trường hợp không có, hoặc lookup_value nhỏ hơn giá trị nhỏ nhất trong cột đầu tiên của table_array, nó sẽ báo lỗi #N/A!

Lưu ý:
• Để có kết quả chính xác khi range_lookup = TRUE, bạn phải sắp xếp các giá trị các giá trị trong cột đầu tiên của table_array từ nhỏ đến lớn.
• Nếu cột đầu tiên của table_array chứa các giá trị kiểu Text, bạn có thể dùng các ký tự đại diện cho lookup_value (dấu * đại diện cho nhiều ký tự / hoặc dấu ? đại diện cho một ký tự)
• Nếu lookup_value nhỏ hơn giá trị nhỏ nhất trong cột đầu tiên của table_array, hàm sẽ báo lỗi #N/A!
• Lỗi này thường gặp khi bạn gõ dư một khoảng trắng ở cuối lookup_value
• Nếu không tìm thấy lookup_value khi range_lookup = FALSE, hàm sẽ báo lỗi #N/A!
• Nếu col_index_num nhỏ hơn 1, hàm sẽ báo lỗi #VALUE!, còn nếu col_index_num lớn hơn số cột trong table_array, hàm sẽ báo lỗi #REF!

Ví dụ:
View attachment 228782
Sao không hướng dẫn đổi số thứ tự cột sang hàm động để dễ xử lý khi dò tìm nhiều cột, chứ thay đổi thủ công sẽ mất thời gian sau này khi muốn thay đổi cột cần lấy kết quả,
 

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
10,790
Được thích
13,267
Điểm
4,868
Sao không hướng dẫn đổi số thứ tự cột sang hàm động để dễ xử lý khi dò tìm nhiều cột, chứ thay đổi thủ công sẽ mất thời gian sau này khi muốn thay đổi cột cần lấy kết quả,
Bạn nhìn sai vấn đề rồi. VLookup chủ yếu là tĩnh. Cái đối số thứ hai của nó, "table_array", chủ yếu là một bảng tĩnh.
Việc đối số hứ ba, "col_index_num" cần uyển chuyển hay không nằm trong thủ thuật cải tiến.

Nếu cần công thức có nhiều tính chất động thì nên dùng cách khác tốt hơn Lookup, Index/Match, ... Đặc biệt Offset thì rất động.
 

mrdragonvn

Thành viên mới
Tham gia ngày
14 Tháng sáu 2010
Bài viết
3
Được thích
0
Điểm
0
Bảng tính không thể nói chuyện chế độ, điện thoại hay máy tính gì cả. Công thức đúng thì phải ra đúng kết quả.
Chỉ là bạn không biết số 1 và 0 khác nhau ra sao thôi?
Em chỉ hiểu là 0 phải tìm đúng giá trị, mà so sánh thì bên table_array vẫn có giá trị đúng để so sánh. Ảnh chụp khi em mở file trên điện thoại đây ạ. Và nếu có thể bác sửa giúp em để không báo lỗi được ko ạ?
 

File đính kèm

  • _20201202_105527.JPG
    _20201202_105527.JPG
    55.2 KB · Đọc: 19

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
10,790
Được thích
13,267
Điểm
4,868
Em chỉ hiểu là 0 phải tìm đúng giá trị, mà so sánh thì bên table_array vẫn có giá trị đúng để so sánh. ...
"phải tìm đúng giá trị" chỉ là 1/2 của cái khác giữa 0 và 1. Điểm khác còn lại quan trọng hơn. Và đó là lý da tại sao bạn bị sai.
Chú: nếu không hiểu rõ điều kiện của 1 thì luôn luôn dùng 0. Đừng bao giờ dùng 1, vì kết quả sẽ sai.
 

batman1

Thành viên gạo cội
Tham gia ngày
8 Tháng chín 2014
Bài viết
3,901
Được thích
6,100
Điểm
2,568
Thay số 1 thì nó ra kết quả nhưng ko chính xác bác à, lúc đó H7 đúng bằng 1 nhưng H8 sai (=3).
Khi tìm gần đúng (1) thì cột dò phải được sắp xếp tăng dần (không giảm), nhưng cột dò của bạn không thỏa vì K10 > K11.


Còn tại sao không tìm được chính xác thì tôi cũng tò mò.
 

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
10,790
Được thích
13,267
Điểm
4,868
...Còn tại sao không tìm được chính xác thì tôi cũng tò mò.
Tôi cũng tò mò lắm.
Tuy nhiên tôi đổ lỗi cho hàm MROUND. Nhớ mang máng có đọc ở đâu đấy về vấn đề với hàm này.
(chưa tìm ra bài ấy. Bác có rảnh thì tìm thử)
 

batman1

Thành viên gạo cội
Tham gia ngày
8 Tháng chín 2014
Bài viết
3,901
Được thích
6,100
Điểm
2,568
Tuy nhiên tôi đổ lỗi cho hàm MROUND. Nhớ mang máng có đọc ở đâu đấy về vấn đề với hàm này.
Tôi cũng nghi vì nếu nhậ̣p tay, hoặc trong trường hợp cụ̣ thể này thì dùng ROUND, thì kết quả đúng.
(... Bác có rảnh thì tìm thử)
"Cái này" không phải đam mê, cũng không phải công việc, nên tôi không ham. :D
 

vinh19291

Thành viên mới
Tham gia ngày
29 Tháng ba 2013
Bài viết
19
Được thích
3
Điểm
303
Tuổi
29
Em có file này, 2 giá trị giống hệt nhau nhưng tìm lại không ra, nhờ mọi người giúp đỡ
 

File đính kèm

  • Book1.xlsx
    9.8 KB · Đọc: 9

batman1

Thành viên gạo cội
Tham gia ngày
8 Tháng chín 2014
Bài viết
3,901
Được thích
6,100
Điểm
2,568
Em có file này, 2 giá trị giống hệt nhau nhưng tìm lại không ra, nhờ mọi người giúp đỡ
A1 và D1 không như nhau. A1 chứa ký tự unicode dựng sẵn (Len(A1) = 18), còn D1 chứa ký tự unicode tổ hợp (Len(D1) = 19)..

1.
Nhìn hình

excel.jpg


sẽ thấy "ả" trong A1 là ký tự unicode dựng sẵn có điểm mã là 7843 (thập phân) = 1EA3 (hex). Ký tự đó có tên là Latin Small Letter A with Hook Above

kytuahoi.jpg


"ả" trong D1 là tổ hợp - sự ghép 2 ký tự unicode: ký tự "a" (có tên là Latin Small Letter A) có điểm mã là 97 (thập phân) = 0061 (hex) và ký tự dấu hỏi (có tên là Combining Hook Above) có điểm mã là 777 (thập phân) = 0309 (hex)

kytua.jpg

dau hoi.jpg


2. Hãy copy A1 và dán vào D1 (lúc này A1 và D1 y hệt như nhau) thì sẽ thấy D2 có kết quả đẹp.
 

vinh19291

Thành viên mới
Tham gia ngày
29 Tháng ba 2013
Bài viết
19
Được thích
3
Điểm
303
Tuổi
29
A1 và D1 không như nhau. A1 chứa ký tự unicode dựng sẵn (Len(A1) = 18), còn D1 chứa ký tự unicode tổ hợp (Len(D1) = 19)..

1.
Nhìn hình

View attachment 252947

sẽ thấy "ả" trong A1 là ký tự unicode dựng sẵn có điểm mã là 7843 (thập phân) = 1EA3 (hex). Ký tự đó có tên là Latin Small Letter A with Hook Above

View attachment 252944

"ả" trong D1 là tổ hợp - sự ghép 2 ký tự unicode: ký tự "a" (có tên là Latin Small Letter A) có điểm mã là 97 (thập phân) = 0061 (hex) và ký tự dấu hỏi (có tên là Combining Hook Above) có điểm mã là 777 (thập phân) = 0309 (hex)

View attachment 252945
View attachment 252946

2. Hãy copy A1 và dán vào D1 (lúc này A1 và D1 y hệt như nhau) thì sẽ thấy D2 có kết quả đẹp.
Với trường hợp này thì lỗi xuất phát từ đâu và xử lý sao cho nhanh anh nhỉ, chứ copy từng giá trị thì quá lâu. Mà cho em hỏi là em có dùng hàm If để so sánh 2 ô này và nó cho giá trị bằng nhau, vậy nhờ anh giải thích rõ hơn về cách hoạt động của hàm if trong trường hợp này./
 

batman1

Thành viên gạo cội
Tham gia ngày
8 Tháng chín 2014
Bài viết
3,901
Được thích
6,100
Điểm
2,568
Với trường hợp này thì lỗi xuất phát từ đâu và xử lý sao cho nhanh anh nhỉ, chứ copy từng giá trị thì quá lâu. Mà cho em hỏi là em có dùng hàm If để so sánh 2 ô này và nó cho giá trị bằng nhau, vậy nhờ anh giải thích rõ hơn về cách hoạt động của hàm if trong trường hợp này./
Tôi ghi rõ nguyên nhân

A1 và D1 không như nhau
...
2. Hãy copy A1 và dán vào D1 (lúc này A1 và D1 y hệt như nhau) thì sẽ thấy D2 có kết quả đẹp.

mà bạn còn hỏi cách khắc phục sao? Chịu khó suy nghĩ chút là ra thôi.

Nguyên nhân 2 chuỗi khác nhau dù mắt và IF "nhìn" như nhau là do 1 chuỗi chứa unicode dựng sẵn còn chuỗi kia chứa unicode tổ hợp. Độ lớn của chúng cũng khác nhau - một chuỗi 18 ký tự còn chuỗi kia có 19 ký tự. Vậy thì cách chữa là đưa chúng cùng về dựng sẵn hoặc cùng về tổ hợp. Thế thôi.

Cách chữa:
1. Đưa về cùng 1 loại unicode. Tôi đề nghị đưa về unicode dựng sẵn. Hãy dùng các công cụ sẵn có, có thể là Unikey (???), để chuyển dữ liệu nguồn (những chỗ như A1) về unicode dựng sẵn.

2. Ở những chỗ như D1 phải gõ unicode DỰNG SẴN. Nếu dùng Unikey thì phải chọn Bảng mã = Unicode (tức dựng sẵn), không chọn Bảng mã = Unicode tổ hợp (tức tổ hợp). Khi dữ liệu nguồn và dữ liệu cần kiểm tra cùng loại thì sẽ không có lỗi.

unikey.jpg
 
Lần chỉnh sửa cuối:
Quảng cáo
Top Bottom