Страницы: 1 2 След.
RSS
Поиск значения в строке справа налево
 
Необходимо что-то типа "ПОИСК" или "НАЙТИ" только не слева направо, а наоборот.  
Есть набор определенных данных нужно отобрать в строках данные справа налево до определенного знака (первого)  
Пример прилагается.  
Я не спец, а очень нужно.  
Заранее всем спасибо.
 
так?
Живи и дай жить..
 
слэн, а вот твой же вариант решения проблемы ;)  
"символы после последнего пробела"    
не это ли тут надо? ;)  
 
=ПСТР(СЖПРОБЕЛЫ(A1);1+НАЙТИ("~~~";ПОДСТАВИТЬ(СЖПРОБЕЛЫ(A1);" ";"~~~";ДЛСТР(СЖПРОБЕЛЫ(A1))-ДЛСТР(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(A1);" ";""))));ДЛСТР(A1))  
 
а вот формула массива от DL  
делает тоже самое - выбирает все символы после последнего пробела  
 
=ПРАВСИМВ($A$1;ДЛСТР($A$1)-МАКС(ЕСЛИ(ПСТР($A$1;СТРОКА(ДВССЫЛ("2:"&ДЛСТР($A$1)-1));1)=" ";СТРОКА(ДВССЫЛ("2:"&ДЛСТР($A$1)-1));0)))
 
Спасибо огромное всем
 
но эта по-моему короче? :)  
 
=ПСТР(B5;МАКС(ЕСЛИ(ПСТР(B5;СТРОКА(СМЕЩ($A$1;0;0;ДЛСТР(B5);1));1)=" ";СТРОКА(СМЕЩ($A$1;0;0;ДЛСТР(B5);1))))+1;9999)  
 
112 против 141 символа :)  
 
 
 
=ПСТР(СЖПРОБЕЛЫ(A1);1+НАЙТИ("~~~";ПОДСТАВИТЬ(СЖПРОБЕЛЫ(A1);" ";"~~~";ДЛСТР(СЖПРОБЕЛЫ(A1))-ДЛСТР(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(A1);" ";""))));ДЛСТР(A1))
Живи и дай жить..
 
85 символов и не формула массива :-)  
=СЖПРОБЕЛЫ(ЛЕВСИМВ(ПРАВСИМВ(" "&ПОДСТАВИТЬ(СЖПРОБЕЛЫ(B5);" ";ПОВТОР(" ";60));60);60))
 
забавно :)  
утащил в амбар
 
{quote}{login=ZVI}{date=14.01.2009 10:58}{thema=}{post}85 символов и не формула массива :-)  
=СЖПРОБЕЛЫ(ЛЕВСИМВ(ПРАВСИМВ(" "&ПОДСТАВИТЬ(СЖПРОБЕЛЫ(B5);" ";ПОВТОР(" ";60));60);60)){/post}{/quote} Есть одно ограничение. Строка символов после последнего пробела должна быть короче 60.  
Чтобы снять это ограничение предлагаю так:  
=СЖПРОБЕЛЫ(ЛЕВСИМВ(ПРАВСИМВ(" "&ПОДСТАВИТЬ(СЖПРОБЕЛЫ(B5);" ";ПОВТОР(" ";ДЛСТР(B5)));ДЛСТР(B5));ДЛСТР(B5)))  
106 символов стало.
Bite my shiny metal ass!      
 
Тема сегодня такая :-) расчет на "человеческое" слово.  
Эту формулу я уже приводил, и по ней можно выделять не только последнее слово:  
http://www.planetaexcel.ru/forum.php?thread_id=5027
 
Если бы все звёзды были одного размера, то для того чтобы узнать какая ближайшая совсем не надо измерять расстояние до всех звёзд а потом их сравнивать, достаточно выбросить что нибудь за борт и посмотреть в какую сторону оно будет двигаться  
Ну,  а если они всё же разного размера то нужно их как следует раздвинуть и действовать по вышесказанному.    
 
Спасибо за формулу, а также за все посты в "сортировка массива в VBA"
 
{quote}{login=Лузер™}{date=15.01.2009 10:11}{post}Есть одно ограничение. Строка символов после последнего пробела должна быть короче 60.{/post}{/quote}  
да ладно .. можно ж и 99 (или 999) использовать
 
