Извлечь последнюю подстроку из ячейки

У меня есть имена в столбце. Мне нужно разделить только фамилии из этого столбца на другой столбец.

Фамилия ограничена пробелом с правой стороны.

Содержимое в ячейке 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]," "))