绘制不同数据集的时间轴,以识别(非)重叠

时间:2018-02-04 12:21:50

标签: excel vba

我有两个数据集:

数据集1:分辨率为10分钟,是一个二进制标志,表示“系统正常”或“系统不正常”。例如:

01/01/2018 12:10-12:20系统不正常

数据集2:这是故障日志,其中hh:mm:ss时间戳表示故障的开始 - 结束时间。例如:

活动故障代码X:01/01/2018 12:08:23-12:19:14

理想情况下,对于指示为“系统不正常”的每个时间跨度,必须有一个故障记录,涵盖该10分钟时段的一部分。但是,两端都存在不一致之处;要么我看到“系统不正常”,但没有故障覆盖10分钟或有“故障”但“系统正常”。

我想要实现的是过滤10分钟的时间跨度,其中存在任何一种不一致(理想情况下将其标记为“系统正常但活动故障”或“系统不正常但没有活动故障”。

您认为在Excel或VBA中可以实现吗?

提前感谢您的帮助!

故障记录
12月1日13:47 - 12月1日13:48
1月16日16:44 - 12月16日16:45 12月1日19:47 - 12月1日19:47
12月1日20:23 - 12月1日21:08
12月1日21:08 - 12月21日21:08 12月1日21:43 - 12月1日01:44 12月1日01:44 - 12月1日01:45
12月3日14:52 - 12月16日16:28 12月3日16:52 - 12月3日17:10
12月3日17:34 - 12月3日17:36
12月4日00:48 - 12月4日00:49
12月2日02:06 - 12月2日02:07
12月4日04:59 - 12月4日04:59
12月4日06:47 - 12月4日06:48
12月6日09:34 - 12月6日09:35
12月6日09:39 - 12月14日14:16 12月6日14:19 - 12月14日14:19 12月6日14:19 - 12月14日14:20

系统确认日志
12/1/2018 12:00 OK
12/1/2018 12:10 NOK
12/1/2018 12:20 OK
12/1/2018 12:30 OK
12/1/2018 12:40 OK
12/1/2018 12:50 OK
12/1/2018 13:00好的 12/1/2018 13:10好的 12/1/2018 13:20好的 12/1/2018 13:30 OK
12/1/2018 13:40 NOK
12/1/2018 13:50好的 12/1/2018 14:00好的 12/1/2018 14:10好的 12/1/2018 14:20好的 12/1/2018 14:30好的 12/1/2018 14:40 OK
12/1/2018 14:50好的 12/1/2018 15:00好的 12/1/2018 15:10好的 12/1/2018 15:20好的 12/1/2018 15:30 OK
12/1/2018 15:40 OK
12/1/2018 15:50好的 12/1/2018 16:00好的 12/1/2018 16:10好的 12/1/2018 16:20好的 12/1/2018 16:30 OK
12/1/2018 16:40好的 12/1/2018 16:50好的 12/1/2018 17:00好的 12/1/2018 17:10好的

期望的结果:

评价
12/1/2018 12:00
12/1/2018 12:10系统NOK但没有故障
12/1/2018 12:20
12/1/2018 12:30
12/1/2018 12:40
12/1/2018 12:50
12/1/2018 13:00
12/1/2018 13:10
12/1/2018 13:20
12/1/2018 13:30
12/1/2018 13:40
12/1/2018 13:50
12/1/2018 14:00
12/1/2018 14:10
12/1/2018 14:20
12/1/2018 14:30
12/1/2018 14:40
12/1/2018 14:50
12/1/2018 15:00
12/1/2018 15:10
12/1/2018 15:20
12/1/2018 15:30
12/1/2018 15:40
12/1/2018 15:50
12/1/2018 16:00
12/1/2018 16:10
12/1/2018 16:20
12/1/2018 16:30
12/1/2018 16:40系统正常但是故障
12/1/2018 16:50
12/1/2018 17:00
12/1/2018 17:10

1 个答案:

答案 0 :(得分:0)

我发布了一个可能有助于您尝试这样做的想法。对不起,我没有测试过,这只是一个起点。 首先添加对“Microsoft ActiveX Data Objects 6.1”的引用。然后尝试宏。 基本上你可以从TableA(在Sheet1上)过滤掉那些日期时间值不属于TableB中任何范围的记录(在Sheet2上)

TableA是第一行(标题) TimeOk 中的Sheet1。下一行有数据。

  TimeOK 
  12/1/2018 12:00

TableB是第一行(标题) FromTime ToTime 的Sheet2。下一行有数据

  FromTime               ToTime
  12/1/2018 13:47        12/1/2018 13:48

在两张纸上以一致模式将单元格类型设置为日期和格式,然后很好地作为日期时间。请勿使用与yuu发布的数据不同的日期格式。

宏应该在Sheet3上写入结果(确保你添加它)

Sub GetSpecialRecords()

 Dim sQuery As String, sFileName  as String
 Dim conn As New ADODB.Connection
 Dim rs As New ADODB.Recordset

 sFileName = ThisWorkbook.FullName
 sConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""" & _
   sFileName & """;Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX = 1"""

 Conn.Open sConnection 
 sQuery = "SELECT t1.[TimeOk] From [Sheet1$] t1 INNER JOIN [Sheet2$] t2 ON t1.[TimeOk]>= t2.FromTime AND t1.[TimeOk] <= t2.[ToTime]"
  rs.Open sQuery , Conn

 ThisWorkbook.Sheets("Sheet3").Range("A2").CopyFromRecordset rs
 rs.Close
 conn.Close

End Sub

正如我所说,从这开始,你需要一点SQL语言知识才能解决问题......