String VBA中的字符串操作

String VBA中的字符串操作,string,vba,excel,texttrimming,String,Vba,Excel,Texttrimming,我有一个需要拆分为多个的列,就像excel中的文本到列一样。然而,还有一个小挑战。常规分隔符不起作用。考虑下面的字符串 Original: Domain\Domain Admins Domain2\User Group Domain3\Developers .....(And so on) Required: Domain\Domain Admins | Domain2\User Group | Domain3\Developers .....(And so on) 所需字符串中的管道意味着需

我有一个需要拆分为多个的列,就像excel中的文本到列一样。然而,还有一个小挑战。常规分隔符不起作用。考虑

下面的字符串
Original: Domain\Domain Admins Domain2\User Group Domain3\Developers .....(And so on)
Required: Domain\Domain Admins | Domain2\User Group | Domain3\Developers .....(And so on)
所需字符串中的管道意味着需要在此处拆分,并根据字符串的长度复制到下一列

我在A列有506行的列表。 我使用以下公式检查“\”I列B的出现情况,计数范围为0-66

=LEN(A2)-LEN(SUBSTITUTE(A2,"\",""))
我需要帮助来编写以下逻辑代码

  • 在字符串中查找“\”
  • 找到“\”前面的空格并拆分
  • 我使用了以下代码,但它不起作用

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

    请帮助编写一个记住第1点和第2点的代码。

    这是一个您可以使用的函数,注释+代码是不言自明的

    代码:

    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                   ' i.e. 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
    
    用法:

    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                   ' i.e. 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
    
    屏幕截图:

    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                   ' i.e. 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的解决方案,但现在应该可以了。

    我尝试使用以下代码的函数reverse(str As string)As string reverse=StrReverse(Trim(str))来反转字符串然而,End Function“仍然停留在如何查找\上,然后在\后的空格处拆分此文本来自何处?”?如果你能在它被连接之前加上引号,那就容易多了@Luke,Hi,文本是从SCCM报告导出的,该报告给出了广告林中所有对象的列表。我正在尝试从那里筛选用户组。您能否找到
    组域
    ,将其替换为
    组域
    (假设字符串中没有
    @
    ),然后在
    @
    上拆分?然后你可以换回来。不需要VBA,尽管这个过程可以自动化。好奇:你不能直接用域@(其中@是一个数字通配符)拆分吗?事实上,我确实在寻找一些通配符的方法,但想不出这么早的方法!请发布一个直接拆分,因为这将是最有效的(至少在代码行中)。而且,它比
    Domain@
    要复杂一些,因为
    Domain
    本身就是一个变量字符串