VBA中的string处理

我有单列需要拆分为多个,如在Excel中的文本到列。 但是有一个小小的挑战。 常规分隔符不起作用。 考虑下面的string

Original: Domain\Domain Admins Domain2\User Group Domain3\Developers .....(And so on) Required: Domain\Domain Admins | Domain2\User Group | Domain3\Developers .....(And so on) 

需要的string中的pipe道意味着它需要在这里拆分,并根据string的长度复制到下一列。

列A中有506行的列表。 我使用下面的公式来检查“\”我列B的发生,计数范围从0-66

 =LEN(A2)-LEN(SUBSTITUTE(A2,"\","")) 

我需要帮助来编写以下逻辑

  1. 在string中查找“\”
  2. 在“\”之前find空格并分割

我使用下面的代码,但它没有达到目的

 Range("A1:A506").Select Selection.TextToColumns 

请帮助保持点1和2的代码。

这是一个你可以使用的function,注释+代码是不言自明的

码:

 Function SplitThis(InputStr As String) As Variant Dim SplitStr() As String, SubStr() As String, RightmostStr As String Dim OutputStr() As String Dim Delim_Level1 As String, Delim_Level2 As String, Delim_Cut As String Delim_Level1 = "\" Delim_Level2 = " " Delim_Cut = "}" ' Any character you are guaranteed not to find in your original string 'InputStr = "Domain\Domain Admins Domain2\User Group Domain3\Developer" SplitStr = Split(InputStr, Delim_Level1) ' SplitStr(0) = "Domain" ' SplitStr(1) = "Domain Admins Domain2" ' SplitStr(2) = "User Group Domain3" ' SplitStr(3) = "Developer" Dim i As Long For i = 1 To UBound(SplitStr) - 1 ' ie 1 --> 2 SubStr = Split(SplitStr(i), Delim_Level2) RightmostStr = SubStr(UBound(SubStr)) ReDim Preserve SubStr(0 To UBound(SubStr) - 1) SplitStr(i) = Join(SubStr, Delim_Level2) & Delim_Cut & RightmostStr Next i ' SplitStr(0) = "Domain" ' SplitStr(1) = "Domain Admins{Domain2" ' SplitStr(2) = "User Group{Domain3" ' SplitStr(3) = "Developer" ' These are joined to create: ' "Domain\Domain Admins}Domain2\User Group}Domain3\Developer" ' ' Which is split at the character "}" to create the output OutputStr = Split(Join(SplitStr, Delim_Level1), Delim_Cut) Dim OutputVariant() As Variant ReDim OutputVariant(0 To 0, 0 To UBound(OutputStr)) For i = 0 To UBound(OutputStr) OutputVariant(0, i) = OutputStr(i) Next i SplitThis = OutputVariant End Function 

用法:

 Cell A1 : "Domain\Domain Admins Domain2\User Group Domain3\Developer" Cell A3:C3: {=SplitThis(A1)} ' Array formula 

截图:

在这里输入图像说明

唠叨怀疑:我有这种感觉,最有效的方法是使用一些基于正则Regex的解决scheme,但现在应该这样做。