Excel - 在一列

时间:2017-07-31 12:54:48

标签: excel date transpose date-range

我最好告诉你。这就是我的列表的样子:

enter image description here

这就是我想要的方式:

enter image description here

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

有人能帮助我吗?

万分感谢

一个。

1 个答案:

答案 0 :(得分:0)

这是解决方案的概要:

  1. 将输入表中的每个从/到日期拆分为2个组成日期。您需要使用字符串函数(LEFTRIGHTMID)来提取年,月和日值的数字。这些仍然是字符串,因此使用VALUE函数将它们转换为实际数字,然后使用DATE函数将它们组合成Excel中的正确日期值。 (您可能需要使用日期格式格式化结果,因为Excel将其日期存储为自01/01/1900以来的天数,因此11/08/2017将在Excel中保存为42958.)添加尽可能多的帮助列需要你的输入表来实现这一点。
  2. 从每个结束日期减去1,这会更正日期范围,以便包含结束日期。
  3. 第一个开始日期和最后结束日期定义输出日期的范围。因此,请使用第一个日期启动输出表,并在下面的单元格中使用公式将1添加到此日期并向下复制公式,直到达到最后一个可能的输出日期。
  4. 要获得每个可能的输出日期的结果,您需要找到 它属于哪个日期范围。它属于日期范围 大于或等于范围的开始日期且小于或 等于结束日期。但是,而不是比较每个输出 具有单独开始日期和结束日期的日期可以进行比较 每个输出日期包含所有开始日期和所有结束日期。诸如A10>=E2:E7之类的表达式生成具有值的6个元素的数组 根据A10是否大于或等于,TRUEFALSE 分别为E2E3E4E5E6E7。因此,您可以使用此方法生成TRUE / FALSE值数组,以显示特定输出日期是否大于或等于(即在每个范围的开始日期之前或之后) 。同样,您可以获得一个数组,显示相同的输出日期是否小于或等于(即在每个范围的结束日期之前或之前)。
  5. 现在可以使用多功能SUMPRODUCT函数来组合数组和输入表中的相关会话/用户值,以获取输出日期的相关值。例如,如果开始日期位于E2:E7,结束日期为F2:F7,会话位于B2:B7,输出日期位于A10,则可以使用可靠的公式来确定属于输出日期的会话数为=SUMPRODUCT(($A10>=$E$2:$E$7)*($A10<=$F$2:$F$7)*(B$2:B$7))。可以复制此公式以提供所有输出日期的结果,并且假设用户的输入数据位于C2:C7,它还将为用户提供结果,如果将其复制到会话结果旁边的列中。在此公式中,TRUEFALSE值分别有效地转换为10
  6. 以下几点:(i)如果您不知道日期在Excel中的工作方式,那么请查明,它会计算两个日期之间的天数或特定日期之前/之后的日期使用简单的算术非常容易; (ii)不要混淆看起来像日期的文本字符串,日期可以在Excel中以算术方式操作; (iii)我相信你的例子中有一些错误 - 16/08/2017是两个输入范围内的日期,应该有(2,2)不(1,1)和2017年8月17日的结果同样是错误的。

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

    Screenshot

    输出日期范围生成如下:

    • 单元格A10:使用公式= E2
    • 单元格A11:使用公式= 1 + A2
    • 细胞A12,A13,......细胞A11中的复制配方