EXCEL - 提取并用字母替换单词

EXCEL - 提取并用字母替换单词

我在 Excel 中有一个班级的姓名列表。它包含一列“全名”。全名有 3 个部分,即:1. 名字 (FN) 2. 中间名 (MN) 3. 姓氏 (SN)

例如:Aashish Ajit Handa (FN) (MN) (SN)

我希望能够将其更改为 Aashish A. Handa,即应搜索中间名,并且第一个字母应替换 (MN)。中间名的字符长度不同。

答案1

选择与您的模式匹配的名称并运行这个简短的宏:

Sub NameFixer()
    Dim s As String, r As Range

    For Each r In Selection
        ary = Split(r.Text, " ")
        ary(1) = Left(ary(1), 1)
        r.Value = Join(ary, " ")
    Next r
End Sub

前:

在此处输入图片描述

之后:

在此处输入图片描述

(由于没有错误检查,因此避免选择与您的模式不匹配的单元格)

答案2

解决此问题的一种非宏方法是将 3 个名称分解为一个公式并将其合并。我通常会为此使用名称管理器,但也将显示不使用名称管理的扩展公式。(所有这些示例都将使用 a1 单元格作为名称,名称为名称(空格)名称(空格)名称格式步骤 1 获取名字。

  1. Fname=+LEFT(Sheet1!A1,FIND(" ",Sheet1!A1)) 这将搜索第一个空格并返回左侧的所有内容

  2. Lname=+RIGHT(Sheet1!A1,LEN(Sheet1!A1)-FIND(" ",Sheet1!A1,1+LEN(Fname))) 这将返回姓氏。我们需要姓和名来括住答案。这假设只有 2 个空格,并通过在第一个空格后开始查找来搜索第二个空格。

  3. Mname=MID(Sheet1!A1,1+LEN(Fname),LEN(Sheet1!A1)-LEN(Fname)-LEN(Lname)) 这将使用 Fname 和 Lname 括起来返回完整的中间名。

把一切放在一起

  1. =(Fname&LEFT(MName,1)&". " &Lname) 如果不想要句点,则 left(mname,1) 后面的 ". " 可以是 " "。

在一行中不使用名称

  1. =LEFT(A1,FIND(" ",A1))&LEFT(MID(A1,FIND(" ",A1)+1,1))&". "&RIGHT(A1,LEN(A1)-FIND(" ",A1,1+FIND(" ",A1)))

这种方法的问题在于,

  • 对数据结构问题敏感,在 iferror 前面加上一个 ,"名称格式错误",例如
  • =+IFERROR(Fname&LEFT(MName,1)&" " &Lname,"名称格式错误")

可能还需要进行替换,将双空格替换为单空格。

  • Aname=substitute(a1," "," ")

这取决于您的数据源是否完全遵循格式。

相关内容