我有一个字符串(在H2中):
LARSON, JOHN (PIZZA MAKERS INC)
...而且我只希望该名称产生:
JOHN LARSON
到目前为止,我有以下内容(在I2中)仅用于获取名称,但需要交换订单。
=SUBSTITUTE(LEFT(H2,FIND(" ",H2,FIND(" ",H2)+1)-1),",","")
并在第二列(J2)中交换以下内容,但必须有一个更简洁的方法。
=MID(I2&" "&I2,FIND(" ",I2)+1,LEN(I2))
有任何线索或提示吗?在此先感谢!
答案 0 :(得分:0)
这很丑陋,但只要格式始终为<LASTNAME>, <FIRSTNAME> <WHATEVER>
,它就可以完成工作:
=MID(A1, FIND(",",A1, 1)+2, FIND(" ", A1, FIND(",", A1, 1)+2) - FIND(",", A1, 1) - 2) & " " & LEFT(A1,FIND(",", A1, 1)-1)
使用UDF在VBA中解决此问题可能更干净:
Function getName(bigNameString As String) As String
Dim lastName As String, firstName As String
lastName = Left(Split(bigNameString, " ")(0), Len(Split(bigNameString, " ")(0)) - 1)
firstName = Split(bigNameString, " ")(1)
getName = firstName & " " & lastName
End Function
只需将其粘贴在新模块中,保存工作簿(带.xlsm后缀),您就可以在单元格中使用它:
=getName(A1)
答案 1 :(得分:0)
尝试
=TRIM(LEFT(SUBSTITUTE(REPLACE(A2, 1, FIND(",", A2)+1, TEXT(,)), " ", REPT(" ", LEN(A2))), LEN(A2))&LEFT(A2, FIND(",", A2)-1))
答案 2 :(得分:0)
这是UDF,它使用正则表达式从字符串中提取(并反转)前两个逗号分隔的子字符串。
Option Explicit
Function getName(S As String) As String
Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
With RE
.Global = True
.Pattern = "(\w+),\s*(\w+).*"
getName = .Replace(S, "$2 $1")
End With
End Function
这是正则表达式和替换字符串的说明
(\w+),\s*(\w+).*
(\w+)
,
\s*
(\w+)
.*
$ 2 $ 1
$2
$1
由RegexBuddy创建