是否可以使用索引和匹配或 Microsoft Excel 中的類似功能來查找同一列中兩組數字的最後填充的數字行?

是否可以使用索引和匹配或 Microsoft Excel 中的類似功能來查找同一列中兩組數字的最後填充的數字行?

範例表格圖片:

在此輸入影像描述

目標:在範例表圖像中,我想從 C 列中提取最後填充的 CST 編號為 1235,最後填充的增值稅編號為 204。

如果我使用 =VLOOKUP("CST",B2:C5,2,FALSE) 它將傳回第一個 CST 值,即 1234。

如果我嘗試匹配,對於 CST 效果很好,但對於增值稅,相同的公式具有較小的lookup_value,例如 250(因為增值稅值低於 250),結果為 #N/A。

螢幕截圖(在同一列上使用具有不同lookup_value的MATCH):

在此輸入影像描述

答案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

LOOKUPlookup_value大於數組中的任何數字時,函數會傳回數組中的最後一個數字;該1/(1/(...))構造將0' 轉換為錯誤,因此最後一個“數字”將是與最後一個相同位置的值CSTVAT取決於公式。

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()產生數字序列。

相關內容