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)
我怎么能得到那之后的名字和姓氏?
这是一个实现你想要的内衬.
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)

这甚至适用于带有空格的名称:
\n\nFunction 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\nRun Code Online (Sandbox Code Playgroud)\n\n其有效作用是删除四个子字符串:日期、时间、位add和电子邮件地址。中间的其他所有内容都被假定为名称的一部分。
用法示例:
\n\nDebug.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")\nRun Code Online (Sandbox Code Playgroud)\n\n编辑现在你说你的输入字符串被分成两行...这对我来说适用于你指定的输入:
\n\nFunction 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\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
303 次 |
| 最近记录: |