Извлечь последнюю подстроку из ячейки
У меня есть имена в столбце. Мне нужно разделить только фамилии из этого столбца на другой столбец.
Фамилия ограничена пробелом с правой стороны.
Содержимое в ячейке A2 = Alistair Stevens
, и я ввел формулу в ячейку B2
(мне нужно 'Stevens'
в ячейке B2
)
Я попытался использовать следующие формулы:
=RIGHT(A2,FIND(" ",A2,1)-1)
=RIGHT(A2,FIND(" ",A2))
Обе эти формулы работают для этой ячейки, но когда я ее заполняю/копирую и вставляю в ячейки ниже, это не работает. Я получаю неправильные значения!
A3 -> David Mckenzie
B3 -> Mckenzie
Ответы
Ответ 1
Это работает, даже если есть средние имена:
=MID(A2,FIND(CHAR(1),SUBSTITUTE(A2," ",CHAR(1),LEN(A2)-LEN(SUBSTITUTE(A2," ",""))))+1,LEN(A2))
Если вы хотите, чтобы все, кроме фамилии, просмотрите этот ответ.
Если в ваших именах есть конечные пробелы, вы можете удалить их, заменив все экземпляры A2
на TRIM(A2)
в приведенной выше формуле.
Обратите внимание, что только с чистой вероятностью ваша первая формула =RIGHT(A2,FIND(" ",A2,1)-1)
работает для Alistair Stevens
. Это связано с тем, что "Alistair"
и " Stevens"
содержат одинаковое количество символов (если вы считаете ведущее пространство в " Stevens"
).
Ответ 2
Ответ, предоставленный @Jean, обеспечивает рабочее, но неясное решение (хотя оно не обрабатывает конечные пробелы)
В качестве альтернативы рассмотрим функцию, определенную пользователем vba (UDF)
Function RightWord(r As Range) As Variant
Dim s As String
s = Trim(r.Value)
RightWord = Mid(s, InStrRev(s, " ") + 1)
End Function
Использование в листе как
=RightWord(A2)
Ответ 3
Попробуйте следующее:
=RIGHT(TRIM(A2),LEN(TRIM(A2))-FIND(" ",TRIM(A2)))
Я смог скопировать/вставить формулу, и она отлично работала.
Вот список текстовых функций Excel (который работал в мае 2011 года, но может быть разорван в следующий раз, когда Microsoft изменит их Веб-сайт).: - (
Вы можете использовать многоступенчатые вложенные функции IF() для обработки средних имен или инициалов, заголовков и т.д., если вы ожидаете их. Формулы Excel не поддерживают цикл, поэтому есть некоторые ограничения на то, что вы можете сделать.
Ответ 4
Right(A1, Len(A1)-Find("(asterisk)",Substitute(A1, "(space)","(asterisk)",Len(A1)-Len(Substitute(A1,"(space)", "(no space)")))))
Попробуйте это. Надеюсь, что это сработает.
Ответ 5
Попробуйте эту функцию в Excel:
Public Shared Function SPLITTEXT(Text As String, SplitAt As String, ReturnZeroBasedIndex As Integer) As String
Dim s() As String = Split(Text, SplitAt)
If ReturnZeroBasedIndex <= s.Count - 1 Then
Return s(ReturnZeroBasedIndex)
Else
Return ""
End If
End Function
Вы используете его следующим образом:
Имя (A1) | Фамилия (A2)
Значение в ячейке A1 = Michael Zomparelli
Мне нужно имя в столбце A2.
=SPLITTEXT(A1, " ", 1)
Последний параметр - это нулевой индекс, который вы хотите вернуть. Поэтому, если вы разделите на пробел char, тогда индекс 0 = Майкл и индекс 1 = Zomparelli
Вышеуказанная функция является .Net-функцией, но может быть легко преобразована в VBA.
Ответ 6
ВПРАВО верните любое количество символов во втором параметре справа от первого параметра. Итак, вы хотите, чтобы общая длина вашего столбца A - вычитала индекс. поэтому:
=RIGHT(A2, LEN(A2)-FIND(" ", A2, 1))
И вы должны рассмотреть возможность использования TRIM (A2) везде, где оно появляется...
Ответ 7
Попробуйте следующее:
Right(RC[-1],Len(RC[-1])-InStrRev(RC[-1]," "))