|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
26.11.2013, 22:54 | #1 |
Форумчанин
Регистрация: 01.03.2009
Сообщений: 230
|
реверсное "найти"
добрый день!
такая возникла задачка. есть строка, состоящая из нескольких слов. внутри строки все может меняться, кроме какой-то части одного слова. слово ограничено пробелами. требуется найти это слово. то есть, нужна координата его начала и координата его конца. я думаю, проще всего такое было бы реализовать запустив одно "найти в поисках пробела вперед, и одно найти назад. но я не знаю как запустить "найти" назад. если кто-нибудь знает, как решать подобные задачки - скажите, пожалуйста. макросы не интересуют, задачу надо решить через формулы. если не совсем понятно, о чем я говорю, я написал пример неизменяемая искомого слова - "ася". =ЕСЛИ(СЛУЧМЕЖДУ(0;10)>5;" печенье ";"")&ЕСЛИ(СЛУЧМЕЖДУ(0;10)>5;" ";"")&ЕСЛИ(СЛУЧМЕЖДУ(0;10)>5;" курица ";"")&ЕСЛИ(СЛУЧМЕЖДУ(0;10)>5;" сырники ";"")&ЕСЛИ(СЛУЧМЕЖДУ(0;10)>5;" макароны ";"")&ЕСЛИ(СЛУЧМЕЖДУ(0;10)>5;" ";"")&ЕСЛИ(СЛУЧМЕЖДУ(0;10)>5;" ";"")&ЕСЛИ(СЛУЧМЕЖДУ(0;10)>5;" ";"")&ЕСЛИ(СЛУЧМЕЖДУ(0;10)>5;" ";"")&ЕСЛИ(СЛУЧМЕЖДУ(0;10)>5;" ";"")&ЕСЛИ(СЛУЧМЕЖДУ(0;10)>5;"Ст";" В")&"ася"&ЕСЛИ(СЛУЧМЕЖДУ(0;10)>5 ;" ряженка ";"")&ЕСЛИ(СЛУЧМЕЖДУ(0;10)>5;" молоко ";"")&ЕСЛИ(СЛУЧМЕЖДУ(0;10)>5;" кефир ";"") |
26.11.2013, 23:47 | #2 |
Пользователь
Регистрация: 08.07.2013
Сообщений: 95
|
Протестируйте такую формулу
=MID(A1;SEARCH("\";SUBSTITUTE(A1;" ";"\";LEN(TRIM(LEFT(A1;SEARCH("ася" ;A1))))-LEN(SUBSTITUTE(LEFT(A1;SEARCH("ася" ;A1));" ";""))+1-1));SEARCH("\";SUBSTITUTE(A1;" ";"\";LEN(TRIM(LEFT(A1;SEARCH("ася" ;A1))))-LEN(SUBSTITUTE(LEFT(A1;SEARCH("ася" ;A1));" ";""))+1))-SEARCH("\";SUBSTITUTE(A1;" ";"\";LEN(TRIM(LEFT(A1;SEARCH("ася" ;A1))))-LEN(SUBSTITUTE(LEFT(A1;SEARCH("ася" ;A1));" ";""))+1-1))) |
27.11.2013, 13:50 | #3 |
Форумчанин
Регистрация: 01.03.2009
Сообщений: 230
|
Спасибо, но надо не совсем так - количество слов перед словом-ключом может меняться.
Через =НАЙТИ(" ";A1;НАЙТИ("ася";A1;1)) можно выйти на конец слова-ключа, но как выйти его начало.. загадка. |
27.11.2013, 14:37 | #4 |
Пользователь
Регистрация: 21.11.2013
Сообщений: 11
|
|
27.11.2013, 17:49 | #5 |
Форумчанин
Регистрация: 01.03.2009
Сообщений: 230
|
а откуда ее взять?
изначально, я знаю лишь часть слова, грубо говоря - корень(соответственно и часть длины слова). что перед ним и что после него я не знаю. |
27.11.2013, 18:03 | #6 |
Пользователь
Регистрация: 08.07.2013
Сообщений: 95
|
Вы плохо протестировали мою формулу, т. к. я перед тем как выслать менял количество слов и она у меня работала и теперь работает.
Последний раз редактировалось Czeslaw; 27.11.2013 в 18:11. |
27.11.2013, 18:07 | #7 |
Форумчанин
Регистрация: 01.03.2009
Сообщений: 230
|
подумав еще, вариант вижу только один.. тупой правда.. но макросы, насколько, их вижу, обновляться будут медленнее намного, а скорость перерасчета мне критична.
вариант решения состоит в том, что хоть величина приставки программно не лимитирована, но выше 5-7 символов я ее пока не видел. соответственно, если i - начало корня, создаем десяток "если" и перебираем в поисках пробела символы строки i-1, i-2, ... i-10. |
27.11.2013, 18:20 | #8 | |
Форумчанин
Регистрация: 01.03.2009
Сообщений: 230
|
Цитата:
посмотрел еще раз - ошибка вылетает при нахождении в строке нескольких пробелов подряд(в моем примере подобное есть) без изменения собственной структуры формула работать будет при A2=СЖПРОБЕЛЫ(A1) и переориентации формулы на А2. глобально формула результат выдает правильный, сейчас в нее вчитаюсь. как она работает - сходу мне не совсем очевидно. большое спасибо. |
|
27.11.2013, 20:06 | #9 |
Участник клуба
Регистрация: 02.05.2010
Сообщений: 1,390
|
Сколько строк предполагается так обрабатывать?
Код:
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728 Последний раз редактировалось kuklp; 27.11.2013 в 20:28. |
27.11.2013, 20:48 | #10 |
Форумчанин
Регистрация: 01.03.2009
Сообщений: 230
|
kuklp, спасибо.
строк не много - до тысячи, но данные подгружаются по ДДЕ, компьютер работает на износ, не хотелось бы его загружать ещё и автоматическим пересчетом в excel запущенным через макросы в фоне. может быть, будете возражать, но по моим субъективным, внутренним ощущениям, встроенные формулы excel в большинстве аналогичных случаев работают существенно быстрее макросов. p.s. формулу разобрал, немного подкрутил, сейчас у меня она выглядит так: =ПСТР(A1;ПОИСК("\";ПОДСТАВИТЬ(A1;" ";"\";ДЛСТР(ЛЕВСИМВ(A1;ПОИСК("ася"; A1)))-ДЛСТР(ПОДСТАВИТЬ(ЛЕВСИМВ(A1;ПОИСК(" ася";A1));" ";""))))+1;НАЙТИ(" ";A1;НАЙТИ("ася";A1;1))-ПОИСК("\";ПОДСТАВИТЬ(A1;" ";"\";ДЛСТР(ЛЕВСИМВ(A1;ПОИСК("ася"; A1)))-ДЛСТР(ПОДСТАВИТЬ(ЛЕВСИМВ(A1;ПОИСК(" ася";A1));" ";""))))+1) >>=ПОИСК("\";ПОДСТАВИТЬ(A1;" ";"\";ДЛСТР(ЛЕВСИМВ(A1;ПОИСК("ася"; A1)))-ДЛСТР(ПОДСТАВИТЬ(ЛЕВСИМВ(A1;ПОИСК(" ася";A1));" ";""))))+1 прикольная штука, вообще не очевидная, еще раз спасибо Последний раз редактировалось peq; 27.11.2013 в 20:51. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" | Alexsandrr | Microsoft Office Excel | 4 | 19.10.2013 14:22 |
на вход подаются сведения об учениках и оценках. Найти тех, кто сдал на "4" и "5" ( Паскаль ) | weech | Помощь студентам | 1 | 18.11.2011 13:57 |
Найти слова, в которых доля букв "а" и "е" минимальна. | Андрей_ка | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 10.10.2010 16:56 |
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" | aleksei78 | Microsoft Office Excel | 13 | 25.08.2009 12:04 |
Помогите пожайлуста найти, кто человек "вконтакте", зная его "мэйл" | Аксюнька1990 | Помощь студентам | 1 | 12.06.2009 06:16 |