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

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

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

Содержимое ячейки A2 = Alistair Stevens, и я ввел формулу в ячейку B2 (мне нужно 'Stevens' в ячейке B2)

Я пробовал использовать следующие формулы:

=RIGHT(A2,FIND(" ",A2,1)-1)

=RIGHT(A2,FIND(" ",A2))

Обе эти формулы работают для этой ячейки, но когда я заполняю / копирую и вставляю ее для ячеек ниже, это не работает. Я получаю неправильные значения !!

A3 -> David Mckenzie

B3 -> Mckenzie

person Shyam Natraj Kanagasabapathy    schedule 26.05.2011    source источник
comment
Выложите пожалуйста содержимое А3 и полученный В3   -  person Dr. belisarius    schedule 26.05.2011


Ответы (9)


Это работает, даже если есть отчество:

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

person Jean-François Corbett    schedule 26.05.2011
comment
отличный мастер, спасибо Жан-Франсуа !! отлично работает - person Adam Lesniak; 28.10.2013
comment
Это круто! Что, если меня зовут Сэмми Л. Дэвис-младший? Как заставить его игнорировать Jr, Sr, III и т. Д.? - person theteague; 14.02.2018
comment
@bteague Попробуй! - person Jean-François Corbett; 15.02.2018

Ответ, предоставленный @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)

person chris neilsen    schedule 26.05.2011
comment
Непонятно, а? Позвоните мне, когда Excel разрешит комментарии в формулах. - person Jean-François Corbett; 26.05.2011
comment
@Jean: да, я бы хотел. Это сделало бы мой собственный код намного проще. - person chris neilsen; 26.05.2011

Попробуйте эту функцию в 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 = Майкл Зомпарелли

Я хочу, чтобы фамилия была в столбце A2.

=SPLITTEXT(A1, " ", 1)

Последний параметр - это индекс, отсчитываемый от нуля, который вы хотите вернуть. Итак, если вы разделите пробел, тогда индекс 0 = Майкл и индекс 1 = Zomparelli.

Вышеупомянутая функция является функцией .Net, но может быть легко преобразована в VBA.

person Michael Z.    schedule 17.05.2016

Если вы хотите получить предпоследнее слово в тексте, вы можете использовать этот макрос как функцию в своей электронной таблице:

Public Function Get2ndText(S As String) As String

Dim sArr() As String
Dim i As Integer
sArr = Split(S, " ")

'get the next to the last string
i = UBound(sArr) - 1
Get2ndText = sArr(i)

End Function

Затем в вашей электронной таблице B1 как текст:

CURRENT OWNER 915 BROADWAY ST HOUSTON TX 77012-2126

в B2 ваша формула будет:

=Get2ndText(B1)

Результат был бы

TX
person Kerry White    schedule 21.01.2018
comment
Спасибо Керри Уайту за ваше решение. +1 за это. - person SIM; 22.01.2018

Проще было бы: =TRIM(RIGHT(SUBSTITUTE(TRIM(A2)," ",REPT(" ",99)),99))

Вы можете использовать A2 вместо TRIM(A2), если уверены, что ваши данные не содержат нежелательных пробелов.

На основе концепции, объясненной Риком Ротштейном: http://www.excelfox.com/forum/showthread.php/333-Get-Field-from-Delimited-Text-String

Простите за некропост!

person shrivallabha.redij    schedule 08.05.2018

Right(A1, Len(A1)-Find("(asterisk)",Substitute(A1, "(space)","(asterisk)",Len(A1)-Len(Substitute(A1,"(space)", "(no space)")))))

Попробуй это. Надеюсь, что это работает.

person user46372819    schedule 20.02.2013

Попробуй это:

=RIGHT(TRIM(A2),LEN(TRIM(A2))-FIND(" ",TRIM(A2)))

Мне удалось скопировать / вставить формулу, и она сработала нормально.

Вот список Текстовые функции Excel (которые работали в мае 2011 года, но могут быть нарушены, когда Microsoft в следующий раз изменит свой веб-сайт). :-(

Вы можете использовать многоэтапные вложенные функции IF () для обработки отчества или инициалов, заголовков и т. Д., Если вы их ожидаете. Формулы Excel не поддерживают цикл, поэтому есть некоторые ограничения на ваши действия.

person Jay Elston    schedule 26.05.2011
comment
Как и ответ @Pok, он не извлекает последнюю подстроку; скорее, он удаляет первую подстроку. Это нормально, когда есть только имя и фамилия, но не когда есть одно или несколько отчеств. - person Jean-François Corbett; 26.05.2011

ВПРАВО возвращает любое количество символов во втором параметре справа от первого параметра. Итак, вам нужна общая длина вашего столбца A - вычтите индекс. что поэтому:

=RIGHT(A2, LEN(A2)-FIND(" ", A2, 1))

И вам следует подумать об использовании TRIM (A2) везде, где он появляется ...

person Pok    schedule 26.05.2011
comment
это не работает, когда есть имя, отчество и фамилия. Например, если есть «Джон Стивен Смит», я получаю «Стивен Смит». - person Shyam Natraj Kanagasabapathy; 26.05.2011
comment
@ Джей Он этого не сделал. Но он попросил последнюю подстроку - person Dr. belisarius; 26.05.2011
comment
@belisarius - Ах, да, разделенный пробелом с правой стороны. Это сложно - НАЙТИ начинается с левой стороны. Если в строке есть неизвестное количество пробелов, ему может не повезти. - person Jay Elston; 26.05.2011
comment
@Jay Я не отвечаю, потому что не понимаю, почему он получает Формулу в B3 ... - person Dr. belisarius; 26.05.2011
comment
@belisarius: ячейку B3 нужно заполнить формулой, получив в результате фамилию. Содержимое ячейки B3 не является «формулой». приношу свои извинения за недоразумение .. - person Shyam Natraj Kanagasabapathy; 26.05.2011

Попробуй это:

Right(RC[-1],Len(RC[-1])-InStrRev(RC[-1]," "))
person Ronald Davis    schedule 05.09.2014