我有一个包含来自 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。谢谢您的帮助!
使用正则表达式。将字符串放在 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] 删除。
我来说两句