Excel - 自动生成日期列表,给定一列中的多个日期范围

Excel - automatically generate list of dates, given multiple date ranges in one column

我最好给你看。这是我的列表的样子:

这就是我想要的样子:

基本上,在第一张图片中,我有不同的日期范围,对于每个日期范围,我都有这两个指标,会话和用户,最终结果应该是所有日期范围爆炸成单个日期,考虑到第一行和第二行都包含某些日期可以包含在多个日期范围内(例如日期 2017-08-12)。 最后但同样重要的是,不应计算结束日期。

有人可以帮我吗?

万分感谢

A.

这是解决方案的概要:

  1. 将您输入的 table 中的每个 from/to 日期拆分为 2 个组成日期。您将需要使用字符串函数(LEFTRIGHTMID)来提取年、月和日值的数字。这些仍然是字符串,因此使用 VALUE 函数将它们转换为实际数字,然后使用 DATE 函数将它们 assemble 转换为 [=72= 中的适当日期值]. (您可能需要使用日期格式来格式化结果,因为 Excel 将其日期存储为自 01/01/1900 以来的天数,因此 11/08/2017 在 Excel 中保存为 42958。 ) 根据需要在输入中添加尽可能多的辅助列 table 以实现此目的。
  2. 从每个结束日期中减去 1,这会更正日期范围,以便包括结束日期。
  3. 第一个开始日期和最后一个结束日期定义了输出日期的范围。因此,从第一个日期开始输出 table,并在下面的单元格中使用公式将此日期加 1 并向下复制公式,直到到达最后一个可能的输出日期。
  4. 要获得每个可能的输出日期的结果,您需要找到 它属于哪个日期范围。它属于一个日期范围,如果是 大于或等于范围的开始日期且小于或 等于结束日期。然而,而不是比较每个输出 具有单独开始和结束日期的日期可以进行比较 每个输出日期同时包含所有开始日期和所有结束日期。 A10>=E2:E7 等表达式生成一个包含 6 个元素的数组,其中包含值 TRUEFALSE根据A10是否大于等于 分别为 E2E3E4E5E6E7。因此,您可以使用此方法生成一个 TRUE/FALSE 值数组,显示特定输出日期是否大于或等于(即在或之后)每个范围的开始日期。同样,您可以获得一个数组,显示相同的输出日期是否小于或等于(即在或之前)每个范围的结束日期。
  5. 多功能 SUMPRODUCT 函数现在可用于组合数组和来自输入 table 的相关 sessions/users 值,以获得输出日期的相关值。例如,如果开始日期在 E2:E7 中,结束日期在 F2:F7 中,会话在 B2:B7 中,输出日期在 A10 中,那么 sutable 用于确定归因于输出日期的会话数的公式为 =SUMPRODUCT(($A10>=$E:$E)*($A10<=$F:$F)*(B:B))。可以复制此公式以给出所有输出日期的结果,并且假设用户的输入数据在 C2:C7 中,如果将其复制到与会话结果相邻的列中,它也会给出用户的结果。在此公式中,TRUEFALSE 值分别有效地转换为 10

几点:(i) 如果你不知道 Excel 中的日期是如何工作的,那么找出来,它会做一些任务,比如计算两个日期之间的天数或日期 n 天 before/after 一个特定的日期非常容易使用简单的算术; (ii) 不要将看起来像日期的文本字符串与可以在 Excel 中进行算术运算的日期混淆; (iii) 我认为您的示例中存在一些错误 - 16/08/2017 是您的两个输入范围内的日期,结果应该是 (2,2) 而不是 (1,1) 而 17/08/2017 是同样报错。

我在下图中使用了这种方法,为了测试其稳健性,我添加了一行额外的输入数据,该数据具有与用户不同的会话,并产生一个日期 (19/08/2017)不匹配任何输入范围。

生成的输出日期范围如下:

  • 单元格 A10:使用公式 =E2
  • 单元格A11:使用公式=1+A2
  • 单元格 A12、A13、...复制单元格 A11 中的公式