Извлечь последнюю подстроку из ячейки - PullRequest
31 голосов
/ 26 мая 2011

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

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

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

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

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

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

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

A3 -> David Mckenzie

B3 -> Mckenzie

Ответы [ 9 ]

48 голосов
/ 26 мая 2011

Это работает, даже когда есть отчества:

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

4 голосов
/ 26 мая 2011

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

1 голос
/ 21 января 2018

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

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
0 голосов
/ 08 мая 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

Извините, что я некропостер!

0 голосов
/ 17 мая 2016

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

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

0 голосов
/ 05 сентября 2014

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

Right(RC[-1],Len(RC[-1])-InStrRev(RC[-1]," "))
0 голосов
/ 20 февраля 2013
Right(A1, Len(A1)-Find("(asterisk)",Substitute(A1, "(space)","(asterisk)",Len(A1)-Len(Substitute(A1,"(space)", "(no space)")))))

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

0 голосов
/ 26 мая 2011

Попробуйте:

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

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

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

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

0 голосов
/ 26 мая 2011

RIGHT возвращает любое количество символов во втором параметре справа от первого параметра.Итак, вы хотите, чтобы общая длина вашего столбца A - вычесть индекс.поэтому:

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

И вы должны рассмотреть возможность использования TRIM (A2) везде, где это появляется ...

...