вот вам 84 символа без существенных ограничений :)  
 
ПОДСТАВИТЬ(A1;ЛЕВСИМВ(A1;МАКС(ЕСЛИ(ПСТР(A1;СТРОКА(1:999);1)=" ";СТРОКА(1:999))));"")  
 
кто меньше ? :))
Живи и дай жить..
 
Слэн, Ваша формула но на один символ короче :)  
ПОДСТАВИТЬ(A1;ПСТР(A1;1;МАКС(ЕСЛИ(ПСТР(A1;СТРОКА(1:999);1)=" ";СТРОКА(1:999))));"")  
"ПСТР" + "1;" < ЛЕВСИМВ
Bite my shiny metal ass!      
 
:))  
 
ну тогда уж :  
 
ПСТР(A1;1+МАКС(ЕСЛИ(ПСТР(A1;СТРОКА(1:999);1)=" ";СТРОКА(1:999)));999)  
 
ваш ход
Живи и дай жить..
 
и еще есть резерв .. но ваш ход, сударь
Живи и дай жить..
 
Кстати, у ZVI 85 знаков с "=", а у слэна без оного.  
Так что если в формуле ZVI провести аналогичную замену, то выйдет все равно короче.  
СЖПРОБЕЛЫ(ПСТР(ПРАВСИМВ(" "&ПОДСТАВИТЬ(СЖПРОБЕЛЫ(B5);" ";ПОВТОР(" ";60));60);1;60))  
84 знака (учитывая "=")  
Еще можно учесть отсутствие фигурных скобок, которые в формуле слэна необходимы.
Bite my shiny metal ass!      
 
Нету у меня ходов. Просто я давно заметил, что ПСТР короче ЛЕВСИМВ :)  
Времени жаль нет ковырять формулы.
Bite my shiny metal ass!      
 
ПСТР(A1;1+МАКС((ПСТР(A1;СТРОКА(1:999);1)=" ")*СТРОКА(1:999));999)  
 
65 символов без равно и фиг скобок  
 
ЗАМЕНИТЬ(A1;1;МАКС((ПСТР(A1;СТРОКА(1:999);1)=" ")*СТРОКА(1:999));"")  
 
68 символов
Живи и дай жить..
 
Плюс АДЫН!!! замечательным пионерам Excelя нашего форума!!!  
А казалось давно решенный простой вопрос...  
Игорь67
 
{quote}{login=слэн}{date=15.01.2009 12:01}{thema=}{post}вот вам 84 символа без существенных ограничений :)  
ПОДСТАВИТЬ(A1;ЛЕВСИМВ(A1;МАКС(ЕСЛИ(ПСТР(A1;СТРОКА(1:999);1)=" ";СТРОКА(1:999))));""){/post}{/quote}  
Слэн! Дело в том что Ваша формула и формула Zvi основаны на существенно различных идеях.  
Классическое решение, широко используемое на данном форуме, заключается в поиске позиции символа, отвечающего требуемым условиям и использованиии этой позиции для получения решения.  
Формула Zvi принципиально иная.  
Она основана на том, что если между словами мы вставим достаточно длинные пустоты, то каждое слово попадёт во вполне определённый участок: нам известны позиции начала и конца участка, но не известно где именно в нём находиться слово. То есть любое слово дополняется справа и слева пустотами, так чтобы  количество символов в слове и пустот окружающих слово было равно вполне определённому числу. В приведённых Zvi формулах - 60.  
Использовать для сравнения этих двух подходов задачу о выделении последнего слова некорректно, ну а тем более ложить в основу сравнения длину формулы.  
Например возьмём задачу о выделении третьего с конца слова. При классическом подходе придётся использовать "гнусную" по количеству символов функцию наибольший, и ещё находить позицию последнего символа в слове.  
В подходе ZVi достаточно изменить номер выбираемого участка:  
=СЖПРОБЕЛЫ(ЛЕВСИМВ(ПРАВСИМВ(" "&ПОДСТАВИТЬ(СЖПРОБЕЛЫ(A2);" ";ПОВТОР(" ";60));3*60);60))  
//разделитель слов пробел "", вставляем между словами по 60 пробелов, выбираем участок длиной 60, начинающйся со 180 символа с конца, удаляем пробелы, получаем искомое слово//  
Разумеется остаётся в силе замечание Лузера о том, что существуют нехорошие фразы, для которых формула будет давать ошибки, но является ли это таким уж страшным недостатком?
 
