Страницы: 1
RSS
Обработка текста формулами. (KL, не проходите мимо пожалуйста)
 
Вечер добрый,  
Учитывая "успех" утренней темы, решил ещё раз поднять вопрос про функцию подставить(). Или иную формулу с аналогичным результатом. Вдруг, это или нечто подобное всё же возможно...  
Интересует, в первую очередь, возможность тем или иным образом подставлять несколько значений поочерёдно, не прибегая к подставить(подставить...). В идеале, чтобы результат предыдущей подстановки заносился в аргумент функции подставить текст текущей подстановки.  
Опять же, хотелось бы, но не обязательно, возможность так же использовать разные значения номера вхождения/текста для разных значений "старого текста", причём, желательно, как числовые, т е берущиеся из некого диапазона, так и логические.  
 
На данный момент мне это не нужно для решения какой бы то ни было практической задачи, в связи с чем пример крайне условный, можно править/решать частично и так далее, как вашей душе угодно.  
 
Итак,  
Вот пример, продублированный в прикреплённом файле.  
В столбце A даны исходные данные, в столбцах B, C и D даны критерии изменений, в столбце G приведён требуемый результат. Пример:  
A B C D G    
1 Текст старый текст Новый текст №вх. Требуемый результат:    
2 ООО Компания ООО "" 1 Компания    
3 ОАО Рога и Копыта ОАО "" 1 Рога и Копыта    
4 ООО Альфа, КБ КБ Ком. Банк 1 Альфа, Ком. Банк    
5 Альфа, КБ, ООО "" "" "" Альфа, Ком. Банк  
PS: Подстановка одного из значений списка, что тоже может быть полезно, хотя очень отдалённо относится к данной теме я в последний раз решал примерно следующей формулой  
=ИНДЕКС(ПОДСТАВИТЬ(A3;B2:B5;"");ПОИСКПОЗ(МИН(ДЛСТР(ПОДСТАВИТЬ(A3;B2:B5;"")));ДЛСТР(ПОДСТАВИТЬ(A3;B2:B5;""));0))  
При прошлом обсуждении темы Prist экспериментировал с извлечением части текста и поиском её по диапазону заменяемых значений. К сожалению, тема вроде бы канула в лету в связи с чем нет возможности привести формулу полностью.
 
Думаю, что подобную задачу хоть раз пытался решить каждый из нас. ИМХО, если не прибегать к решениям через макросы или мекрофункциям XLM, задача одновременной замены нескольких различных фрагментов одной строки различными фрагментами в пределах одной ячейки и без "нанизывания" функции ПОДСТАВИТЬ() принципиально невыполнима :-) Причина, по которой я делаю такой вывод, проста:  
 
1) все стандартные функции, в параметрах которых обычно требуется значение и которые, тем не менее, позволяют использовать в этих параметрах массив, возвратят массив результатов. Иными словами, они будут поддерживать принцип: одно значение в параметре - одно значение в результате.  
 
2) несмотря на то, что существует возможность разбивки строки на элементы массива стандартными функциями в пределах одной ячейки(эквивалент Split в VBA), насколько мне известно, еще никто не нашел способа воспроизвести объединение элементов массива в одну строку(функция Join в VBA), используя лишь стандартные функции листа и в пределах одной ячейки.    
 
Но чем черт не шутит, очень бы хотелось ошибиться :-)  
 
Я трижды посылал в MS предложение создать функции листа эквивалентные Join, Split, InStrRev, StrReverse и многие другие, в т.ч. функции использующие настоящие регулярные выражения, что, среди прочих вещей, сделало бы задачу данной темы весьма тривиальной, но воз и ныне там.
KL
 
{quote}{login=KL}{date=14.08.2009 02:56}{thema=}{post}  
Я трижды посылал в MS предложение {/post}{/quote}Они вообще хоть на что-любо среагировали?  
Т.е.:  
1. Был ли ответ вообще (неважно, положительный или отрицательный)?    
2. И было ли внедрено чье-либо (а может Ваше?) предложение?
Bite my shiny metal ass!      
 
{quote}{login=Лузер™}{date=14.08.2009 08:13}{thema=Re: }{post}{quote}{login=KL}{date=14.08.2009 02:56}{thema=}{post}  
Я трижды посылал в MS предложение {/post}{/quote}Они вообще хоть на что-любо среагировали?  
Т.е.:  
1. Был ли ответ вообще (неважно, положительный или отрицательный)?    
2. И было ли внедрено чье-либо (а может Ваше?) предложение?{/post}{/quote}  
 
1) Да, у MVP прямая связь с Product Groups в Misrosoft (e-mail, закрытые форумы, программы бета-тестирования, конференции, местный офис и т.д.). Ответ в данном случае - это уведомление о получении.  
 
