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)
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.

如果你倾向于跳下兔子洞,这里有一个简要说明公式的作用:
| 归档时间: |
|
| 查看次数: |
19030 次 |
| 最近记录: |