【问题标题】:Excel Formula: how to split string by capital lettersExcel公式:如何用大写字母分割字符串
【发布时间】:2018-07-20 09:12:36
【问题描述】:

使用公式而不是 VBA,我想提出一个解决方案来拆分由多个单词组成的字符串。该公式应识别有大写字母的单词并将它们分开。结果将是一个字符串,其中单词由“,”分隔。

为了澄清这是一个字符串的例子:

Nursing StudentStudentNurseNursing School

Desired Result:
Nursing Student,Student,Nurse,Nursing School

我正在尝试以下公式,但我只能隔离第一个单词:

{=LEFT(Q4,SMALL(FIND(CHAR(ROW(INDIRECT("65:90"))),Q4&"ABCDEFGHIJKLMNOPQRSTUVWXYZ"),2)-1)}

有什么建议吗?

【问题讨论】:

  • 如果您需要工作簿无宏,您可以随时创建另一个工作簿,在原始工作簿中执行您想要的操作,不要认为您可以用公式解决问题跨度>
  • 你不能选择“文本到列”选项吗?使用有什么限制吗?
  • 您将如何使用“文本到列”来实现所需的结果?
  • 您忘记规定以空格分隔的单词应计为单个项目。目前你要求你的结果是:Nursing ,Student,Student,Nurse,Nursing ,School
  • 我很困惑。您在问题中明确表示您想要“一个公式,而不是 VBA”。但是您毫不费力地接受了 VBA 答案。怎么变心了?如果您对 VBA 解决方案感到满意,那很好。但是不要说你不想要 VBA。

标签: excel excel-formula


【解决方案1】:

要做到这一点,您将需要纯 VBA。创建一个自定义函数以在 1 个单元格中获取所需的字符串。然后,如果需要,稍后使用 Text to Columns。

我的功能:

Public Function GET_STRING(ByVal ThisCell As Range) As String
Dim i As Integer

Dim MyPositions As String
Dim ArrPositions As Variant

For i = 2 To Len(ThisCell.Value) Step 1
    If Mid(ThisCell.Value, i, 1) = UCase(Mid(ThisCell.Value, i, 1)) And _
    Mid(ThisCell.Value, i, 1) <> " " And Left(Mid(ThisCell.Value, i - 1, 1), 1) <> " " Then MyPositions = MyPositions & i & ";"
Next i

ArrPositions = Split(Left(MyPositions, Len(MyPositions) - 1), ";")

For i = 0 To UBound(ArrPositions) Step 1
    If i = 0 Then
        GET_STRING = Left(ThisCell.Value, ArrPositions(i) - 1) & "," & Mid(ThisCell.Value, ArrPositions(i), ArrPositions(i + 1) - ArrPositions(i))
    ElseIf i <> UBound(ArrPositions) Then
        GET_STRING = GET_STRING & "," & Mid(ThisCell.Value, ArrPositions(i), ArrPositions(i + 1) - ArrPositions(i))
    Else
        GET_STRING = GET_STRING & "," & Mid(ThisCell.Value, ArrPositions(i), Len(ThisCell.Value) - ArrPositions(i) + 1)
    End If
Next i

End Function

当我在excel上使用它时得到什么

【讨论】:

    【解决方案2】:

    您正在挑战这个要求。您想要实现的目标需要重复循环相同的字符串。这只能通过递归来完成,而 Excel 公式不进行递归。

    在现代 Excel 2016 中,您拥有 Power Query(Get & Transform,或 Excel 2010 和 2013 的加载项),如果您不想使用 VBA,可以使用它在 M 代码中写出逻辑。 Power Query 可以保存在无宏工作簿中,并且可以通过单击功能区中的“全部刷新”命令来处理新数据。

    【讨论】:

      【解决方案3】:

      在 B2:C28 中填写这些:

      A   ,A
      B   ,B
      C   ,C
      D   ,D
      E   ,E
      F   ,F
      G   ,G
      H   ,H
      I   ,I
      J   ,J
      K   ,K
      L   ,L
      M   ,M
      N   ,N
      O   ,O
      P   ,P
      Q   ,Q
      R   ,R
      S   ,S
      T   ,T
      U   ,U
      V   ,V
      W   ,W
      X   ,X
      Y   ,Y
      Z   ,Z
       ,   
      

      注意:B28 = , C28 =

      然后在 A2 =SUBSTITUTE(A1,B2,C2) 然后拖到 A28,

      在 A29 =RIGHT(A28,LEN(A28)-1) 完成。

      希望对您有所帮助。 (:

      +-----[编辑]-----+

      或在一行中:

      =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"Z",",Z"),"Y",",Y"),"X",",X"),"W",",W"),"V",",V"),"U",",U"),"T",",T"),"S",",S"),"R",",R"),"Q",",Q"),"P",",P"),"O",",O"),"N",",N"),"M",",M"),"L",",L"),"K",",K"),"J",",J"),"I",",I"),"H",",H"),"G",",G"),"F",",F"),"E",",E"),"D",",D"),"C",",C"),"B",",B"),"A",",A")," ,"," ")
      

      【讨论】:

        【解决方案4】:

        这是我在访问 VBA 时使用的 传递一个字符串,如 ?GET_SPLIT_STRING("SplitAtCapitals") 并取回以下内容 在首都分裂

        Public Function GET_SPLIT_STRING(xStr As String) As String
        Dim i As Integer, xchar As String, ychar As String
        ychar = UCase(Left(xStr, 1))
        For i = 2 To Len(xStr) Step 1
            xchar = Mid(xStr, i, 1)
        
            If asc(xchar) = asc(UCase(xchar)) Then
                xchar = Space(1) & xchar
            End If
            ychar = ychar & xchar
        Next
        GET_SPLIT_STRING = ychar
        

        结束函数

        【讨论】:

          猜你喜欢
          • 2021-04-24
          • 1970-01-01
          • 1970-01-01
          • 2016-05-15
          • 1970-01-01
          • 2021-05-15
          • 2011-10-18
          • 2020-06-30
          • 1970-01-01
          相关资源
          最近更新 更多