Nhờ ai giải thích dùm mình hàm Lookup (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

viettn5998

Thành viên mới
Tham gia
1/5/09
Bài viết
19
Được thích
1
Mình dùng hàm lookup cũng tương đối nhưng không hiểu sao phát sinh lỗi. Nhờ các bạn xem dùm file gởi kèm
 

File đính kèm

Mở file ra nó thong báo rõ ràng là có link ra ngoài workbook. Lỗi này là bình thường thôi.
 
Trích help
Important: The values in lookup_vector must be placed in ascending order: ..., -2, -1, 0, 1, 2, ..., A-Z, FALSE, TRUE, otherwise, LOOKUP might not return the correct value. Uppercase and lowercase text are equivalent.
Rõ ràng $C$5:$C$112 không được sắp xếp.

Khắc phục
H115
hoặc
Mã:
=LOOKUP(2,1/($C$5:$C$112=F115),$H$5:$H$112)
hoặc
Mã:
=INDEX($H$5:$H$112,MATCH(F115,$C$5:$C$112,0))

N115 tương tự
 
...
Rõ ràng $C$5:$C$112 không được sắp xếp.
Tôi nhớ là nếu không sắp xếp thì sẽ ra kết quả sai. Ở đây thớt nói là "phát sinh lỗi" mờ.
(mà cũng có thể tôi "hiểu" sai. Kiểu nói chuyện của mấy người này ghê bỏ bố, cái gì cũng gọi là "lỗi" tuốt)
 
Tôi nhớ là nếu không sắp xếp thì sẽ ra kết quả sai. Ở đây thớt nói là "phát sinh lỗi" mờ.
might not return the correct value có nghĩa là có thể không trả về giá trị đúng.

Tức hoặc trả về giá trị đúng, hoặc trả về giá trị không đúng. Giá trị không đúng có thể là giá trị sai hoặc giá trị lỗi.

1. Giá trị đúng

dung.JPG

2. Giá trị sai

sai.JPG

3. Giá trị lỗi. Chủ thớt nhận được giá trị lỗi.

loi.JPG
 
Trích help

Rõ ràng $C$5:$C$112 không được sắp xếp.

Khắc phục
H115
hoặc
Mã:
=LOOKUP(2,1/($C$5:$C$112=F115),$H$5:$H$112)
hoặc
Mã:
=INDEX($H$5:$H$112,MATCH(F115,$C$5:$C$112,0))

N115 tương tự
Mình đã copy hướng dẫn của bạn mọi thứ đã Ok. Bạn giải thích kỹ hơn cách khắc phục hàm lookup ở đoạn này 2,1/($C$5:$C$112=F115) với.
 
Mình đã copy hướng dẫn của bạn mọi thứ đã Ok. Bạn giải thích kỹ hơn cách khắc phục hàm lookup ở đoạn này 2,1/($C$5:$C$112=F115) với.
$C$5:$C$112=F115 trả về mảng mà tương ứng với các ô ở cột C = F115 thì ô ở mảng có giá trị TRUE, còn tương ứng với các ô ở cột C <> F115 thì ô ở mảng có giá trị FALSE.

=> 1/($C$5:$C$112=F115) trả về mảng mà tương ứng với các ô ở cột C = F115 thì ô ở mảng có giá trị 1 (1/TRUE = 1), còn tương ứng với các ô ở cột C <> F115 thì ô ở mảng có giá trị #DIV/0! (1/FALSE = 1/0 = #DIV/0!).

Tóm lại mảng 1/($C$5:$C$112=F115) chứa các giá trị 1 (nếu có) và các giá trị #DIV/0! (nếu có).

LOOKUP lờ các giá trị lỗi, chỉ xét các giá trị <> lỗi. Vậy khi các giá trị #DIV/0! bị lờ đi, LOOKUP coi chúng là không khí, là không tồn tại, thì mảng chỉ còn toàn giá trị 1. Mảng như thế là được sắp xếp. Nhưng LOOKUP tìm giá trị 2, không có trong mảng. Vậy nó trả về giá trị 1.

Mà là giá trị 1 cuối cùng vì bản chất của tìm kiếm nhị phân nó là vậy (thực ra LOOKUP không kiểm tra xem mảng có được sắp xếp hay không. Nó coi như là mảng đã được sắp xếp tăng dần và nó dùng tìm kiếm nhị phân). Chính vì LOOKUP không kiểm tra mà chỉ coi là mảng đã được sắp xếp nên nó nói là trách nhiệm của người dùng là phải đảm bảo là mảng được sắp xếp. Ngược lại nó không đảm bảo là kết quả sẽ đúng.
lookup.JPG.
Cấu trúc =LOOKUP(2; 1/(...) ... thường được dùng khi có nhiều giá trị thỏa ở mảng dò mà ta muốn lấy giá trị cuối cùng.
 
might not return the correct value có nghĩa là có thể không trả về giá trị đúng.

Tức hoặc trả về giá trị đúng, hoặc trả về giá trị không đúng. Giá trị không đúng có thể là giá trị sai hoặc giá trị lỗi.
...
Xin lỗi mọi người.
Tôi muốn nói "kết quả không đáng tin cậy". Và vì tôi quen với lối lý luận "không đáng tin cậy coi như sai" thành thử nói hớ hênh.
 
Xin lỗi mọi người.
Tôi muốn nói "kết quả không đáng tin cậy". Và vì tôi quen với lối lý luận "không đáng tin cậy coi như sai" thành thử nói hớ hênh.
Thực ra là sự lắt léo thôi.

Excel trả về #N/A. Đấy có là giá trị đúng của công thức không? Rõ ràng là giá trị đúng. Vì nếu không thì giá trị nào mới là giá trị đúng của công thức? 1, 2, 600, ...? Không có giá trị nào khác là kết quả đúng của công thức trong trường hợp được nêu. Chỉ có #N/A là giá trị đúng của công thức. Nhưng giá trị ĐÚNG này của công thức lại có nghĩa là công thức đã được sử dụng SAI. :D
 
Thực ra là sự lắt léo thôi.

Excel trả về #N/A. Đấy có là giá trị đúng của công thức không? Rõ ràng là giá trị đúng. Vì nếu không thì giá trị nào mới là giá trị đúng của công thức? 1, 2, 600, ...? Không có giá trị nào khác là kết quả đúng của công thức trong trường hợp được nêu. Chỉ có #N/A là giá trị đúng của công thức. Nhưng giá trị ĐÚNG này của công thức lại có nghĩa là công thức đã được sử dụng SAI. :D
Tôi không hiểu bác nói "giá trị đúng" theo ngữ cảnh nào. Nhưng chỉ cần phần tử đầu tiên lớn hơn phần tử cần tìm thì cũng có lúc Lookup trả về #N/A mặc dù trong mảng có chứa trị cần tìm.
Lookup(3, {4,9,2,3,3}) = 3
Lookup(3, {4,2,9,3,3}) = #N/A
 
Tôi không hiểu bác nói "giá trị đúng" theo ngữ cảnh nào. Nhưng chỉ cần phần tử đầu tiên lớn hơn phần tử cần tìm thì cũng có lúc Lookup trả về #N/A mặc dù trong mảng có chứa trị cần tìm.
Lookup(3, {4,9,2,3,3}) = 3
Lookup(3, {4,2,9,3,3}) = #N/A
Với nghĩa thế này.

Câu hỏi: Công thức có được sử dụng đúng không?
Câu trả lời: Không, SAI.

SAI này là câu trả lời ĐÚNG.

Excel đã rất ĐÚNG khi trả về giá trị #N/A
-----------------------------
Mặc dù cũng có lúc công thức trả về kết quả mong đợi (ngẫu nhiên chó ngáp phải ruồi?) cho dù mảng không được sắp xếp. Nhưng Bill nói rõ là không "đảo bảo", không có bảo hành. Nói toặc ra thì nếu mảng không được sắp xếp thì kết quả luôn là may rủi. Mà đã là may rủi thì vứt ngay vào sọt rác, vì người ta không bao giờ biết, lúc nào may lúc nào rủi.
 
Lần chỉnh sửa cuối:
Web KT

Bài viết mới nhất

Back
Top Bottom