返回列表 上一主題 發帖

[發問] match函數處理重複數值,如何傳回最後符合的列?

[發問] match函數處理重複數值,如何傳回最後符合的列?

比方說:
A列:
1  A
2  B
3  C
4  D
5  B
6  E
7  S
8  A
9  B

1. match("A",$A$1:$A$9,0)=1
2. match("A",$A$1:$A$9)=8
3. large(if($A$1:$A$9="A",row($A$1:$A$9),""),1)=8
我希望出現3式的結果(8),但是match必需要精確(因此2式不行),可是用large函數又太吃資源
想請教一下match函數遇到重復值,是否能直接傳回最後一個符合的列?

回復 1# Bodhidharma

=LOOKUP(2,1/(A1:A9="A"),ROW(A1:A9))
學海無涯_不恥下問

TOP

本帖最後由 p212 於 2013-3-11 15:28 編輯

回復 2# Hsieh
超級版主:可否指導一下粗紅字體部份用意何在?謝謝!

=LOOKUP(2,1/(A1:A9="A"),ROW(A1:A9))

TOP

回復 3# p212

詳細請看LOOKUP函數說明
因為在無排序狀態要找到最後一個符合小於等於搜尋值最方便的就是LOOKUP
此例中2為搜尋值
1/(A1:A9="A")
會產生一個1與除以0的錯誤值陣列
在此陣列找到最後一個小於等於2的位置即為所求
學海無涯_不恥下問

TOP

回復 4# Hsieh
請問超級版主:
那為何搜尋值不逕用「1」,而用「2」?
「1/(A1:A9="A")」產生的結果不是<=1?

TOP

學海無涯_不恥下問

TOP

回復 1# Bodhidharma

=INDEX(MATCH(2,1/(A1:A9="A")),)

TOP

本帖最後由 p212 於 2013-3-12 15:04 編輯

回復 6# Hsieh
謝謝超級版主的指導!受益良多。
對於Excel內建教學說明,似乎未提供諸如以1/(A1:A9="A")方式作為引數,以製造出陣列效果之原理,請問自何處(或哪一類專書)可獲得如此陣列效果之系統性基礎觀念與解析?
謝謝賜教!

TOP

回復 8# p212
函數說明都只是基本功能說明
應用完全是依據個人思考而產生不同程度的效果
這類書籍似乎還沒有,因為畢竟這會與表格配置、資料型態等因素
而有不同的思考,只有自己多看、多想才能夠融會貫通
學海無涯_不恥下問

TOP

感謝版主的說明
看到
a. =LOOKUP(2,1/(A1:A9="A"),ROW(A1:A9))這個式子時
馬上會想到
b. =LOOKUP(1,1/(A1:A9="A"),ROW(A1:A9))
c. =LOOKUP(2,1*(A1:A9="A"),ROW(A1:A9))
這兩種方式,不過都不行,看了gong版主那篇說明之後大概比較了解:
b式中會出現內含1以及#DIV/0!的陣列,因為lookup函數是用二分搜尋法,因此無法確定會找到哪一個1(未必是最後一個)
c式中會出現內含1及0的陣列,但是1或0都小於2,因此二分搜尋會一直往下搜尋,直到最後一個,因此一定會回傳最後一個值(可能是1也可能是0,是0的話就錯了),因此必需用a式,以除的製造出#DIV/0!,再讓lookup函數自動刪掉,因此最後一定會傳回最後一個1

TOP

        靜思自在 : 真正的愛心,是照顧好自己的這顆心。
返回列表 上一主題