您现在的位置是:首页 > Excel技巧>Excel VBA 提取数据一则

excel vba通过条件提取数据-Excel VBA 提取数据一则

发布于2022-04-150人已围观

网友“嘟嘟”有一个提取数据的问题:

源数据:

excel vba通过条件提取数据

需要获取的数据:

  1. 错误报警:从报警提示里“Error #W16 (09:41:17)”提取“W16”

  2. 停机时间点:就是“Error #W16 (09:41:17)”,“()”里面的时间点“(09:41:17”

  3. 行动时间点:A列找到错误报警后再到B列向下找第一次出现“Message Box Sucessfully Destroy”找到后将对应D列的时间获取

  4. 成功解除报警:在向下找第一次出现“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通过条件提取数据

 


 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


点击加入群:OFFICE3658 结识Excel大神
学好Excel,效率成倍提高,薪水稳步增长,职位快速提升
每天一个源创技巧,如觉得有用,请点上面 关注。更重要手机转发分享

如喜欢此技巧,手机右上角点开,分享到QQ空间,方便自己以后看




相关文章

文章评论

表情

共0条评论
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

标签云

站长特荐