написал в ответ целую повесть, с иллюстрациями, алеегориями - а оно мне "код не совпадает" зол!!!!  
 
для поставленной задачи формула ZVI может быть урезана так:  
СЖПРОБЕЛЫ(ПРАВСИМВ(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(A1);" ";ПОВТОР(" ";60));60))  
 
что дает 68 символов..
 
{quote}{login=dl@kartoshka.ru}{date=16.01.2009 08:20}{post}Разумеется остаётся в силе замечание Лузера о том, что существуют нехорошие фразы, для которых формула будет давать ошибки, но является ли это таким уж страшным недостатком?{/post}{/quote}На самом делее этот "недостаток" легко исправляется. Формула, правда, становится длиннее, но этот "перфекционизм (совершенство)" мне напоминает старый тезис программистов, что "любую программу можно сократить на одну строку". :-D
Bite my shiny metal ass!      
 
остается еще ограничение на длину строки, что в переводе около 500 "слов" в изначальной фразе..
Живи и дай жить..
 
{quote}{login=слэн}{date=16.01.2009 11:08}{thema=}{post}остается еще ограничение на длину строки, что в переводе около 500 "слов" в изначальной фразе..{/post}{/quote} Ну если у Вас "слово" длиной в среднем 65 символов, то 500 слов. :)  
Провел сравнение разных формул на предельной длине строки (32767 симв.). Все что длиннее эксель тихо обрезает.  
Формулы от слэна рабочие (с оговоркой замены СТРОКА(1:999) на СТРОКА(1:65536))  
Самая короткая и универсальная вышла:  
ПСТР(B3;1+МАКС((ПСТР(B3;СТРОКА(1:65536);1)=" ")*СТРОКА(1:65536));65536)  
71 символ без = и {}  
Предупреждаю: считает такую строку долго.
Bite my shiny metal ass!      
 
я имел в виду, что слова разделены пробелами, т.е пробелов может быть как минимум на 1 меньше слов, а каждый пробел(после сжпробелы) заменяется  в формуле ZVI на 60 таких же.. но еще и сами слова - отсюда примерно 500 :)  
 
с другой стороны трудно ожидать таких длинных слов или фраз - может и 60 достаточно, но 999-то уж точно? и уж совсем точно, что раз строка не может превышать 32767, то и 65536 не нужны..  
 
а если у меня 999 заменить на 60, то это ж целых три символа экономии :)
Живи и дай жить..
 
А, теперь понял откуда 500 взялось. Логично.  
 
Мне лень было менять 65536 на 32767 - количество символов одинаковое.
Bite my shiny metal ass!      
 
время разное
Живи и дай жить..
 
Время - да. Но этого критерия еще не вводилось. Только количество символов в формуле.
Bite my shiny metal ass!      
 
кстати, DL, с универсальностью тоже не все так просто.. не получится так, как Вы предложили..  
 
попробуйте на такой строчке:  
 
1 2 3 444444444444444444444444444444444444444444444444444444444444­44444444 5
Живи и дай жить..
 
Поэтому я и уточнил что замечание Лузера остаётся в силе.  
С другой стороны "неправильные" фразы, я думаю, встречаются не так уж часто.  
И на самом деле все упирается в методологический вопрос: необходимо ли создавать формулу, которая гарантировано посчитает требуемое или задуматься о том что же лежит в исходных данных и предъявить к ним некоторые ограничивающие требования.  
То есть совершенная формула при ошибочных исходных данных, тянет ошибку дальше, несовершенная формула, вносит ошибку в ошибку, но так или иначе, побкда над ошибкой лостигается возвращением к истокам.  
   
а вот канувшие в лету аллегории действительно очень жаль, что поделать борьба с киборгами перманентна....
Страницы: 1 2 След.
Читают тему
Наверх