1

我有需要拆分为多个的单列,例如 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,"\",""))

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

  1. 在字符串中查找“\”
  2. 找到“\”之前的空格并拆分

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

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

请帮助记住第 1 点和第 2 点的代码。

4

1 回答 1

0

这是您可以使用的功能,注释+代码是不言自明的

代码:

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

截屏:

在此处输入图像描述

Nagging Doubt:我觉得最有效的方法是使用一些Regex基于解决方案,但现在应该这样做。

于 2014-07-18T08:46:38.663 回答