Excel 从包含大量文本的单元格中提取文本

泰迪斯

我有一个包含来自 IT 票务系统的票证数据的电子表格。我需要从中提取数据的字段是非索引文本字段,因此我无法在工单系统本身中搜索该字段。我已将数据导出到 Excel 中,其中每个工单的整个工作备注字段都位于一个单元格中。输出如下所示:

2021-09-21 17:15:41 John Smith [Work Notes] - Update inside ticket 2021-09-21 16:12:39 Jane Doe [Work Notes] - Another update inside ticket.

我想要做的是捕获单个工作笔记并将它们分成自己的列,以便我可以计算更新之间的时间并计算每个人所做的更新次数。计算更新很容易,我使用了一个简单的 CountIF 公式来计算每个人在我导出的票证中进行更新的总次数。困难的部分是如何将每个更新拆分到自己的单元格中。

我已经清理了数据,以便唯一使用的时间括号 ( [ ] ) 用于 [工作注释] 或 [附加注释](客户可见的工作注释条目)。然后我尝试使用右括号作为分隔符的文本到注释,但这适用于将第一个条目拆分到它自己的单元格中,但下一个单元格将包含上一个条目的注释,然后是下一个条目。所以它看起来像这样:

2021-09-21 17:15:41 John Smith [Work Notes
*next cell*
- Update inside ticket 2021-09-21 16:12:39 Jane Doe [Work Notes

等等。这并没有真正起作用,因为我仍然无法执行时间计算并开始混淆工单中的不同更新。

有没有人有更好的方法来做到这一点的建议?如果需要,我愿意使用 VBA。谢谢您的帮助!

CDP1802

使用正则表达式。将字符串放在 Sheet1 的 A 列中。

Option Explicit

Sub extract()
    
    Dim wb As Workbook, ws As Worksheet, cell As Range
    Dim lastRow As Long, i As Integer, j As Integer
    Dim c As Long, s As String

   ' build regex pattern
    Dim regex As Object, m As Object
    Set regex = CreateObject("vbscript.regexp")
    With regex
       .Global = True
       .MultiLine = False
       .IgnoreCase = True
       .Pattern = "((20\d\d-\d\d-\d\d \d\d:\d\d:\d\d)(.*?)(\[[^]]*\]))" ' pattern
    End With

    ' data
    Set wb = ThisWorkbook
    Set ws = wb.Sheets("Sheet1")
    lastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row

    For Each cell In ws.Range("A1").Resize(lastRow)
         s = cell.Value
         c = 1
         If regex.test(s) Then
            Set m = regex.Execute(s) '
            For i = 1 To m.Count
                For j = 2 To m(i - 1).submatches.Count
                     cell.Offset(0, c) = m.Item(i - 1).submatches(j - 1) ' matched term
                     c = c + 1
                Next
            Next
        End If
    Next

    MsgBox lastRow & " rows parsed", vbInformation

End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章