Страницы: 1
RSS
Как вытащить последнее слово из строки?
 
К примеру, такая вот строка "Дождеватель импульсный на колышке Comfort 08141-20.000.00".
Мне нужно вытащить последнее слово, потому что артикул товара находится в конце названия.
В прайс листе названия разные по длине и количеству слов, поэтому нужно как-то вытащить именно последнее.
Т.е. если строка "Дождеватель импульсный на колышке Comfort 08141-20.000.00", то в итоге должно получиться "08141-20.000.00"
 
Вводите при помощи Ктрл+Шифт+Ентер.

=ПСТР(A1;ПОИСКПОЗ(1=1;ЕЧИСЛО(--(ПСТР(A1;СТРОКА(1:999);1))););50)
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
или без формулы массива:
=СЖПРОБЕЛЫ(ЛЕВСИМВ(ПРАВСИМВ(" "&ПОДСТАВИТЬ(СЖПРОБЕЛЫ(A1);" ";ПОВТОР(" ";60));60);60))

60 - длина строки(максимальная). Можно сделать больше, если считаете, что кол-во символов в исходной строке может быть больше.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
не массивная
Код
=ЗАМЕНИТЬ(A1;1;ПОИСК("!!";ПОДСТАВИТЬ(A1;" ";"!!";ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;" ";""))))+1;"")
Изменено: Михаил С. - 05.04.2013 13:12:50
 
Большое всем спасибо!
Владимир, к сожалению когда пытаюсь протянуть формулу, на остальных строчках начинает работать неверно, возможно я с массивами просто не дружу.  :(

The_Prist, Михаил С., большое спасибо! обе формулы работают на отлично! Только у Михаила нули в начале артикула стираются..
Изменено: leelera - 05.04.2013 13:26:51
 
Нужно зарепить диапазоны СТРОКА($1:$999).

Немассивный вариант:
.. с закрепленными диапазонами.

=ПСТР(A1;ПРОСМОТР(2;1/(ПОИСКПОЗ(КОДСИМВ(ПСТР(A1;СТРОКА($1:$999);1));{0;33;58;255})=1);СТРОКА($1:$999))+1;50)
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Владимир, ок, спасибо! :)

Проблема решена!
 
UDF в модуль книги

Код
Function LastWord(Cell As Range) As String
    LastWord = Split(Cell, " ")(UBound(Split(Cell, " ")))
End Function

 
Еще вариант:
=ПСТР(A1;ПОИСК("/";ПОДСТАВИТЬ(A1;" ";"/";ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;" ";))))+1;99)
 
М-да...Вариант: ctrl+H - найти * [звездочкапробел] и заменить на ничего. И все счастливы:)
Я сам - дурнее всякого примера! ...
 
KuklP, нолик съедается спереди, но метод интересный
 
Цитата
leelera пишет:
нолик съедается спереди

Как вариант: заменить * [звездочкапробел] на ' [апостроф]
Потом заменить ' [апостроф] на ничего.
В ячейках апострофов не будет, а в строке формул будет отображаться апостроф - но это уже не часть формулы, а признак текстового формата ячейки.
 
С помощью регулярного выражения:
Код
Function АРТИКУЛ(cell As Range) As String
    Dim re As Object
    Set re = CreateObject("VBScript.RegExp")
    re.Pattern = "[\d-.]+$"
    АРТИКУЛ = re.Execute(cell)(0)
    Set re = Nothing
End Function
There is no knowledge that is not power
 
короче:
Код
re.Pattern = "\S+$"
но для данной задачи регулярки -  явное извращение.  :D
да и работать будут медленно.

Код
Function АРТИКУЛ(cell As Range) As String
    АРТИКУЛ = mid(cell, instrrev(cell, " ")+1)
End Function
Изменено: ikki - 08.04.2013 14:15:39
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Ребята, спасибо! Вы круты! :)  :)  :)
Страницы: 1
Наверх