
在Excel中,是否有一個Excel公式可以用來填充B列(在下面的範例中),該公式將傳回目前行之前包含特定字串的最後一個行號?
數據不連續。
例如,數據可能是:
| A (value) B (prev recent instance)
----------------------------------------------
1 | Mike
2 | John
3 | Mike 1
4 | Tony
5 | Mike 3
6 | John 2
然後我想將其擴展為 C 列來顯示最早的實例。
這似乎與這個問題非常相似: 什麼是 Excel 公式,它將傳回包含特定資料的範圍內儲存格的最後行號?,但是該問題和答案要求數據是連續的。
編輯: 我希望答案是一個工作表公式,但是如果您認為透過 VBA 實作更合適,請在您的答案中包含每種方法的優缺點。
答案1
要找到最早的實例,下面提到的是公式:-
=LOOKUP(2,1/(A:A=A2),ROW(A:A))
為了讓您更好的理解,以下是截圖
答案2
假設您的資料從 A1 開始,請在 B2 中嘗試這個“數組公式”
=IF(COUNTIF(A$1:A1,A2),MATCH(2,1/(A$1:A1=A2)),"")
使用 CTRL+SHIFT+ENTER 確認並複製下來
或者你可以使用這個非數組版本
=IF(COUNTIF(A$1:A1,A2),MATCH(2,INDEX(1/(A$1:A1=A2),0)),"")
在 Excel 2007 或更高版本中,您可以使用 IFERROR 進行簡化,即陣列版本變為
=IFERROR(MATCH(2,1/(A$1:A1=A2)),"")
對於 C 列中的「第一個實例」行,請嘗試在 C1 中複製此公式
=MATCH(A1,A$1:A1,0)
注意:公式並非嚴格傳回“行號”,而是傳回資料的相對行號,即資料的第 1 行傳回 1 等。