2) Да, вы даже не представляете себе, сколько они внедряют предложений и даже готовых решений от MVP :-)
KL
 
Спасибо.  
Очень, очень жаль.  
А есть ли у кого-нибудь готовый вариант пользовательской функции с примерно такими возможностями?
 
{quote}{login=Саша}{date=15.08.2009 01:04}{thema=}{post}Спасибо.  
Очень, очень жаль.  
А есть ли у кого-нибудь готовый вариант пользовательской функции с примерно такими возможностями?{/post}{/quote}  
См. приложение
 
ZVI, спасибо большое.  
Можно несколько дополнений/поправок попросить? Чтобы можно смело засунуть в копилку :)  
1) Добавить аргумент "вхождения" после аргумента numcount/количество замен, который не будет трогать "боковые" вхождения.  
Т е, к примеру, 1,1 означает, что не надо заменять первое и последнее вхождение.  
0,2 означает, что не надо заменять последние 2 значения.  
Просто 1, что не надо заменять первое вхождение.  
0 означает, что надо заменять все значения.  
Как задавать, в принципе, не важно. Задание через "," используется лишь в качестве примера.  
2) Добавить замороченный редко используемый аргумент в самый конец:  
Смысл в том, чтобы происходила проверка, является ли найденное значение частью слова или нет. Необязательный параметр, выключенный по умолчанию, т е не проводящий проверку.  
Честно говоря, не уверен, как лучше производить проверку, скорее всего поиском ближайшего пробела, где на время проведения данного поиска "удаляются"/не учитываются следующие знаки(постараюсь перечислить основные, однако, если в VBA можно как то проще обозначить все именно знаки, то можно использовать все знаки, если это не сильно "загрузит" формулу): "'();:!?.,[]\/
Зачем? Чтобы, при, скажем, удалении ООО, ООО не удалялось из "ООООтличная", но удалялась из (ООО) Компания.  
Возможные, в идеале, аргументы(как именно задавать-дело десятое, главное чтобы суть отражали):  
0 - не производится проверка  
1 - производится проверка  
И комбинации 0/1 с дополнительными и без учета определенных символов, т е, к примеру:  
0&+;-;ая - производится проверка только по дополнительным значениям "+", "-","ая", а ";" является разделителем между дополнительными значениями  
1&+&(;) - производится проверка по "основным" символам, по дополнительному символу "+", не производится проверка по "основному" символу "(", разделения "а так же, кроме" проводятся, используя "&"  
 
Если так задавать нельзя, то может вынести как-нибудь в дополнительные аргументы в конце? Опять таки, как именно это задавать не принципиально.  
 
 
И можете пояснить пожалуйста аргумент numstart/"С символа"? То ли я смысла не понимаю, то ли какая то ошибка при написании функции приключилась...  
Т е я думал, что при поиске Х значения не будет учитываться первые Y символов, что логично, исходя из вашего комментария и требования определённого количества "ячеек" со значениями. Он же производит усечение всего "сразу", причём не только для поиска, но и для выводимого итогового результата.  
 
Ещё раз большое спасибо.
 
{quote}{login=KL}{date=14.08.2009 08:43}{thema=Re: Re: }{post}  
1) Да,  
2) Да, {/post}{/quote} Тогда почему <<трижды посылал ... но воз и ныне там>>?  
Ваше мнение? Это какая-нибудь "политика"?  
 
И что такое "местный офис"?  
 
Простите за назойливость.
Bite my shiny metal ass!      
 
{quote}{login=Лузер™}{date=16.08.2009 02:04}{thema=Re: Re: Re: }{post}{quote}{login=KL}{date=14.08.2009 08:43}{thema=Re: Re: }{post}  
1) Да,  
2) Да, {/post}{/quote} Тогда почему <<трижды посылал ... но воз и ныне там>>?  
Ваше мнение? Это какая-нибудь "политика"?  
 
И что такое "местный офис"?  
 
Простите за назойливость.{/post}{/quote}  
Думаю, что предложений и без меня хватает, и вероятно поднятая мной проблема сейчас не приоритетна для разработчиков :-) Местный офис - это офис в стране MS в стране проживания MVP, в данном случае испанское отделение MS :-)
KL
 
Спасибо.  
офис в смысле контора, а не ПО.  
А то я начал про особый пакет офиса для избранных думать :))  
Или таковой тоже есть?
Bite my shiny metal ass!      
 
{quote}{login=Лузер™}{date=16.08.2009 02:26}{thema=}{post}Спасибо.  
офис в смысле контора, а не ПО.  
А то я начал про особый пакет офиса для избранных думать :))  
Или таковой тоже есть?{/post}{/quote}  
Нет :-)
 
это был я
KL
Страницы: 1
Читают тему
Наверх