Excel VBA-将文本块分成可用的部分

时间:2018-06-26 03:07:30

标签: excel vba

我第一次遇到一个无法通过Internet搜索解决的excel问题:(

我可以从我们的工作数据库系统中导出类似于以下格式的文本字符串。它基本上是对工作状态的更改的堆栈。我想对此进行分解,以便可以记录每个步骤花费的时间。因此,我需要区分状态和更改状态的日期。

我每隔一秒钟就对状态更改进行加粗显示,以使其“更容易”阅读。

有人有什么想法吗?

处理中(21/5/2018 11:54:30 AM-Joe Blogs)处理 越南修正(21/5/2018 8:47:33 AM-Joe Blogs)越南修正 处理中(16/5/2018 8:20:53 AM-Joe Blogs)处理中 越南修正(15/5/2018 12:07:23 PM-Joe Blogs)越南修正 处理中(14/5/2018 11:30:45 AM-Joe Blogs)处理 Str。 uff信打印(10/5/2018 8:46:54 AM-jane.doe.jnr) 越南起草(9/5/2018 2:49:33 PM-Joe Blogs)处理 处理中(9/5/2018 11:15:18 AM-Joe Blogs)处理中 Str。 uff信函已打印(7/5/2018 2:55:43 PM-jane.doe.jnr) 越南布局(7/5/2018 3:06:32 PM-Joe Blogs)越南布局 Str。 uff信函已打印(7/5/2018 11:22:18 AM-Joe Blogs) 通过电子邮件发送确认邮件(7/5/18-Joe Blogs) 处理中(7/5/2018 11:21:10 AM-Joe Blogs)处理中 新(7/5/2018 11:20:52 AM-Joe Blogs)

1 个答案:

答案 0 :(得分:0)

文本到列并粘贴转置。

您可以记录以下步骤来制作vba脚本或自己编写:

  1. 选择包含数据的单元格
  2. 单击“文本到列”
  3. 选择“定界”
  4. 单击下一步
  5. 勾选“其他”,然后在文本框中输入一个右括号
  6. 单击完成
  7. 突出显示行并复制
  8. 选择另一个单元并进行转置粘贴
  9. 选择包含转置数据的列
  10. 单击“文本到列”
  11. 选择“定界”
  12. 单击下一步
  13. 勾选“其他”,然后在文本框
  14. 单击完成
  15. 选择新创建的具有日期和时间信息的列
  16. 单击“文本到列”
  17. 选择“定界”
  18. 单击下一步
  19. 勾选“其他”并在文本框中输入连字符-
  20. 单击完成

您现在将具有三列,分别包含作业,日期/时间和名称。

为方便起见,添加了上面的VBA代码,我编辑了录制的脚本以删除所有单元格选择。

为使脚本正常工作,您的数据必须位于单元格A1中,并且在此过程中删除此行:

Sub SplitData()

Range("A1").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
    :=")", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, _
    1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12 _
    , 1), Array(13, 1), Array(14, 1), Array(15, 1)), TrailingMinusNumbers:=True

Rows("1:1").Copy
Range("A2").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True

Rows("1:1").Delete Shift:=xlUp

Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
    :="(", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True

Columns("B:B").TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
    :="-", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True

Columns("B:B").EntireColumn.AutoFit

End Sub