2017-07-31 350 views
0

我更好地告訴你。這是我的名單看起來像:Excel - 自動生成日期列表,給出多個日期範圍在一列

enter image description here

而且這是我希望它是:

enter image description here

基本上,在第一張照片我有不同的日期範圍,每個日期範圍我有這兩個指標,會話和用戶,最終結果應該是將所有日期範圍擴大爲單個日期,考慮到某些日期可以包含在多個日期範圍內(例如日期2017-08- 12)包含在第一行和第二行中。最後但並非最不重要的是,結束日期不應該被計算在內。

有人可以幫我嗎?

萬分感謝

A.

回答

0

這是一個解決方案的概要:

  1. 拆分每個從/迄今在您輸入表到其2周組成的日期。您將需要使用字符串函數(LEFT,RIGHTMID)來提取年,月和日值的數字。這些仍然是字符串,所以使用VALUE函數將它們轉換爲實際的數字,然後使用DATE函數在Excel中將它們組合爲適當的日期值。 (您可能需要使用日期格式來格式化結果,因爲Excel將日期存儲爲自01/01/1900以來的天數,因此2017年8月11日在Excel中以42958的形式存儲。)添加與您一樣多的幫助列需要你的輸入表來實現這一點。
  2. 從每個結束日期減去1,這會更正日期範圍,以便包含結束日期。
  3. 第一個開始日期和最後一個結束日期定義了輸出日期的範圍。因此,使用第一個日期並在下面的單元格中開始輸出表,使用公式在該日期中添加1,然後向下複製公式,直到達到最後可能的輸出日期。
  4. 要獲得每個可能的輸出日期的結果,您需要找到它所屬的日期範圍 。如果它是 大於或等於範圍的開始日期並且小於或等於結束日期的 ,則它屬於日期範圍。然而,並不是將每個輸出日期與單獨的開始日期和結束日期進行比較,而是可以將每個輸出日期與所有開始日期和所有結束日期同時進行比較。作爲A10>=E2:E7這樣的表達產生6個元素的值與根據A10是否大於或等於 E2E3E4E5,分別E6E7 TRUEFALSE陣列。因此,您可以使用此方法生成一個數組,表示某個特定輸出日期是否大於或等於(即在或之後)每個範圍的開始日期。同樣,您可以獲得一個數組,顯示相同的輸出日期是否小於或等於(即在或之前)每個範圍的結束日期。
  5. 現在可以使用多功能SUMPRODUCT函數將輸入表中的數組和相關會話/用戶值組合起來,以獲取輸出日期的相關值。例如,如果開始日期爲E2:E7,結束日期爲F2:F7B2:B7中的會話和A10中的輸出日期,則確定歸屬於輸出日期的會話數的可靠公式爲=SUMPRODUCT(($A10>=$E$2:$E$7)*($A10<=$F$2:$F$7)*(B$2:B$7))。可以複製此公式以給出所有輸出日期的結果,並且假設用戶的輸入數據在C2:C7中,那麼如果將用戶的結果複製到與會話結果相鄰的列中,它還會爲用戶提供結果。在此公式中,TRUEFALSE值分別有效地轉換爲10

有幾點:(i)如果您不知道Excel中日期的工作方式,那麼可以計算兩個日期之間的天數或特定前後n天之間的任務使用簡單的算術非常簡單; (ii)不要混淆看起來像日期的文本字符串和可以在Excel中以算術方式處理的日期; (iii)我相信您的示例中存在一些錯誤 - 2017年8月16日是您的兩個輸入範圍內的日期,並且應該具有(2,2)而非(1,1)和2017年8月17日的結果爲類似的錯誤。

我在下面的插圖中使用了這種方法,爲了測試它的健壯性,我添加了一行額外的輸入數據,其中會話與用戶不同,併產生一個日期(19/08/2017)匹配任何輸入範圍。產生

Screenshot

輸出時間範圍如下所示:

  • 細胞A10:式= E2
  • 細胞A11:式= 1 + A2
  • 細胞A12,A13 ,...單元格中的複製公式A11
+0

非常感謝DDM。它以某種方式工作,但是,您是否也知道如何自動生成輸出日期? 理想情況下,包含在不同範圍內的所有日期應在輸出日期 –

+0

下列出如果此答案適用於您,請將其標記爲正確。 – DMM