簡體   English   中英

如何在 Excel 的 MMULT 查找中找到最后一個匹配項?

[英]How can I find the LAST match in a MMULT lookup in Excel?

我是我們教會的歌曲領袖,我正在使用電子表格來跟蹤我們最近使用贊美詩書中的每首贊美詩的情況。 (為了讓我們每周唱的歌曲有一些輪播。)

在 Exceljet 上使用一些非常有用的指南,我能夠構建一個幾乎完全符合我想要的公式......它告訴我多少周前我們使用了我們贊美詩書中的每首歌。 問題是它目前只顯示我們第一次使用這首歌的時間,而不是最后一次或最近一次,這是我真正想要做的。

我遇到的關鍵問題是如何從MMULT()公式中獲取最后一個條目。 下面顯示了一個簡化的示例...我想返回A列中的最后一個日期,其中示例贊美詩 #15 列在BCD列中。

我當前的公式在獲取第一個匹配行(第 3 行)方面做得很好,但沒有給我最后一行(第 5 行)。

{=INDEX(ServiceDate,MATCH(1,MMULT(--(HymnNumbers=F2),TRANSPOSE(COLUMN(HymnNumbers)^0)),0))}

( ServiceDate = A:AHymnNumbers = B:D )

在此處輸入圖片說明

是的,我意識到還有其他方法可以找到最后一個匹配項,如果我構建一個非常復雜的表達式來單獨搜索每列中的最后一個匹配項並找到最大的日期值,則使用MATCHLOOKUP ,但性能也是一個問題我正在使用的實際電子表格中數據的大小。

我可以在當前的MMULT函數中調整一些簡單的東西來返回最后一個匹配而不是第一個匹配嗎?

如果日期已排序,您可以將公式減少到

=INDEX(A:A,AGGREGATE(14,6,ROW(A:A)/(B:D=F2),1))

在此處輸入圖片說明

這是一個較長的公式,將返回最后一場比賽。 我不確定它是否符合您對“非常復雜”的定義。 此版本較長,因為它不使用最新版本的 excel。

=INDEX(A1:A10,MATCH(LARGE(MMULT(--(B1:D10=F2),TRANSPOSE(COLUMN(B1:D10)^0))*ROW(A1:A10),1),MMULT(--(B1:D10=F2),TRANSPOSE(COLUMN(B1:D10)^0))*ROW(A1:A10),0))

在此處輸入圖片說明

如果你有Office365和動態公式,那么你可以簡單地使用下面的公式。

=MAX(FILTER(A2:A9,(B2:B9=F2)+(C2:C9=F2)+(D2:D9=F2)))

在此處輸入圖片說明

如果您沒有Office365嘗試以下數組公式。

=MAX(IF(B2:B9=F2,A2:A9,""),IF(C2:C9=F2,A2:A9,""),IF(D2:D9=F2,A2:A9,""))

CTRL + SHIFT + ENTER來計算公式,因為它是一個數組公式。

您的公式可以修改如下...

=INDEX(ServiceDate,MATCH(2,1/MMULT(--(HymnNumbers=F2),TRANSPOSE(COLUMN(HymnNumbers))^0)))

但是,您可以避免使用 MMULT,如下所示...

=INDEX(ServiceDate,LARGE(IF(HymnNumbers=F2,ROW(ServiceDate)-MIN(ROW(ServiceDate))+1),1))

請注意,這兩個公式都需要使用 CONTROL+SHIFT+ENTER 進行確認。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM