我最好告诉你。这就是我的列表的样子:
这就是我想要的方式:
基本上,在第一张图片中我有不同的日期范围,对于每个日期范围,我有两个指标,会话和用户以及最终结果应该是所有日期范围爆炸成单个日期,考虑到某些日期可以包含在超过1个日期范围内(例如日期2017-08-12)包含在第一行和第二行中。 最后但并非最不重要的是,不应计算结束日期。
有人能帮助我吗?
万分感谢
一个。
答案 0 :(得分:0)
这是解决方案的概要:
LEFT
,RIGHT
和MID
)来提取年,月和日值的数字。这些仍然是字符串,因此使用VALUE
函数将它们转换为实际数字,然后使用DATE
函数将它们组合成Excel中的正确日期值。 (您可能需要使用日期格式格式化结果,因为Excel将其日期存储为自01/01/1900以来的天数,因此11/08/2017将在Excel中保存为42958.)添加尽可能多的帮助列需要你的输入表来实现这一点。A10>=E2:E7
之类的表达式生成具有值的6个元素的数组
根据A10是否大于或等于,TRUE
和FALSE
分别为E2
,E3
,E4
,E5
,E6
和E7
。因此,您可以使用此方法生成TRUE
/ FALSE
值数组,以显示特定输出日期是否大于或等于(即在每个范围的开始日期之前或之后) 。同样,您可以获得一个数组,显示相同的输出日期是否小于或等于(即在每个范围的结束日期之前或之前)。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
,它还将为用户提供结果,如果将其复制到会话结果旁边的列中。在此公式中,TRUE
和FALSE
值分别有效地转换为1
和0
。以下几点:(i)如果您不知道日期在Excel中的工作方式,那么请查明,它会计算两个日期之间的天数或特定日期之前/之后的日期使用简单的算术非常容易; (ii)不要混淆看起来像日期的文本字符串,日期可以在Excel中以算术方式操作; (iii)我相信你的例子中有一些错误 - 16/08/2017是两个输入范围内的日期,应该有(2,2)不(1,1)和2017年8月17日的结果同样是错误的。
我在下面的插图中使用了这种方法,为了测试其稳健性,我添加了一行额外的输入数据,这些数据的会话与用户不同,并产生一个日期(2017年8月19日)不匹配到任何输入范围。
输出日期范围生成如下: