Я тут недавно понял одну вещь: если необходимо одно слово в предложении поменять местами с другим словом, то через стандартные функции листа Excel это сделать не столько даже проблематично, сколько в итоге слишком замороченно получается и совсем не универсально. Вот и решил создать небольшую функцию пользователя, которая бы умела перемещать слово из одной позиции в другую.
Function Move_SubString(Ячейка As String, Номер_подстроки As Long, Новое_место As Long, Optional Разделитель As String = " ") 'Ячейка - текст или ссылка на ячейку с текстом 'Номер_подстроки - это номер слова в строке, которое перемещаем. 'Новое_место - куда в строке перемещаем. 'Разделитель - необязательный аргумент. По умолчанию - пробел. Dim sStr, li As Long, lcnt As Long Dim sNewWord As String, sTmpStr As String sStr = Split(Application.Trim(Ячейка), Разделитель) If Номер_подстроки >= UBound(sStr) + 1 Then Номер_подстроки = UBound(sStr) + 1 For li = LBound(sStr) To UBound(sStr) If li = Номер_подстроки - 1 Then sTmpStr = sStr(li): sStr(li) = "" Next li For li = LBound(sStr) To UBound(sStr) If sStr(li) <> "" Then lcnt = lcnt + 1 If lcnt = Новое_место Then sNewWord = sNewWord & Разделитель & sTmpStr & Разделитель & sStr(li) Else sNewWord = sNewWord & Разделитель & sStr(li) End If End If Next li If Новое_место >= UBound(sStr) + 1 Then sNewWord = sNewWord & Разделитель & sTmpStr Move_SubString = Application.Trim(sNewWord) End Function |
Чтобы правильно использовать приведенный код, необходимо сначала ознакомиться со статьей Что такое функция пользователя(UDF)?. Вкратце: скопировать текст кода выше, перейти в редактор VBA(
Синтаксис:
Ячейка
Номер_подстроки
Новое_место
Разделитель - необязательный аргумент. По умолчанию - пробел. Этим символом будет разделено перемещаемое слово.
С помощью функции можно либо переместить слово с одной позиции в предложении на другую или поменять слова в предложении местами. В файле-примере вы найдете примеры применения обоих вариантов.
Tips_Macro_MoveSubstring.xls (52,0 КиБ, 3 466 скачиваний)
Также см.:
Работа с текстом
Как перевернуть слово?
Как перевернуть адрес
Спасибо. Очень полезная функция.
Все замечательно, но пример, который гараздо более встречающийся:
Товар 1
Новый товар 2
Самый новый товар 3
Старый товар из прошлой партии 4
Как цифры поставить на первое место в вашей схеме?
Т.е необходимо ПОСЛЕДНЕЕ слово поставить первым.
Для Вашего случая достаточно в начало кода после строки
sStr = Split(Ячейка, Разделитель)
добавить:теперь если для Номер_подстроки указать число заведомо большее, чем кол-во слов в строке(скажем 100), то будет перемещено последнее слово на указанную позицию. В Вашем случае необходимо указать Новое_место - 1.
Так же обновил файл и код в статье.
P.S. Игорь, за все время что я программирую, почти каждый считает, что его проблема самая часто встречающаяся :-) Поэтому я бы на Вашем месте не говорил за всех, а только за себя. Т.е. это необходимость, наиболее часто встречающаяся у Вас, а не вообще.