Lost your password?


Хитрости »
Основные понятия (27)
Сводные таблицы и анализ данных (10)
Графики и диаграммы (5)
Работа с VB проектом (12)
Power BI и Power Query (23)
Условное форматирование (5)
Списки и диапазоны (5)
Макросы(VBA процедуры) (68)
Разное (43)
Баги и глюки Excel (5)

Функция перемещения слова в строке

Я тут недавно понял одну вещь: если необходимо одно слово в предложении поменять местами с другим словом, то через стандартные функции листа 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(Alt+F11) -создать стандартный модуль(Insert -Module) и в него вставить скопированный текст. После чего функцию можно будет вызвать из Диспетчера функций(Ctrl+F3), отыскав её в категории Определенные пользователем (User Defined Functions).
Синтаксис:
=Move_SubString(A2;2;5)

Ячейка(A2) - текст или ссылка на ячейку с текстом, в котором необходимо переместить слово.

Номер_подстроки(2) - это номер слова в строке, которое перемещаем. Если для Номер_подстроки указать число заведомо большее, чем кол-во слов в строке(скажем 1000), то будет перемещено последнее слово на позицию, указанную аргументом Новое_место.

Новое_место(5) - номер позиции слова в строке, куда перемещаем.

Разделитель - необязательный аргумент. По умолчанию - пробел. Этим символом будет разделено перемещаемое слово.

С помощью функции можно либо переместить слово с одной позиции в предложении на другую или поменять слова в предложении местами. В файле-примере вы найдете примеры применения обоих вариантов.

Скачать пример

  Tips_Macro_MoveSubstring.xls (52,0 KiB, 3 398 скачиваний)

Также см.:
Работа с текстом
Как перевернуть слово?
Как перевернуть адрес


Статья помогла? Поделись ссылкой с друзьями!
  Плейлист   Видеоуроки

Поиск по меткам

Access apple watch Multex Power Query и Power BI VBA управление кодами Бесплатные надстройки Дата и время Записки ИП Надстройки Печать Политика Конфиденциальности Почта Программы Работа с приложениями Разработка приложений Росстат Тренинги и вебинары Финансовые Форматирование Функции Excel акции MulTEx ссылки статистика
Обсуждение: 4 комментария
  1. Павел:

    Спасибо. Очень полезная функция.

  2. Игорь:

    Все замечательно, но пример, который гараздо более встречающийся:
    Товар 1
    Новый товар 2
    Самый новый товар 3
    Старый товар из прошлой партии 4

    Как цифры поставить на первое место в вашей схеме?

  3. Игорь:

    Т.е необходимо ПОСЛЕДНЕЕ слово поставить первым.

  4. Для Вашего случая достаточно в начало кода после строки sStr = Split(Ячейка, Разделитель) добавить:

    If Номер_подстроки >= UBound(sStr) + 1 Then Номер_подстроки = UBound(sStr) + 1

    теперь если для Номер_подстроки указать число заведомо большее, чем кол-во слов в строке(скажем 100), то будет перемещено последнее слово на указанную позицию. В Вашем случае необходимо указать Новое_место - 1.
    Так же обновил файл и код в статье.

    P.S. Игорь, за все время что я программирую, почти каждый считает, что его проблема самая часто встречающаяся :-) Поэтому я бы на Вашем месте не говорил за всех, а только за себя. Т.е. это необходимость, наиболее часто встречающаяся у Вас, а не вообще.

Поделитесь своим мнением

Комментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме - добро пожаловать на Форум


Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Тренинги

Заказать
Юридическая информация

Использование материалов сайта

Политика Конфиденциальности

ИП Щербаков Дмитрий Валентинович
ОГРНИП: 318502700083307
ИНН: 504013350772

Наши партнеры

Перейти

Счетчики

Рейтинг@Mail.ru Яндекс.Метрика
© 2024 Excel для всех   Войти