標題:
vlookup 的問題
[打印本頁]
作者:
renzhi2020
時間:
2011-6-4 19:07
標題:
vlookup 的問題
請問 大大
lookup時若相符的條件有好幾個,公式通常都只會以第一個找到的標準,請問有辦法以最後一個為標準嗎?
如附件範例
(為何系統不能直接附excle檔了:Q )
[attach]6492[/attach]
作者:
Hsieh
時間:
2011-6-4 20:01
C4=LOOKUP(2,1/($F$5:$F$10=B4),$G$5:$G$10)
作者:
renzhi2020
時間:
2011-6-5 01:12
嗯嗯,真得可以核對最後一個也
非常感謝版主大大~
作者:
brabus
時間:
2011-6-11 22:11
本帖最後由 Hsieh 於 2011-6-11 22:37 編輯
看不太明白
為什麼要用1/($F$5:$F$10=B4呢
作者:
Hsieh
時間:
2011-6-11 22:41
回復
4#
brabus
為了產生一個含有1或錯誤值#DIV/0!的陣列
1/TRUE等於1
1/FALSE等於#DIV/0!
作者:
brabus
時間:
2011-6-21 20:51
回復 brabus
為了產生一個含有1或錯誤值#DIV/0!的陣列
1/TRUE等於1
1/FALSE等於#DIV/0!
Hsieh 發表於 2011-6-11 22:41
請問一下高手
關於陣列有什麼好的書可以看的
看你用的好熟練
我都不太了解
所以想請問一下可以買什麼書來看呢
作者:
ANGELA
時間:
2011-6-21 23:23
沒有比論壇的文章更好的書了,多看別人的思路多做 練習,每個問題都會有很多解法,多看自然就懂.實在看不懂再提問,很快就會了.
作者:
vbstudy
時間:
2011-10-29 22:53
本帖最後由 vbstudy 於 2011-10-29 23:12 編輯
請問
LOOKUP(2,1/($F$4:$F$10=B4),$G$4:$G$10)
拆解後是
LOOKUP(2,1/(${TRUE;TRUE;TRUE;TRUE;TRUE;FALSE;FALSE}),${1;3;2;5;8;1;3})
-->LOOKUP(2,1/(${1;1;1;1;1;0;0}),${1;3;2;5;8;1;3})
-->=LOOKUP(2,{1;1;1;1;1;#DIV/0!;#DIV/0!},{1;3;2;5;8;1;3})
請問再下來的步驟是怎樣呢?
為什麼這樣會知道要抓最後一列呢?
因為F4、F5、F6、F7不都是
LOOKUP(2,1,1)
LOOKUP(2,1,3)
LOOKUP(2,1,2)
LOOKUP(2,1,5)
(因為對陣列不是很熟,不知道這樣對不對)
另外,lookup前面的2是不是指lookup_vector要小於等於2呢?
能不能改成1呢(我改成1後結果還是跑得出來)
謝謝~
作者:
Hsieh
時間:
2011-10-30 22:49
本帖最後由 Hsieh 於 2012-1-30 18:15 編輯
回復
8#
vbstudy
=LOOKUP(2,{1;1;1;1;1;#DIV/0!;#DIV/0!},{1;3;2;5;8;1;3})
這樣在LOOKUP函數中
lookup_value=2
lookup_vector={1;1;1;1;1;#DIV/0!;#DIV/0!}
result_vector={1;3;2;5;8;1;3}
當然lookup_value只要大於等於lookup_vector陣列中的最小值都可以
所以改成1也會得到相同結果(不過要看運氣)因為當這個陣列的排列,不會使1都集中在一起時,
因為LOOKUP會以二分法來比對資料,當折半後的資料就被找到符合的值,就會以此為答案
這樣就不能找到真正的最後一個值。(請參考圖片)
[attach]9332[/attach]
LOOKUP函數目的在於,從一單欄或單列的陣列中(lookup_vector)
尋找小於或等於lookup_value的值,在對應相同位置的result_vector
所以,你不應該將LOOKUP的lookup_vector以單一個值來看待
作者:
gong
時間:
2011-11-1 23:06
result_vector lookup_vector 結果
A E J
A 1 1 1 1
B 1 2 2 2
C 1 2 2 2
D 1 1 1 1
E 1 2 1 0.5
F 1 1 2 2
G 1 1 2 2
H 1 1 3 0.2
I 1 1 1 0.1
J 1 1 5 0.9
二分法判斷 二分法判斷 二分法判斷
j=INT((COUNT(E4:E13)+1)/2) j=INT((COUNT(F4:F13)+1)/2) j=INT((COUNT(G4:G13)+1)/2)
當E8>1則往前找判斷 當F8=1則取C8 當G8<1則往後找判斷
k=INT((COUNT(E4:E8)+1)/2) k=INT((COUNT(G8:G13)+1)/2)
當E6>1則判斷 當G11<1則往後找判斷
l=INT((COUNT(E4:E6)+1)/2) l=INT((COUNT(G11:G13)+1)/2)
當E5=1則取C5 當G12=1則取C12
當E5>1則判斷E4 當G12<1則判斷G13
當E4=1則取C4 當G12>1則取C12
當E4>1則#N/A 當G12<=1則取C13
作者:
vbstudy
時間:
2011-11-3 22:47
謝謝兩位版主的指導,
雖然看的有些濛濛懂懂的,
不過對Lookup有清楚一點了
我會再琢磨您們寫的內容的
感謝∼∼
作者:
b31b6t2t4
時間:
2012-7-18 10:50
真的是太神奇了,
研究了好一陣子才看得懂
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)