Страницы: 1 2 След.
RSS
Возврат символов с начала до определённых знаков
 
Доброго вечера!  
Подскажите пожалуйста. Нужно вернуть все символы слева до '(штриха) или до +(плюса), что раньше встретится, но как?  
 
Типа =ЛЕВСИМВ(A1;ПОИСК(ИЛИ("+";"'")A1)-1)
 
Там еще один знак :)  
 
МИН(ПОИСК({"+";"'";""""};B2&"'+"""))
 
Спасибо, Виктор!  
Я ошибся, подразумевался не ещё один знак "(кавычки), а ''(два штриха).  
Значит, конечная формула такая  
 
=ЛЕВСИМВ(B2;МИН(ПОИСК({"+";"'"};B2&"'+"""))-1)  
 
А зачем надо к B2 прибавлять перечень всех знаков (B2&"'+""")?  
Объясните пожалуйста.
 
=ПСТР(B2;1;МИН(ПОИСК({"+";"'";""""};B2&"'+"""))-1)  
Объединение B2&"'+""" помогает избежать ошибки при отсутствии знака (хоть всех) в тексте ячейки, ведь в объединенной строке все знаки есть.
 
Понятно, спасибо!  
 
Значит,    
ПОИСК({"+";"'";"""};B2)    
ищет все эти знаки и если хоть одного не находит, то ошибка #ЗНАЧ!.    
А возвращает позицию только одного знака, который первым встретится.  
 
Странная логика формулы: "вернуть позицию первого из перечисленных знаков, но пусть они все обязательно присутствуют". А зачем всем-то присутствовать?  
Да ладно, главное понял логику, хоть и странную.
 
Для лучшего восприятия переставим знаки:  
ПОИСК({"'";"+";""""};B2)  
Результат работы - не одно значение, а массив {#ЗНАЧ!;4;#ЗНАЧ!}  
ПСТР(ЛЕВСИМВ) просят только одно значение, поэтому из массива нужно вычленить нужное, в нашем случае минимальное:  
МИН({#ЗНАЧ!;4;#ЗНАЧ!}) при наличии ошибки в массиве тоже покажет ошибку.  
Самый простой способ избежать ошибки - подсунуть функции знаки в конце текста:  
ПОИСК({"'";"+";""""};B2&"'+""")  
Теперь массив выглядит красивее: {7;4;9}  
 
=ЛЕВСИМВ("12345";МИН(ПОИСК({"'";"+";""""};"12345"&"'+"""))-1)  
=ЛЕВСИМВ("12345";МИН({6;7;8})-1)  
=ЛЕВСИМВ("12345";5)
 
Логика немного другая. Формула ПОИСК({"+";"'";"""};B2) возвращает массив  
 
{4;#ЗНАЧ!;#ЗНАЧ!}  
 
, а функция МИН ищет минимальное число. Но если среди аргументов МИН есть ошибка, она возвращает ошибку. Можно написать так:  
 
=ПСТР(B2;1;МИН(ЕСЛИ(ЕОШИБКА(ПОИСК({"+";"'";""""};B2));999;ПОИСК({"+";"'";""""};B2)))-1)  
 
, но Виктор предложил более изящное решение.
 
Аккуратнее, в варианте с ЕСЛИ важен одинаковый порядок в массиве констант для функции ПОИСК.
 
Благодарю за столь подробные объяснения!  
Теперь всё стало понятно.
 
=ПСТР(B3;1;НАИМЕНЬШИЙ(ЕСЛИ((ПОИСКПОЗ(КОДСИМВ(ПСТР(B3;СТРОКА($1:$10);1)&1);{0;48;52})=1)*СТРОКА($1:$10)>0;СТРОКА($1:$10));1)-1)  
 
Как вариант. Да тяжеловат, но построен на том, что находит все символы не относящиеся к числам.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Извиняюсь, не ту формулу скопировал.  
 
=ПСТР(B2;1;НАИМЕНЬШИЙ(ЕСЛИ((ПОИСКПОЗ(КОДСИМВ(ПСТР(B2;СТРОКА($1:$10);1)&1);{0;47;58})={1;3})*СТРОКА($1:$10)>0;СТРОКА($1:$10));1)-1)
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Прошу прощения, что поднял старую тему, но у меня возник подобный вопрос.  
В своих файлах я иногда использую ВЭБ-запросы и получается так, что текст типа  
Локомотив — Динамо  
или  
Спартак (Нч) — Кр. Советов  
копируются в одну ячейку.  
Мне нужно разделить текст таким образом, чтобы названия команд были в разных ячейках.  
Покрутил выложеные здесь и на других вктках формулы, но...  
Т.е. мне нужно в одной ячейке отобразить текст до тире, а в следующей после тире.
 
Данные - Текст по столбцам.
 
Юрий М  
Во-первых, почему-то не получается. Видимо, импортируемое тире чем-то отличается от обычного, скорее длиной, и как такое тире набрать на клаве даже не знаю...)  
Во-вторых, файл обновляется по запросу при загрузке и каждый раз ходить в меню Данные как-то не с руки здесь нужно выходить при помощи формул...
 
CTRL+H  
НАЙТИ -  
ЗАМЕНИТЬ -
 
Да - попробуйте в НАЙТИ вставить СКОПИРОВАННОЕ "тире" :-)
 
Да, замена скопированного тире на обычное работает. Я это сделал при помощи формулы =Подставить().  
Но это решает только вопрос "во-первых".  
Меня больше волнует "во-вторых", где это можно проделать при помощи формул.  
Сейчас у меня вместо  
Спартак (Нч) — Кр. Советов  
при помощи подставить уже имеется    
Спартак (Нч) - Кр. Советов  
т.е. я поменял тире на обычное.
 
файл приложите  
у Вас тире в кол-ве разные, или один тире в ячейке
Excel 2007
 
{quote}{login=kola}{date=09.05.2012 11:37}{thema=}{post}Спартак (Нч) — Кр. Советов  
при помощи подставить уже имеется    
Спартак (Нч) - Кр. Советов  
т.е. я поменял тире на обычное.{/post}{/quote}  
А вот теперь выделяете столбец (диапазон) и Текст по столбцам. Разделителем ставите дефис.
 
Если у Вас данные начинается с A1  
=ЕСЛИОШИБКА(ПОДСТАВИТЬ(ПРАВСИМВ(ПСТР("-"&$A$1&"-";1;ПОИСК("/";ПОДСТАВИТЬ("-"&$A$1&"-";"-";"/";СТОЛБЕЦ(B1))));ДЛСТР(ПСТР("-"&$A$1&"-";1;ПОИСК("/";ПОДСТАВИТЬ("-"&$A$1&"-";"-";"/";СТОЛБЕЦ(B1)))))-ПОИСК("/";ПОДСТАВИТЬ("-"&$A$1&"-";"-";"/";СТОЛБЕЦ(A1))));"-";);"")  
 
СТОЛБЕЦ(A1) и СТОЛБЕЦ(B1) не меняете.  
еще / знака не должен быть в ячейках, если есть тогда замените все / знаки на другой как Вам угодно
Excel 2007
 
Юрий М  
Это я уже проделал и всё получилось. Я уже об этом сказал.  
Меня интересует больше вариант с формулами. Причины этого я уже объяснил.  
Если допустить, что в ячейке С3 находится исходный текст    
Спартак (Нч) - Кр. Советов  
то я, кажись смог выделить первую команду при помощи формулы  
=ПОДСТАВИТЬ(ПСТР(C3;1;ПОИСК("/";ПОДСТАВИТЬ(C3;"-";"/"))-1);" ";"")  
и у меня получилось  
Спартак (Нч)  
Теперь нужно выделить в отдельную ячейку    
Кр. Советов  
пример прикладываю
 
Вообще-то при помощи  
=ПОДСТАВИТЬ(ПСТР(C3;1;ПОИСК("/";ПОДСТАВИТЬ(C3;"-";"/"))-1);" ";"")  
у меня полилось  
Спартак(Нч)  
без пробела между Спартак и (Нч), а єто нежелательно...
 
=ПСТР(C2;1;ПОИСК(" - ";C2)-1)  
=ПОДСТАВИТЬ(C2;E2&" - ";"")
Excel 2007
 
ABC  
Да, просто и со вкусом...))  
Спасибо! а то у меня получались 3-х этажные формулы...))  
Еще раз благодарю!
 
Прошу прощения, что опять будоражу эту тему, но у меня возник вопросЮ как выделить текст, который находится в скобках.  
К примеру, при помощи ВЭБ-запроса я в ячейке получил  
Боргес да Сільва Вілліан (Вілліан)  
а мне нужно только    
Вілліан  
Я, вроде, всё сделал, но слишком длинный путь при этом пришлось сделать.  
Можно ли это проделать одной формулой?  
Пример прилагаю.
 
Выполнить Sub www().
 
k61  
А формулой мо?
 
=ЕСЛИ(НАЙТИ("(";C7);ПСТР(C7;НАЙТИ("(";C7)+1;НАЙТИ(")";C7)-НАЙТИ("(";C7)-1);C7)  
(по файлу post_334820.xls)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Мо и фо...  
=ПОДСТАВИТЬ(ПСТР(C7;ПОИСК("(";C7)+1;20);")";)  
Без проверки на отсутствие скобок.  
 
Ваш файл удален. Не издевайтесь.  
40 Кб в архиве для такого вопроса? Лень было две ячейки заполнить с именами со скобками? Учтите на будущее.
 
Александр, Вам письмо.
Страницы: 1 2 След.
Читают тему
Наверх