Excel索引匹配查找日期,时间间隔返回错误值之间的时间

时间:2016-03-02 05:44:19

标签: excel excel-formula vlookup

我有一个工作表,其中包含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输入所有这些公式。

我已经被困在这几天了,它开始让我疯了,我想我已经走上了正确的轨道,但我真的很遗憾。

该文件已在此处上传

http://www.filedropper.com/example_1

2 个答案:

答案 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来获得更紧密的事件时间到区间映射。