这是一个工作表函数解决方案。它不是很漂亮,但如果你完全反对使用 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 中输入公式(作为数组公式!),填写到@987654328 @,然后向右填写E10。您的拆分名称列表将位于 E1:E10。
如果你倾向于跳下兔子洞,这里是公式的简要说明:
- 检查每个字符以查看它是否在大写字母的 ASCII 范围内并且前面没有空格。名称的第一个字符被跳过。
- 一个大小等于字符串长度(减 1)的数组按如下方式填充: 如果找到匹配项,则存储该字符串,匹配的字符被其前面的空格替换。如果未找到匹配项,则存储原始字符串。
- 返回此数组中与匹配项对应的第一个元素。如果未找到匹配项,则返回原始字符串。