我有两个数据集:
数据集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
答案 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语言知识才能解决问题......