返回列表 上一主題 發帖

[發問] 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函數遇到重復值,是否能直接傳回最後一個符合的列?

回復 21# Bodhidharma
函數使用不必拘泥於何種方式
只要能夠達到所需的方法都是好方法
至於您提到COUNTIF(OFFSET(A1,,,ROW(A1:A20),),E9)=D9不會被視為是一個矩陣
其中的前段(A1:A20=E9)會得到一個陣列無虞
當公式使用ENTER直接輸入,並未告知EXCEL要使用陣列,所以ROW(A1:A20)會傳回範圍的第一個儲存格列位
做為A1:A20=E9這個陣列中每個元素的相同倍數
唯有使用陣列公式,才會讓ROW(A1:A20)傳回1~20的陣列
學海無涯_不恥下問

TOP

確實是疏忽了.函數多樣化也是一種樂趣.用SMALL是標準做法,
避免LOOKUP的二分法可用VLOOKUP
={VLOOKUP(D9,IF({1,0},COUNTIF(OFFSET(A1,,,ROW(A1:A20),),E9),ROW(1:20)),2,)}

TOP

1. G3~G5格似乎把E9誤植為E8了
2. G4格=INDEX(MATCH(2,1/(A1:A20=E9)),),似乎用=MATCH(2,1/(A1:A20=E ...
Bodhidharma 發表於 2013-3-19 01:34


剛剛又研究了一下,
=INDEX(MATCH(2,1/(A1:A20=E9)),) 會把MATCH(2,1/(A1:A20=E9))視為是一個矩陣,因此這個函數不需要用矩陣形式
於是想說比造辦理,去套=index(MATCH(1,(A1:A20=E9)*(COUNTIF(OFFSET(A1,,,ROW(A1:A20),),E9)=D9),0),),卻出現錯誤
使用評估值公式去看,發現COUNTIF(OFFSET(A1,,,ROW(A1:A20),),E9)=D9不會被視為是一個矩陣…想請教一下這是什麼原理?

TOP

=LOOKUP(N,(A1:A9="A")*COUNTIF(OFFSET(A1,,,ROW(A1:A9),),"A"),ROW(1:9))
ANGELA 發表於 2013-3-15 23:35


lookup函數是用二分搜尋法,搜尋矩陣沒有遞增的時候會出問題

TOP

本帖最後由 Bodhidharma 於 2013-3-19 01:36 編輯
回復  lukychien
=LOOKUP(2,1/((A1:A20=E9)*(COUNTIF(OFFSET(A1,,,ROW(A1:A20),),E9)=D9)),ROW(A1:A20))
...
Hsieh 發表於 2013-3-16 23:47


1. G3~G5格似乎把E9誤植為E8了
2. G4格=INDEX(MATCH(2,1/(A1:A20=E9)),),似乎用=MATCH(2,1/(A1:A20=E9))即可,不需再加index?
3. G9格=LOOKUP(2,1/((A1:A20=E9)*(COUNTIF(OFFSET(A1,,,ROW(A1:A20),),E9)=D9)),ROW(A1:A20)),其中(A1:A20=E9)*(COUNTIF(OFFSET(A1,,,ROW(A1:A20),),E9)=D9))好像就已經是0與1的陣列,而且只有一個1是正確的位置,因此似乎也可以用=MATCH(1,(A1:A20=E9)*(COUNTIF(OFFSET(A1,,,ROW(A1:A20),),E9)=D9),0)或=MATCH(E9&D9,A1:A20&COUNTIF(OFFSET(A1,,,ROW(A1:A20),),E9),0)
4. 上面這個函式有趣歸有趣,不過我覺得還是用large最簡單方便(而且應該也不會沒效率吧)

TOP

回復 15# lukychien
=LOOKUP(2,1/((A1:A20=E9)*(COUNTIF(OFFSET(A1,,,ROW(A1:A20),),E9)=D9)),ROW(A1:A20))
學海無涯_不恥下問

TOP

回復 16# JBY

原來是這樣...   謝謝您

一個主題學到二樣東西,還不錯...


#12樓的先進 (Bodhidharma) ...

不好意思,是我搞錯了,難怪抓不出來...  抱歉抱歉

TOP

回復 15# lukychien
{=SMALL(IF((A1:A20=E9),ROW(A1:A20)),D9)}

TOP

=LOOKUP(N,(A1:A9="A")*COUNTIF(OFFSET(A1,,,ROW(A1:A9),),"A"),ROW(1:9))
ANGELA 發表於 2013-3-15 23:35



有時候找的到,有時候找不到...

活頁簿1.rar (7.68 KB)

TOP

        靜思自在 : 【做人的開始】每一天都是故人的開始,每一個時刻都是自己的警惕。
返回列表 上一主題