我有一个工作表,其中包含2个单独的数据文件。 " EVENTTIME"工作表包含特定事件发生的日期和事件时间。
"间隔"工作表包含日期(独立于" EventTime"中的日期),时间开始(这是单个时间间隔的开始)和时间结束(时间开始+ 30分钟)。我将时间开始和结束时间汇总到TIME INTERVAL列。
我的目标是确定" EventTime"中的事件时间值。介于" Interval"中的任何特定TIME INTERVAL之间同一日期" EventTime"和"间隔"。时间开始值不能小于" EventTime"
中的事件时间我尝试了一些索引匹配功能:
=INDEX(Interval!$D$2:$D$5322,MATCH(1,IF(EventTime!B2>=LEFT(Interval!$D$2:$D$5322,5)+0,IF(EventTime!B2<RIGHT(Interval!$D$2:$D$5322,5)+0,1),0),0))
这会将事件时间映射到时间间隔,但会发生相当大的违规行为;无论日期如何,它都会查找满足条件的第一个时间间隔。所以会发生什么,看起来时间匹配得很好,但如果你看看
16:28的值在16:14 - 16:44之下,但是这违反了时间开始在&#34;间隔&#34;不能低于时间价值。
正确值16:28应映射到16:28 - 16:58
我尝试的另一种方法是:
=INDEX(Interval!$D$2:$D$5322,MATCH(EventTime!B2,LEFT(Interval!$D$2:$D$5322,5)+0))
这似乎是关注事件时间的分钟组成部分,并将其与时间间隔的第一个时间间隔(以分钟为单位)进行比较,实际上它是如何挑选分钟已经让我难倒,它似乎返回了正确的值但是对于以后的时间段来说,这很奇怪。
方法3:
=INDEX(Interval!$D$2:$D$5322,MATCH(1,(EventTime!A2=Interval!$A$2:$A$5322)*(EventTime!B2<=LEFT(Interval!$D$2:$D$5322,5)+0)*(EventTime!B2>RIGHT(Interval!$D$2:$D$5322,5)+0)))
我在这里使用了Date作为要求,但现在只匹配1个时间间隔。
方法4:
=INDEX(Interval!$D$2:$D$5322,MATCH(1,IF(A2=Interval!$A$2:$A$5322,IF(EventTime!B2>=LEFT(Interval!$D$2:$D$5322,5)+0,IF(EventTime!B2<RIGHT(Interval!$D$2:$D$5322,5)+0,1),0),0)))
类似于我尝试过的第一种方法,但是添加了日期要求,给出了相同的1个时间间隔输出。
使用Control + Shift + Enter输入所有这些公式。
我已经被困在这几天了,它开始让我疯了,我想我已经走上了正确的轨道,但我真的很遗憾。
该文件已在此处上传
答案 0 :(得分:0)
所以,嗯。这很复杂,但我有一个你可以效仿的解决方案 - 然后用来进一步解决你的问题。
我做了一件事,这可能会使解决方案无法适应您的情况。我把日期和时间放在一个单一的数字上。在我的理解中,你可以这样做,然后在之后创建字符串,但我不知道你使用它是什么,所以我可能是错的。此外,假设间隔是固定的(30分钟)
这是我的公式(请记住,我已将日期添加到时间中)
=SUMPRODUCT(MAX((Interval!B:B)*(Interval!B:B-EventTime!B3-1/48<0)))
这将返回&#34; last&#34;适合事件的间隔的可行日期和时间。不要被&#34; -1 / 48&#34; - 这是在excel时间写半小时的最简单方法。这实际上是最新的间隔结束,距离事件不到半小时。
这产生了
Target event Interval start
01.11.2015 23:34 01.11.2015 23:23
01.11.2015 22:50 01.11.2015 22:41
01.11.2015 22:48 01.11.2015 22:41
01.11.2015 22:11 01.11.2015 22:00
01.11.2015 22:05 01.11.2015 22:00
01.11.2015 22:07 01.11.2015 22:00
01.11.2015 21:28 01.11.2015 21:28
01.11.2015 21:23 01.11.2015 21:13
答案 1 :(得分:0)
我已经成功解决了这个代码的问题,它基本上得到了第一个匹配的间隔时间(使用ROW($ Y $ 1)基于日期和城市的特定事件时间(城市代码不包括在这里,因为我仅使用日期和时间作为要求)。
=IFERROR(INDEX(Interval!$D$2:$D$5322,SMALL(IF((EventTime!A2=Interval!$A$2:$A$5322)*(EventTime!B2>=LEFT(Interval!$D$2:$D$5322,5)+0)*(EventTime!B2<RIGHT(Interval!$D$2:$D$5322,5)+0),ROW(Interval!$D$2:$D$5322)-MIN(ROW(Interval!$D$2:$D$5322))+1,""),ROW($Y$1)))," ")
这适用于我的主要问题,除了有2个事件时间彼此非常接近但被映射到单独的时间间隔(轶事示例,事件时间14:14和14:43,14:14将映射到14 :14 - 14:44和14:43将映射到14:30 - 15:00。这很好,因为这仍然适合我们的目的,但我可能会使用一些VBA或R来获得更紧密的事件时间到区间映射。