[英]Excel Formula to return earliest date and latest date within a date range
有關示例數據(左表)和預期結果(右表),請參見附圖。
我嘗試使用本網站上為類似問題提供的示例公式,但未能根據我的具體問題對其進行調整。 希望得到一些針對我的案例的意見和指導。
我的表中有 1000 行數據,類似於圖像中顯示的數據。
我想根據第 2 列和第 3 列中的重疊日期范圍(即組合具有重疊日期范圍的行)合並行以顯示第 1、4 和 5 列,以獲得與右側表類似的表僅顯示每個組的最早日期和最晚日期。
作為參考,以下是我到目前為止所擁有的。 這個公式為我的 output(開始日期)的第二列提供了我需要的一切,除了它返回匹配所有條件的第一個值而不是返回最小值(不確定在此公式中添加 MIN function 的位置)。
=IFERROR(INDEX([Start Date],MATCH(1, IF([Start Date]>=[@[Start Range]], IF([Start Date]<=[@[End Range]], IF([Key1]=[@Key1],1),0),0),0)),"")
如果您需要任何進一步的信息,請告訴我。 謝謝!
MATCH 只能返回一個行號,但您需要一個包含所有匹配行的數組,以便您可以選擇最小/最大的 - 您需要一個數組公式。
您有多個條件,但 AND 和 OR 在數組公式中不起作用,因此需要一個技巧來模擬 AND 和 OR:
AND(a=b,c=d)
和OR(a=b,c=d)
將a=b
和c=d
視為 TRUE/FALSE 值,但將它們視為 FALSE=0 和 TRUE< >0。 如果這樣做,則(a=b)*(c=d)
與使用 AND 相同,並且(a=b)+(c=d)
與 OR 相同。
首先,我們使用 MIN 來查找匹配的最小項目。 匹配的是顯示為日期的數字。 那些不匹配的呢? 我們需要一個比任何可以想象的日期都大的數字。 數字 2958465 是 9999 年 12 月 31 日(最大日期),因此我們可以使用大於該日期的任何值 - 我們將使用 9999999,這絕對不是有效日期。
最后,我們使用 MAX 來查找最大的匹配項。 匹配的是顯示為日期的數字。 對於那些不匹配的,我們需要一個小於任何可以想象的日期的數字。 數字 0 是最小的有效日期,因此我們將使用 -1,這絕對不是有效日期。
所以我們需要用到的數組公式是:
對於 ID,將此公式放入 G2 中,然后將結果復制到原始數據的每一行:
=A2
對於開始日期,將此公式放入 H2 並按 Control-Shift-Enter 而不是僅 Enter,然后將結果復制到原始數據的每一行:
=MIN(IF((D2>=B:B)*(D2<=C:C)*(A2=A:A)+(E2>=B:B)*(E2<=C:C)*(A2=A:A),D:D,9999999))
對於結束日期,將此公式放入 I2 並按 Control-Shift-Enter 而不是 Enter,然后將結果復制到原始數據的每一行:
=MAX(IF((D2>=B:B)*(D2<=C:C)*(A2=A:A)+(E2>=B:B)*(E2<=C:C)*(A2=A:A),E:E,-1))
當使用 Control-Shift-Enter 將單元格作為數組公式輸入時,Excel 會在其周圍放置花括號,以便您可以判斷它是一個數組公式。
現在,這並不完美,因為您想要一個沒有重復的單獨結果表,而這個有很多重復。 您可以使用高級過濾器僅顯示唯一值 - 您可以選擇隱藏行或將其復制到另一個位置進行過濾。
如果此單獨的結果表與原始數據位於同一工作表上,則適當的過濾也會隱藏原始數據中的行,因此您最好將此單獨的表放在不同的工作表上。
如果您通過復制到新位置(可能就在右側)進行過濾,那么您可以隱藏帶有重復項的結果列 - 請注意,因為您制作的副本只是值,它們不會自動更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.