在 Excel 中按大写和小写单词拆分单元格

在 Excel 中按大写和小写单词拆分单元格

我有一个包含联系人的 CSV 文件,我想将其导入在线联系人列表。

不幸的是,CSV 文件只有一列用于存储全名,并且没有区分“名字”和“姓氏”列,而这正是我需要的。我想知道是否有 Excel 函数可以进行拆分(或者任何其他建议,考虑到我是 C# 开发人员,但不懂 Excel VB 脚本)。

好消息是,“全名”列确实总是以大写的姓氏开头,然后是驼峰式名字,姓氏可能包含撇号,名字和姓氏都可以包含多个单词。以下是一些示例:

1) LASTNAME Firsname; Other data; ... 

2) LASTNAME LASTNAME Firsname; Other data; ... 

3) LASTNAME' LASTNAME Firsname; Other data; ... 

4) LASTNAME' LASTNAME LASTNAME Firsname Firstname; Other data; ... 

我需要将其转换为:

1) Lastname; Firsname; Other data; ... 

2) Lastname Lastname; Firsname; Other data; ... 

3) Lastname' Lastname; Firsname; Other data; ... 

4) Lastname' Lastname Lastname; Firsname Firstname; Other data; ...

感谢您的帮助。

答案1

我假设您已经导入了 CSV 文件,并且姓名列表位于 A 列。

此公式创建一个“辅助”列,其中包含名字最后一个字母的位置:

=MATCH(1,(CODE(MID(A2,ROW(A$1:A$50),1))>96)*(CODE(MID(A2,ROW(A$1:A$50),1))<123),0)-3

CTRLShiftEnter这是一个数组公式,必须用而不是 来输入Enter。如果输入正确,公式栏中的公式将被花括号括起来。此公式已从下表中的 B2 向下填充。

在此处输入图片描述

怎么运行的: MID()创建名称中所有字母的数组(最多 50 个字母)。ROW()用于生成从 1 到 50 的数字列表。因此,如果您的任何名称都可以更长超过 50 个字符,则应A$50根据需要增加字数。

CODE()将字母数组转换为其 ASCII 代码。比较>96<123检查小写 ASCII 字母,同时将数组转换为 True/False 值,其中任何小写字母都为 True。

乘法相当于逻辑运算AND(),并将 True/False 值转换为 1 和 0。最后,MATCH()找到该数组中第一个 1 的位置,即姓名中第一个小写字母的位置。减去 3 可确定名字的最后一个字母。

现在,使用辅助列,可以在 C 列中列出姓氏:

=PROPER(LEFT(A2,B2))

这将把 A 列的全大写部分转换为 Excel 所称的“正确”大小写,这似乎与“驼峰式”大小写相同。

名字列在 D 列中:

=RIGHT(A2,LEN(A2)-B2-1)

相关内容