Excel公式:如何用大写字母拆分字符串

时间:2018-07-20 09:12:37

标签: excel excel-formula

使用公式而不是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)}

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

您正在按此要求推送信封。您要实现的目标需要重复遍历同一字符串。只能使用递归来完成,而Excel公式则不执行递归。

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

答案 1 :(得分:2)

要实现此目的,您将需要纯VBA。创建一个自定义函数以在1个单元格中获取所需的字符串。然后,如果需要,请稍后使用“文本到列”。

我的功能:

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上使用时会得到什么

enter image description here

答案 2 :(得分:0)

在B2:C28中填写以下内容:

com.domain1.PersonRepository

注意:B28 =,C28 =

然后在A2 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 , 中拖动,直到A28,

在A29 =SUBSTITUTE(A1,B2,C2)中完成。

希望有帮助。 (:

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

或一行:

=RIGHT(A28,LEN(A28)-1)