簡體   English   中英

Excel 公式返回日期范圍內的最早日期和最晚日期

[英]Excel Formula to return earliest date and latest date within a date range

更新樣本輸入和 output 表

有關示例數據(左表)和預期結果(右表),請參見附圖。

我嘗試使用本網站上為類似問題提供的示例公式,但未能根據我的具體問題對其進行調整。 希望得到一些針對我的案例的意見和指導。

我的表中有 1000 行數據,類似於圖像中顯示的數據。

  • 第 1 列 - ID
  • 第 2 列 - 起始范圍
  • 第 3 列 - 結束范圍
  • 第 4 欄 - 開始日期
  • 第 5 欄 - 結束日期

我想根據第 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=bc=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.

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