网友“嘟嘟”有一个提取数据的问题:
源数据:
需要获取的数据:
错误报警:从报警提示里“Error #W16 (09:41:17)”提取“W16”
停机时间点:就是“Error #W16 (09:41:17)”,“()”里面的时间点“(09:41:17”
行动时间点:A列找到错误报警后再到B列向下找第一次出现“Message Box Sucessfully Destroy”找到后将对应D列的时间获取
成功解除报警:在向下找第一次出现“Message Box Sucessfully Destroy”,找到后将D列时间获取
备注:数据源是从设备上直接导出,需要提取整理出有用的数据,以前都是手动一个一个找,经常出错和找漏。
错误报警提示例子:规律就是都有“#”和“()”里有时间点
Error #W16 (09:41:17)
Error #B27 (09:43:56) Wire No. 54
Error #B27 (09:46:04) Wire No. 66
Error #B27 (09:47:30) Wire No. 103
作者:初心-Office中国
Excel提取数据结果
添加按钮,写入下面的宏代码,点击按钮即可自动获取需要的数据。
Excel提取报警信息详细VBA代码:
Sub test()
Dim arr(), brr(1 To 999999, 1 To 7), m As Long, i As Long, crr, j As Long, kg As Boolean, t
arr = Sheet2.UsedRange.Value
For i = 1 To UBound(arr)
If Len(arr(i, 1)) > 0 Then
If InStr(arr(i, 1), "Error #") > 0 Then
m = m + 1
crr = Split(arr(i, 1), " ")
brr(m, 1) = Replace(crr(2), "#", "")
brr(m, 2) = TimeValue(Replace(Replace(crr(3), "(", ""), ")", ""))
kg = False
For j = i + 1 To UBound(arr)
If Len(arr(j, 2)) > 0 Then
If kg = False Then
If InStr(arr(j, 2), "Operation: Message Box") > 0 Then
brr(m, 3) = TimeValue(Split(arr(j, 4), " ")(2))
kg = True
End If
Else
If InStr(arr(j, 2), "Operation: Warning Message") > 0 Then
brr(m, 4) = TimeValue(Split(arr(j, 4), " ")(2))
Exit For
End If
End If
End If
Next
If kg = True Then
brr(m, 6) = Format(brr(m, 3) - brr(m, 2), "hh:mm:ss")
brr(m, 7) = Format(brr(m, 4) - brr(m, 3), "hh:mm:ss")
End If
i = i + (j - i)
End If
End If
Next
Sheet1.Range("A2").Resize(m, 7) = brr
End Sub
如喜欢此技巧,手机右上角点开,分享到QQ空间,方便自己以后看