从文本中提取名称

Kat*_*e B 5 excel vba substring extract excel-vba

这是一个单元格中包含的示例数据:

2014/08/19 12:59 John Doe
添加sample@hotmail.com

我需要在文本中提取名称.我知道它总是放在日期时间戳之后.

我的想法是找到":"的位置并添加4,从而获得第一个字母的第一个字母的位置:

colonLoc = InStr(sampleData, ":")
firstLetterLoc = colonLoc + 4
Run Code Online (Sandbox Code Playgroud)

我怎么能得到那之后的名字和姓氏?

Sid*_*out 6

这是一个实现你想要的内衬.

debug.print Mid(Split(Split(Range("A1").Value, Chr(10))(0), ":")(1), 3)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

编辑:

实际上你不需要VBA.您也可以使用Excel公式

=MID(A1,FIND(":",A1)+3,FIND(CHAR(10),A1)-(FIND(":",A1)+3))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 我冒昧地从你的回答中删除你的评论......让人们选择最好的答案 - 显然是你的最新问题! (3认同)

Jea*_*ett 4

这甚至适用于带有空格的名称:

\n\n
Function ExtractName(str As String) As String\n    Dim i As Long\n    Dim splitStr() As String\n    Dim nameParts() As String\n    splitStr = Split(str, " ")\n    ReDim nameParts(LBound(splitStr) To UBound(splitStr) - 4)\n    For i = LBound(nameParts) To UBound(nameParts)\n        nameParts(i) = splitStr(i + 2)\n    Next i\n    ExtractName = Join(nameParts, " ")\nEnd Function\n
Run Code Online (Sandbox Code Playgroud)\n\n

其有效作用是删除四个子字符串:日期、时间、位add和电子邮件地址。中间的其他所有内容都被假定为名称的一部分。

\n\n

用法示例:

\n\n
Debug.Print ExtractName("2014/08/19 12:59 John Doe add sample@hotmail.com")\nDebug.Print ExtractName("2014/08/19 12:59 Johan Sebastian Bach add sample@hotmail.com")\nDebug.Print ExtractName("2014/08/19 12:59 Fuh Wei Guo Tang add sample@hotmail.com")\nDebug.Print ExtractName("2014/08/19 12:59 Jens von dem Hagen add sample@hotmail.com")\nDebug.Print ExtractName("2014/08/19 12:59 Jos\xc3\xa9 Manuel de Santiago Itthuralde add sample@hotmail.com")\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑现在你说你的输入字符串被分成两行...这对我来说适用于你指定的输入:

\n\n
Function ExtractName(str As String) As String\n    Dim i As Long\n    Dim splitStr() As String\n    Dim nameParts() As String\n    splitStr = Split(Split(str, vbLf)(0), " ")\n    ReDim nameParts(LBound(splitStr) To UBound(splitStr) - 2)\n    For i = LBound(nameParts) To UBound(nameParts)\n        nameParts(i) = splitStr(i + 2)\n    Next i\n    ExtractName = Join(nameParts, " ")\nEnd Function\n
Run Code Online (Sandbox Code Playgroud)\n

  • 是啊……回答千变万化的问题总是很困难! (2认同)