
答案1
對於這樣的事情,我更喜歡聚合而不是匹配:
=INDEX($B:$B,AGGREGATE(14,6,ROW($A$2:INDEX($A:$A,MATCH("ZZZ",$A:$A)))/($A$2:INDEX($A:$A,MATCH("ZZZ",$A:$A))=D$1),1))
我將實際標準放入 D1 和 D2 中,這樣我就可以直接引用它們,而不是硬編碼"CST"
到"VAT"
公式中,使其可拖曳。
兩者$A$2:INDEX($A:$A,MATCH("ZZZ",$A:$A))
動態設定參考範圍,因為這是一個陣列類型公式。它設定為從 A2 到 A 列中具有文字字串的最後一個儲存格。
聚合將傳回與 INDEX 條件相符的最大行號(最後一行)。
答案2
您可以使用 來執行此操作LOOKUP
。
LOOKUP
當lookup_value
大於數組中的任何數字時,函數會傳回數組中的最後一個數字;該1/(1/(...))
構造將0
' 轉換為錯誤,因此最後一個“數字”將是與最後一個相同位置的值CST
或VAT
取決於公式。
Last CST: =LOOKUP(9E+307,1/(1/(($B$2:$B$999="CST")*$C$2:$C$999)))
Last VAT: =LOOKUP(9E+307,1/(1/(($B$2:$B$999="VAT")*$C$2:$C$999)))
上面的公式假設發票號碼始終是一個數字,如果它可能是一個字串,則公式需要進行一些修改。
Last CST: =LOOKUP(2,1/(($B$2:$B$999="CST")*ROW($B$2:$B$999)),$C$2:$C$999)
Last VAT: =LOOKUP(2,1/(($B$2:$B$999="VAT")*ROW($B$2:$B$999)),$C$2:$C$999)
答案3
使用 VLOOKUP 進行垂直查找。第二個參數是一個矩陣。如果行數沒有限制,則不指定行號,僅指定列字母。第三個參數告訴我們要使用哪一列。 2 表示第二個,即矩陣中的 C。
預設情況下,函數不會在第一次查找時停止;它繼續尋找更多的出現,最終找到最底部的條目(通常是最新的),完全符合預期。
因此使用
=VLOOKUP("CST", B:C, 2)
和
=VLOOKUP("VAT", B:C, 2)
請注意,還有用於水平查找的 HLOOKUP。
答案4
白天,我把桌子顛倒過來,可以這麼說,然後VLOOKUP()
在可能的情況下使用 ,INDEX/MATCH
在不可能的情況下使用 。重要的部分是將桌子顛倒過來,以下展示瞭如何做到這一點。使用它作為表來查找人們想要查找的內容,當它找到第一個出現時,它正在查找“真正的”最後一個出現,因為它位於原始(“真實”)表中。
因此,值表為 A1:B22。然後:
=INDEX(A1:B22, ROWS(A1:A22)+1-ROW(INDIRECT("1:"&ROWS(A1:A22))), {1,2})
基本上,它找到行數 (22),加 1 (23),然後創建一個值數組,該值 (23) 減去從 1 到行數 (22) 的一系列值,給出一個數組要返回的行數:23-1=22、23-2=21、23-3=20 等。 因此22、21、20 等直至1 INDEX()
。
如今(2022年),我們只需XLOOKUP()
從頭到尾使用和搜尋即可。當然,如果執行上述操作,就可以用來SEQUENCE()
產生數字序列。