在Excel中拆分大写单词

Vis*_*Net 18 regex excel vba excel-vba excel-formula

我想用大写字母拆分我单元格中的所有单词,例如:

原始值:

MikeJones
RinaJonesJunior
MichealSamuelsLurth
Run Code Online (Sandbox Code Playgroud)

预期产量:

Mike Jones
Rina Jones Junior
Micheal Samuels Lurth
Run Code Online (Sandbox Code Playgroud)

这可以在不使用VBA的情况下完成吗?

bre*_*tdj 25

承认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
Run Code Online (Sandbox Code Playgroud)

  • 我希望你能来一个RegEx解决方案!它似乎是要走的路. (2认同)

Exc*_*lll 17

这是一个工作表函数解决方案.它并不漂亮,但是如果你完全不喜欢使用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)
Run Code Online (Sandbox Code Playgroud)

我告诉过你这很难看!

尽管如此,这只会分割出第一个和第二个名字.要获得更多分割,请将公式填充到右侧.因此,例如,如果您有一个名称列表A1:A10,并且您认为任何名称中的大多数单词都是四,您可以输入公式B1(作为数组公式!),填充到B10,然后填写右边E10.您的拆分名称列表将在E1:E10.

样品使用配方

如果你倾向于跳下兔子洞,这里有一个简要说明公式的作用:

  1. 检查每个字符是否在大写字母的ASCII范围内,而不是以空格开头.跳过名称的第一个字符.
  2. 大小等于字符串长度(减1)的数组填充如下:如果找到匹配项,则存储字符串,匹配字符由其前面的空格替换.如果未找到匹配项,则存储原始字符串.
  3. 返回此数组中与匹配对应的第一个元素.如果未找到匹配项,则返回原始字符串.