
誰能告訴我返回連續倒數第二個文字值的 Excel 公式?
我設法找到最後一個文字值的公式:=INDEX(U2:Y2,MATCH(REPT("z",255),U2:Y2))
,但不確定如何獲得倒數第二個值?
答案1
公式
這是回傳的另一種方法n從末尾開始的第 th 個文字值。
=IFERROR(INDEX(U2:Y2,LARGE(ISTEXT(U2:Y2)*COLUMN(U2:Y2),2)-COLUMN(U2)+1),"")
Ctrl公式必須使用+ Shift+Enter而不是僅作為陣列公式輸入Enter。如果兩端都出現大括號 { },那麼您就知道自己做對了。
怎麼運作的
=IFERROR(...,"")
如果公式的其餘部分有錯誤,將傳回空白。如果至少沒有,您將收到“#VALUE!#”錯誤n範圍內的文字值。
INDEX(U2:Y2,...)
接受陣列並傳回 in. 中的某個INDEX(U2:Y2,4)
值X2
。
LARGE(..,2)
接受某個數組並傳回該數組中的第二大值。將 更改2
為任何其他數字以獲得n第最大的項目。該SMALL
函數類似,但返回nth最小的值代替。
ISTEXT(U2:Y2)*COLUMN(U2:Y2)
是讓您將其作為數組公式輸入的部分。此函數將傳回/值ISTEXT
數組,以確定每個單元格是否包含文字值。例如,這可能是。該函數傳回列號。在這種情況下,它將是。將兩者相乘 ( , )。對於我的範例,最終的數組將是.將其插入之前的公式中將會返回,因為它是第二大值。TRUE
FALSE
{TRUE,TRUE,FALSE,FALSE,TRUE}
COLUMN
{21,22,23,24,25}
TRUE=1
FALSE=0
{21,22,0,0,25}
LARGE
22
-COLUMN(U2)+1
只需調整插入INDEX
公式的值即可考慮到我們從第 22 列開始但數組U2:Y2
只有 5 列這一事實。我們想要傳回一個介於1
和之間的值5
,而不是21
和25
。
例子
假設您在該範圍內有以下數據U2:Y2
:
Hello | World | meep | 5 | boop
倒數第二個文字值是,meep
讓我們看看公式是如何運作的。我將一步一步地填寫計算。您可以使用「公式」功能區上的「評估公式」來查看類似的運行過程,儘管順序可能不同。
=IFERROR(INDEX(U2:Y2,LARGE(ISTEXT(U2:Y2)*COLUMN(U2:Y2),2)-COLUMN(U2)+1),"")
=IFERROR(INDEX(U2:Y2,LARGE(ISTEXT(U2:Y2)*COLUMN(U2:Y2),2)-21+1),"")
=IFERROR(INDEX(U2:Y2,LARGE(ISTEXT(U2:Y2)*COLUMN(U2:Y2),2)-20),"")
=IFERROR(INDEX(U2:Y2,LARGE({TRUE,TRUE,TRUE,FALSE,TRUE}*COLUMN(U2:Y2),2)-21),"")
=IFERROR(INDEX(U2:Y2,LARGE({TRUE,TRUE,TRUE,FALSE,TRUE}*{21,22,23,24,25},2)-21),"")
=IFERROR(INDEX(U2:Y2,LARGE({21,22,23,0,25},2)-21),"")
=IFERROR(INDEX(U2:Y2,23-21),"")
=IFERROR(INDEX(U2:Y2,2),"")
=IFERROR(INDEX({"Hello","World","meep",5,"boop"},2),"")
=IFERROR("meep","")
="meep"
答案2
我懷疑你的方法可能不是最有效的...但是使用你已經取得的成就,你可以利用你現有的MATCH
,減一為您提供新的搜尋邊界,並返回該新區域的最後一個文字。此OFFSET
方法可讓您使用新的限制重新定義搜尋區域,如下所示:
=INDEX(U2:Y2,MATCH(REPT("z",255),OFFSET(U2,0,0,1,MATCH(REPT("z",255),U2:Y2)-1)))
答案3
=INDEX(D7:P7,MATCH(REPT("z",255),D7:P7)-1)