Получить слово до первого пробела достаточно просто:
Но куда чаще сложности возникают с получением слова(символа), находящегося на определенной позиции между пробелом. Я беру в качестве примера пробел, но на самом деле это может быть абсолютно любой символ. Например, для получения второго слова(т.е. между первым и вторым пробелом), можно составить такую формулу:
На мой взгляд, выглядит несколько закручено, хотя все не так уж сложно:
НАЙТИ(" "; - ищем позицию первого пробела в ячейкеA1 )+1A1 НАЙТИ(" ";A1;НАЙТИ(" "; - ищем позицию второго пробела и затем из этой позиции вычитаем позицию первого пробела(A1 )+1)-НАЙТИ(" "; )A1 )
Но есть проблема - если второго пробела нет, то формула выдаст ошибку
На первый взгляд куда кошмарнее, чем первая. Но у неё есть ряд преимуществ:
- она не нуждается в проверке на отсутствие пробелов
- изменением одного числа можно получить не второе, а 3-е, 4-е и т.д. слово.
Разберем основные моменты использования этой формулы. Во-первых: формула вытаскивает второе слово от начала строки. Во-вторых: чтобы получить первое слово от начала строки, нужно в блоке 999*2 заменить 2 на 1:
Чтобы получить 5-е слово - меняем на 5:
Т.е. число - это позиция слова(или слов) между пробелами. А что будет, если мы укажем число больше, чем есть пробелов в строке?
Если вдруг число будет больше, чем есть пробелов в строке - то мы получим слово после последнего пробела (т.е. первое слово с конца строки). Это значит, что если указать, например, *999 - в большинстве случаев получим как раз последнее слово.
для примера возьмем текст "мама мыла раму" и формулу по получению второго слова от начала:
- Сначала при помощи функции
ПОДСТАВИТЬ мы заменяем все пробелы в тексте на 999 пробелов(999 получаем при помощи функции(SUBSTITUTE) ПОВТОР . Число может быть и меньше 999, но не должно быть меньше длины исходной строки. В итоге мы получим очень длинную строку, в которой каждое слово будет отделено от другого 999 пробелами. Что-то вроде такого(пробелов я поставил меньше, конечно):(REPT)
"мама____________________________мыла____________________________раму" - Далее при помощи функции
ПСТР мы берем все слова от начала строки, до символа на позиции 999*2. Т.е. из текста выше мы получим слова "мама" и "мыла" и по 999 символов после каждого:(MID)
"мама____________________________мыла____________________________" - Затем при помощи функции
ПРАВСИМВ получаем 999 символов справа от строки. Т.е. только наше слово и куча пробелов после него(RIGHT)
"мыла____________________________" - И напоследок та же функция
ПОДСТАВИТЬ убирает более не нужные нам пробелы, заменяя их все на пустую строку -(SUBSTITUTE) "" .
Вроде бы достигли того, что нам нужно было. Но вдруг необходимо получить второе слово с конца строки? А если у нас этих слов десятки? Можно использовать некую модификацию приведенной выше формулы, но которая как раз возвращает слово с конца строки:
Принцип тот же: если в блоке 999*1 заменить 1 на 5, то получим 5-е слово с конца строки.
Если необходимо выдергивать слова именно по пробелам, то лучше дополнить еще одной функцией -
Как видите - хоть формула и выглядит не так-то просто - она весьма универсальная: может и определенное слово вытащить, и к тому же еще и количество извлекаемых слов можно указать.
Остается еще добавить, что вместо пробелов могут быть и другие символы. Например, очень часто встречается ситуация, когда надо из текста получить не одно слово в конкретной позиции, а конкретную строку из текста, разнесенного в одной ячейке на строки:
Тогда для получения второй строки(
я для получения месяцев(
В этой формуле в качестве разделителя используется слеш "/".
По сути, после нескольких примеров, основной принцип должен быть понятен. Но все же на примере последней формулы напомню про основные моменты и что надо сделать, чтобы применить практически к любой ситуации по извлечению слов:
- ячейка с текстом, последнее слово из которого надо извлечь.C2 "/" - разделитель слов. Если для разделения слов используется не слеш, а запятая или точка - то во всей формуле, где встречается этот символ надо заменить его на нужный.
Если лень прописывать этот символ внутри формулы несколько раз, его можно записать в отдельную ячейку(скажем, ) и в формуле указать ссылку уже на эту ячейку:G1
=ПОДСТАВИТЬ(ПСТР(ПРАВСИМВ( G1 &ПОДСТАВИТЬ(C2 ;G1 ;ПОВТОР(G1 ;999));999*1);1;999);G1 ;"")
Теперь для изменения символа надо будет изменить его один раз в ячейке и формула "вытащит" нужное слово/строку, опираясь именно на этот символ.G1 *1 - число 1 - позиция слова с конца строки, которое необходимо "достать". 1 - первое с конца(т.е. последнее), 2 - предпоследнее и т.д.
Зная эти основные моменты достаточно будет в своем файле просто скопировать формулу выше и подставить в неё ссылку на нужную ячейку и указать требуемый разделитель.
Слово после последнего пробела.xls (29,5 КиБ, 4 216 скачиваний)
дмитрий извените за дополнение. Просто всплывал такой вопрос вот и решил добавить к вашему уроку.
здесь 3 - третье слово с конца, 2 - к-во слов
=СЖПРОБЕЛЫ(ПСТР(ПРАВСИМВ(" "&ПОДСТАВИТЬ($A8;" ";ПОВТОР(" ";999));999*3);1;999*2))
Владимир, спасибо, добавлю в статью.
Большое человеческое спасибище! Сэкономили кучу времени :)
Здравствуйте, может сможете мне помочь.
необходимо из предложения переносить только последнее слово, при условии что перед ним стоит символ "-"
К примеру "Шла Саша по шоссе и -сломала -ногу" перенести в ячейку слово "ногу", если "-" нет то ячейка должна оставаться пустая.
И возможно ли перенести в этом примере 2 слово с конца при наличии перед ним "-"
Заранее вам благодарен за ответ.
Вот примерно так в идеале должно получиться
Шла Саша по шоссе и -сломала -ногу Шла Саша по шоссе и
ногу
сломала
Шла Саша по шоссе и сломала -ногу Шла Саша по шоссе и сломала
ногу
Шла Саша по шоссе и сломала ногу Шла Саша по шоссе и сломала ногу
Блин криво получилось
Как это не парадоксально, но в статье нет формулы, которая отвечает на вопрос заголовка статьи: "Как получить слово после последнего пробела?"
для тех, кто слабо разбирается в формулах будет затруднительно разобраться и додуматься, что нужно одну из формул преобразовать для этого
возможно, автору следует привести эту формулу и выделить, например, полужирным, чтобы она сразу бросалась в глаза
Вот и я смотрю и думаю, а где "как получить слово после последнего пробела" ...
Ну вообще, если читать не через строку, то ответ приведен:
Чтобы получить 5-е - на 5:
=ПОДСТАВИТЬ(ПРАВСИМВ(ПСТР(" "&ПОДСТАВИТЬ(A1;" ";ПОВТОР(" ";999));1;999*5);999);" ";"")
=ПОДСТАВИТЬ(ПРАВСИМВ(ПСТР(" "&ПОДСТАВИТЬ(A1;" ";ПОВТОР(" ";999));1;999*999);999);" ";"")
=ПОДСТАВИТЬ(ПСТР(ПРАВСИМВ(" "&ПОДСТАВИТЬ(A1;" ";ПОВТОР(" ";999));999*1);1;999);" ";"")
Если вдруг пробелов будет меньше, чем указанное число - то мы получим слово после последнего пробела (т.е. первое слово с конца строки). Это значит, что если указать *999 - в большинстве случаев получим как раз последнее слово.
Т.е. если указать
то последнее слово точно получим.
А ниже еще одна формула:
она только и делает, что возвращает последнее слово. Об этом тоже написано. Так что Роман - ответы все есть. Но я учту и постараюсь описать более доступно.
Стыдно, товарищи)
А информация действительно есть!
Спасибо