Страницы: 1 2 След.
RSS
как сохранить количество символов в одной ячейки после замены слова
 
Добрый день, форумчане!
Столкнулась с токой проблемой: мне необходимо заменить одно слова в ячейке таким образом, чтобы количество знаков в ней не изменилось.
Пример:
Иван Мария Николай - полностью 18 знаков с пробелами
Заменить "Мария" на "Коля" (Позиция имени "Николай" начинается с 12 позиции)
После замены "Мария" на "Коля" позиция имени Николай должна остаться неизменной, т.е 12-я
Посколько в одной ячейке возможно много замен и ячеек очень много, то ручная замена не подходит.
Подскажите, кто нибудь сталкиввался с такой проблемой и как ее решил?
Спасибо!
 
а если было наоборот будет замена, то тогда как?
 
Не понятен вопрос. "а если было наоборот будет замена, то тогда как?"  
 
Ivan.kh, да и я тоже не понимаю Мария по символам больше Коли тут можно знаки пробелами допилить эт понятно и можно формулой сварганить а вот как быть если будем менять колю на Марию что делать резать Марию до символов Коли или все таки сдвигать кого то в тексте
Лень двигатель прогресса, доказано!!!
 
если "Коля" (4 символа) необходимо заменить на "Мария" (5 символов), тогда позиция след. слова точно не будет прежней

Добавлено: Сергей опередил :)  
Изменено: Ivan.kh - 16.04.2015 12:20:28
 
Как-то так (но при условии, что новый текст не длиннее, чем старый)
Код
=ПОДСТАВИТЬ(C1;D1;E1&ПОВТОР(" ";ДЛСТР(D1)-ДЛСТР(E1)))


 
Изменено: МВТ - 16.04.2015 12:22:57
 
МВТ, на сколько я понимаю, то Integraнужен макрос, т.к. данных много и замен много, и формулами это делать будет не совсем удобно. Да и возвращаясь к нашему с Сергеем вопросу, ваша формула выдаст ошибку.
 
Ivan.kh, я и написал, что работает, если новое значение не длиннее, чем старое. Макрос, Вы имеете в виду, чтобы не из ячеек брать старые и новые значения, а из инпутбокса? Или теперь я Вас не понял?
 
Проблема в том, что замены нужны как с большего на меньшее количество символов,так и наоборот. При этом позиции остальных меняться не должны.
 
МВТ,прошу прошения - не дочитал оговорку.
 
Integra, а как вы себе это представляете в описанном мной и Сергеем примере?
 
Ivan.kh, эт надо впихнуть невпихуемое извиняюсь за французкий
Лень двигатель прогресса, доказано!!!
 
Цитата
Integra написал: замены нужны как с большего на меньшее количество символов,так и наоборот
А вот как быть с "наоборот"? Если в первом варианте можно нарастить длину пробелами, то как Вы это видите для "наоборот"? Что-то ведь придётся резать ))
 
Вопрос не в том как представляю, а в том что для выполнения данного задания, в моем случеа, условия прописаны четко "позиции меняться не должны".
Вот хотелось понять кто с такими условиями сталкивался и как решал подобную задачу.
 
подумать можно, но без примера не охота
 
Integra, решить ее можно только "обрезая" новую строку до длины предыдущей. Фактически, ваше условие - это Прокрустово ложе в его первоначальном смысле
 
Символы для каждого слова составляют 50 знаков. т.е к примеру 3 слова на каждое выделено 50 знаков
 
А если будет чётко прописано невыполнимое условие, тогда как? Я про то, что для второго варианта придётся жертвовать каким-то именем - калечить его))
Вот Вы бы взяли и показали в файле пару строк: исходные данные - желаемый результат. Для обоих случаев.
 
офф:

Цитата
МВТ написал: это Прокрустово ложе в его первоначальном смысле
понравилось
 
Для наглядности по позицияям прилагаю файл в txt. но с файлом я работаю в Excel
Суть вопроса была о возможности  исполнить эту задачу в Excel.
 
Ivan.kh, решил воспользоваться Вашим советом, получилось так
Код
Function Procrustes(Sorce As String, oldStr As String, newStr As String) As String
Dim L1, L2 As Long, aStr As String
L1 = Len(oldStr)
L2 = Len(newStr)
If L2 > L1 Then aStr = Left(newStr, L1) Else aStr = newStr & Space(L1 - L2)
Procrust = Replace(Sorce, oldStr, aStr)
End Function


 
Если нужно делать в Excel, почему пример txt?
 
Афоризм интересный, но в моем случае "вытягивать ноги" нет необходимости)
 
Юрий М в txt. пример чтобы наглядно было ясно, что количество символов по позициям фиксировано.
 
Код
Sub qq()
Strc = "коля           вася           маша           "
s = Split(Application.Trim(Replace(Strc, "коля", "сережа")))
Strc = s(0) & String(15 - Len(s(0)), " ") & s(1) & String(15 - Len(s(1)), " ") & s(2) & String(15 - Len(s(2)), " ")
[A2] = Strc
End Sub
 
Если на каждую подстроку у Вас отведено определенное количество символов, включая замещающие пробелы, то можно немного видоизменить UDF
Код
Function Procrustes(Sorce As String, oldStr As String, newStr As String, Optional etalon As Long = 0) As String
Dim L1, L2 As Long, aStr As String
If etalon = 0 Then L1 = Len(oldStr) Else L1 = etalon
L2 = Len(newStr)
If L2 > L1 Then aStr = Left(newStr, L1) Else aStr = newStr & Space(L1 - L2)
Procrustes = Replace(Sorce, oldStr, aStr)
End Function
 
народ а с каким файлом работаете или у меня косоглазие
Лень двигатель прогресса, доказано!!!
 
С файлом из воздуха. :D
По крайней мере, длина частей, и их количество оттуда.
 
ааааааааа ну тогда удачи топикстартеру при прикручивании ваших макросов к своему файлу :)
Лень двигатель прогресса, доказано!!!
 
Спасибо за ответы)) файл в xls. аналогичен ранее выложенному в txt.
Страницы: 1 2 След.
Наверх