在Excel中拆分大写的单词(Split Uppercase words in Excel)

2019-06-23 17:20发布

我想在由大写,一个例子我的细胞分裂的所有单词:

原始值:

MikeJones
RinaJonesJunior
MichealSamuelsLurth

预期输出:

Mike Jones
Rina Jones Junior
Micheal Samuels Lurth

这能不使用VBA做了什么?

Answer 1:

已经承认Excellll的卓越公式,最高效的代码解决方案将RegExp基础。 这避免了长时间的循环。

Function SplitCaps(strIn As String) As String
Dim objRegex As Object
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
    .Global = True
    .Pattern = "([a-z])([A-Z])"
    SplitCaps = .Replace(strIn, "$1 $2")
End With
End Function


Answer 2:

这里是一个工作表函数的解决方案。 它是不是很漂亮,但如果你是完全反对使用VBA,那么我认为你就完蛋了,只有丑陋的选择。 用于以文本A1 ,以下内容粘贴到B1 ,然后按下Ctrl + Shift + Enter键输入公式作为数组公式:

=IFERROR(INDEX(IF(CODE(MID(D1,ROW(INDIRECT("A2:A"&LEN(D1))),1))<=90,IF(CODE(MID(D1,ROW(INDIRECT("A2:A"&LEN(D1))),1))>=65,IF(MID(D1,ROW(INDIRECT("A1:A"&LEN(D1)-1)),1)<>" ",REPLACE(D1,ROW(INDIRECT("A2:A"&LEN(D1))),1," "&MID(D1,ROW(INDIRECT("A2:A"&LEN(D1))),1)),D1),D1),D1),MIN(IF(CODE(MID(D1,ROW(INDIRECT("A2:A"&LEN(D1))),1))<=90,IF(CODE(MID(D1,ROW(INDIRECT("A2:A"&LEN(D1))),1))>=65,IF(MID(D1,ROW(INDIRECT("A1:A"&LEN(D1)-1)),1)<>" ",ROW(INDIRECT("A1:A"&LEN(D1)-1)),2000000),2000000),2000000))),D1)

我告诉你这是丑陋的!

而对于所有这些努力,那样只会分开第一和第二个名字。 欲了解更多分裂,填充公式到右侧。 因此,举例来说,如果你有名称的列表A1:A10 ,你想以任何名义字数最多为四,您可以输入的公式B1 ,向下填充到(作为数组公式!) B10 ,然后填写正确的E10 。 你分裂名单将在E1:E10

如果你倾向于跳下兔子洞,这里的公式做什么的简要说明:

  1. 检查每个字符,看它是否是在ASCII范围大写字母,而不是前面有一个空格。 名称的第一个字符被跳过。
  2. 阵列尺寸等于该字符串(减1)被填充如下的长度:如果发现匹配,则该字符串被存储与由前述本身的空间取代的匹配字符。 如果没有找到匹配的,原来的字符串存储。
  3. 从这个数组对应于匹配的第一个元素被返回。 如果没有找到匹配,返回原始字符串。


Answer 3:

既然你说你不希望使用VBA宏,但问题需要VBA,我认为一个UDF将是你一个很好的解决方案。 这是一个UDF(用户自定义功能),您可以使用。 将这个代码,你必须在数据中的相同文件的通用模块。

Function splitbycaps(inputstr As String) As String

Dim i As Long
Dim temp As String

If inputstr = vbNullString Then
    splitbycaps = temp
    Exit Function
Else
    temp = inputstr
    For i = 1 To Len(temp)
        If Mid(temp, i, 1) = UCase(Mid(temp, i, 1)) Then
            If i <> 1 Then
                temp = Left(temp, i - 1) + " " + Right(temp, Len(temp) - i + 1)
                i = i + 1
            End If
        End If
    Next i
    splitbycaps = temp

End If
End Function

现在,您可以在单元格中直接使用该功能。 假设你在A1有数据 - >“MikeJones”而你要在单元格A2回答。 因此,在A2,你进入

=splitbycaps(A1)

你会得到你的输出。 HTH。



Answer 4:

你有VBA做到这一点。

Sub insertspaces()
Range("A1").Select
Do
    Row = ActiveCell.Row
    Column = ActiveCell.Column
    vlaue = ActiveCell.Value
    If vlaue = "" Then Exit Do
        Length = Len(vlaue)
        If Length > 1 Then
            For x = Length To 2 Step -1
            par = Mid(vlaue, x, 1)
            cod = Asc(par)
            If (cod > 64 And cod < 91) Or (cod > 191 And cod < 222) Then
            vlaue = Left(vlaue, x - 1) + " " + Mid(vlaue, x)
            End If
        Next
        ActiveCell.Value = vlaue
        End If
    Row = Row + 1
    Cells(Row, Column).Select
Loop
End Sub


Answer 5:

这将作为工作的一个用户定义的函数。

Function SplitOnCapital(str As String) As String
    Dim letter As Byte, result As String

    For letter = 2 To Len(str)
        If Asc(VBA.Mid$(str, letter, 1)) < 90 Then //65 to 90 are char codes for A to Z
            result = WorksheetFunction.Replace(str, letter, 0, " ")
            letter = letter + 1
        End If
    Next letter

    SplitOnCapital = result
End Function


Answer 6:

Sub caps_small()

strIn = InputBox("Enter a string:")

For i = 1 To Len(strIn)

    If Mid(strIn, i, 1) Like "[A-Z]" Then
        cap = Mid(strIn, i, 1)
        capstr = capstr & cap

    ElseIf Mid(strIn, i, 1) Like "[a-z]" Then
        sml = Mid(strIn, i, 1)
        smlstr = smlstr & sml
    End If
Next

MsgBox capstr

MsgBox smlstr


End Sub


文章来源: Split Uppercase words in Excel