Получите первые два слова, разделенные запятой и пробелом, и поменяйте местами порядок - PullRequest
0 голосов
/ 03 июля 2018

У меня есть строка (в 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))

Есть какие-нибудь подсказки или подсказки? Заранее спасибо !!

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

Попробуйте,

=TRIM(LEFT(SUBSTITUTE(REPLACE(A2, 1, FIND(",", A2)+1, TEXT(,)), " ", REPT(" ", LEN(A2))), LEN(A2))&LEFT(A2, FIND(",", A2)-1))
0 голосов
/ 03 июля 2018

Вот 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+).*

$ 2 $ 1

Создано с помощью RegexBuddy

0 голосов
/ 03 июля 2018

Это довольно уродливо, но это делает работу до тех пор, пока формат всегда <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)

Может быть, лучше решить эту проблему в VBA с помощью UDF:

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)
...