Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2013, 22:54   #1
peq
Форумчанин
 
Регистрация: 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;" кефир ";"")
peq вне форума Ответить с цитированием
Старый 26.11.2013, 23:47   #2
Czeslaw
Пользователь
 
Регистрация: 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)))
Вложения
Тип файла: rar Book1.rar (6.2 Кб, 16 просмотров)
Czeslaw вне форума Ответить с цитированием
Старый 27.11.2013, 13:50   #3
peq
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 230
По умолчанию

Спасибо, но надо не совсем так - количество слов перед словом-ключом может меняться.
Через =НАЙТИ(" ";A1;НАЙТИ("ася";A1;1)) можно выйти на конец слова-ключа, но как выйти его начало.. загадка.
peq вне форума Ответить с цитированием
Старый 27.11.2013, 14:37   #4
Neyandex
Пользователь
 
Регистрация: 21.11.2013
Сообщений: 11
По умолчанию

Цитата:
Сообщение от peq Посмотреть сообщение
Спасибо, но надо не совсем так - количество слов перед словом-ключом может меняться.
Через =НАЙТИ(" ";A1;НАЙТИ("ася";A1;1)) можно выйти на конец слова-ключа, но как выйти его начало.. загадка.
Тупо вычесть длину слова.
Neyandex вне форума Ответить с цитированием
Старый 27.11.2013, 17:49   #5
peq
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 230
По умолчанию

а откуда ее взять?
изначально, я знаю лишь часть слова, грубо говоря - корень(соответственно и часть длины слова).
что перед ним и что после него я не знаю.
peq вне форума Ответить с цитированием
Старый 27.11.2013, 18:03   #6
Czeslaw
Пользователь
 
Регистрация: 08.07.2013
Сообщений: 95
По умолчанию

Вы плохо протестировали мою формулу, т. к. я перед тем как выслать менял количество слов и она у меня работала и теперь работает.

Последний раз редактировалось Czeslaw; 27.11.2013 в 18:11.
Czeslaw вне форума Ответить с цитированием
Старый 27.11.2013, 18:07   #7
peq
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 230
По умолчанию

подумав еще, вариант вижу только один.. тупой правда.. но макросы, насколько, их вижу, обновляться будут медленнее намного, а скорость перерасчета мне критична.
вариант решения состоит в том, что хоть величина приставки программно не лимитирована, но выше 5-7 символов я ее пока не видел. соответственно, если i - начало корня, создаем десяток "если" и перебираем в поисках пробела символы строки i-1, i-2, ... i-10.
peq вне форума Ответить с цитированием
Старый 27.11.2013, 18:20   #8
peq
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 230
По умолчанию

Цитата:
Сообщение от Czeslaw Посмотреть сообщение
Вы плохо протестировали мою формулу, т. к. я перед тем как выслать менял количество слов и она у меня работала и теперь работает.
наоборот, хорошо проверил - нашел в ней ошибку
посмотрел еще раз - ошибка вылетает при нахождении в строке нескольких пробелов подряд(в моем примере подобное есть)
без изменения собственной структуры формула работать будет при A2=СЖПРОБЕЛЫ(A1) и переориентации формулы на А2.
глобально формула результат выдает правильный, сейчас в нее вчитаюсь. как она работает - сходу мне не совсем очевидно.
большое спасибо.
peq вне форума Ответить с цитированием
Старый 27.11.2013, 20:06   #9
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Сколько строк предполагается так обрабатывать?
Код:
Dim r As Object

Public Function word$(s$)
    On Error GoTo word_Error
    word = r.Execute(s)(0)
    On Error GoTo 0
    Exit Function
word_Error:
    If Err.Number <> 91 Then
        Err.Raise 5
        Exit Function
    End If
    Set r = CreateObject("vbscript.regexp")
    r.Pattern = "[а-я]+ася": r.IgnoreCase = True
    Err.Clear
    Resume
End Function
Вот файл на 2.5к строк. Считаете это медленно?
Вложения
Тип файла: rar word.rar (48.1 Кб, 6 просмотров)
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728

Последний раз редактировалось kuklp; 27.11.2013 в 20:28.
kuklp вне форума Ответить с цитированием
Старый 27.11.2013, 20:48   #10
peq
Форумчанин
 
Регистрация: 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.
peq вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постоянно слетает галочка "автоматически" в "Параметры 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