2017-07-31 348 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