Хитрости »
Основные понятия (22)
Сводные таблицы и анализ данных (7)
Графики и диаграммы (5)
Работа с VB проектом (11)
Power BI и Power Query (11)
Условное форматирование (5)
Списки и диапазоны (5)
Макросы(VBA процедуры) (62)
Разное (37)

Как перевернуть слово?

Не самая распространенная, но тем не менее встречающаяса задача: перевернуть слово. Т.е. расположить буквы слова в обратном порядке. Из "привет" сделать "тевирп". Если честно, то сейчас затрудняюсь озвучить конкретную ситуацию, в которой это может пригодиться. Сам использовал когда-то в случае, когда надо было перевернуть числовые значения с еще некоторыми манипуляциями. Но ситуации бывают разные, как и решения задачи, которых несколько.
Сначала я хотел бы описать способы переворачивания слова средствами VBA, т.к. именно они кажутся мне наиболее рациональными и наиболее удобными для большинства, несмотря на необходимость использовать VBA.

Способ 1:
Через встроенную функцию VBA StrReverse(). Быстрый и короткий. Самый удобный. Но работает только начиная от Excel 2000 и выше.

Чтобы применить этот код необходимо слегка погрузиться в мир Visual Basic for Applications: переходим в редактор VBA(Alt+F11) -Insert -Module. Вставляем туда приведенный выше код. Выделяем ячейку с любым словом -Alt+F8 -Reverse_Word -Выполнить. Слово в активной ячейке будет перевернуто.

Способ 2:
Более медленный, содержит больше строк кода, но работает во всех версиях:

Код применяется точно так же, как и первый.

Оба эти кода можно сделать функциями пользователя, чтобы вызывать их с листа Excel как любую другую функцию:

Чтобы правильно использовать приведенные выше коды, необходимо сначала ознакомиться со статьей Что такое функция пользователя(UDF)?. Вкратце: необходимо скопировать текст кода выше, перейти в редактор VBA(Alt+F11) -создать стандартный модуль(Insert -Module) и в него вставить скопированный текст. После чего функцию можно будет вызвать из Диспетчера функций, отыскав её в категории Определенные пользователем (User Defined Functions).


Способ 3: стандартными функциями в любой версии Excel
Сразу хочу оговориться - стандартными формулами сделать это хоть и можно, но не совсем просто и совершенно неудобно. Для этого потребуется гораздо больше манипуляций, чем через VBA. Хотя для кого-то, возможно, способ формулами будет более прост, чем через VBA. Для начала необходимо будет включить итеративные вычисления в функциях:

  • Excel 2003: Сервис -Параметры -Вычисления -ставим галочку Итерации
  • Excel 2007: Меню -Параметры Excel -Формулы -Включить итеративные вычисления
  • Excel 2010: Файл -Параметры -Формулы -Включить итеративные вычисления

Устанавливаем предельное число итераций - 1. Если слово, которое необходимо перевернуть записано в ячейке А1, то формула будет выглядеть следующим образом:
=ЕСЛИ(ДЛСТР(B1)>=ДЛСТР(A1);B1;ЕСЛИ(ДЛСТР(B1)=1;ПСТР(A1;ДЛСТР(A1);1);B1)&ПСТР(A1;ДЛСТР(A1)-ДЛСТР(B1);1))
=IF(LEN(B1)>=LEN(A1),B1,IF(LEN(B1)=1,MID(A1,LEN(A1),1),B1)&MID(A1,LEN(A1)-LEN(B1),1))

Но в данном случае мало просто записать формулу. При внесении формулы в ячейку она сразу не выдаст необходимый результат. Необходимо пересчитывать формулу до тех пор, пока все слово не перевернется(я просто нажал и удерживал клавишу F9). Эту формулу я придумал чисто "из спортивного интереса". Но кому-то, возможно, будет гораздо проще так, чем через VBA.
В приложенном к статье файле помимо рассмотренных примеров есть еще один вариант решения формулами, который лично мне не нравится своей очевидностью, а главное - он "растягивается" на несколько ячеек. Это не очень удобно, но избавляет от необходимости включать итерации. Хотя на мой взгляд это единственный положительный момент в данном способе:
=ЕСЛИ(СТОЛБЕЦ(A1)>ДЛСТР($A2);"";B2&ПСТР($A2;ДЛСТР($A2)+1-СТОЛБЕЦ(A1);1))
=IF(COLUMN(A1)>LEN($A2),"",B2&MID($A2,LEN($A2)+1-COLUMN(A1),1))

Слово в ячейке $A2, B2 должна быть пустой, а уже с C2 начинается формула.


Функция для Excel 2016 и выше
А для счастливых обладателей Excel 2016, 365 и выше можно использовать простую и гибкую формулу массива:
=ОБЪЕДИНИТЬ("";0;ЕСЛИОШИБКА(ПСТР(A1;ДЛСТР(A1)-СТРОКА(A1:A999)+1;1);""))
=TEXTJOIN("",0,IFERROR(MID(A1,LEN(A1)-ROW(A1:A50000)+1,1),""))

Если текст слишком длинный необходимо лишь расширить диапазон A1:A999 с чуть большим запасом, например: A1:A50000. 50 000 букв точно хватит :)
Никаких макросов и итераций - все же Microsoft думает о нас, о пользователях и внедряет всякие новые плюшки.


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

  Tips_All_ReverseWord.xls (74,5 KiB, 2 437 скачиваний)

Так же см.:
Функция перемещения слова в строке
Надстройка для замены и перемещения слов/аббревиатур
Как перевернуть адрес


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

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

Access Multex Outlook Power Query и Power BI VBA работа в редакторе VBA управление кодами Бесплатные надстройки Дата и время Диаграммы и графики Записки Защита данных Интернет Картинки и объекты Листы и книги Макросы и VBA Настройка Печать Поиск данных Почта Программы Работа с приложениями Работа с файлами Разработка приложений Сводные таблицы Списки Тренинги и вебинары Финансовые Форматирование Формулы и функции Функции Excel Функции VBA Ячейки и диапазоны акции MulTEx анализ данных ссылки
Обсуждение: 5 комментариев
  1. vl:

    конечно идея шикарная - лично мне пришлась кстати, хотя вначале посмотрел весьма обычно. Вот только вопросы возникли:
    - провозился полдня - так ничего и не понял, мало того, и коды вставлял и формулы, и тянул в разные стороны, и файл качал - и ничего (не помогает).
    Вообще ничего. Только есть - нули или по одной букве в ячейке - на том и все.
    Вот если не трудно - может все таки поможете страждущим))))
    - у меня есть столбец - в котором по возрастанию около 1000 слов увеличиваются по количеству букв, то есть 2-букв., затем 3-х и так далее - последнее 15 буквенное.
    Как мне перевернуть весь столбец, причем так, чтобы без лишних действий в 3,4,5 и так далее этапов, чтобы получить из первого столбца - второй и уже готовый и полностью перевернутый????
    Вот Вам вопрос - можете поможете?

    0
  2. Чем помочь-то страждущим? Я уже расписал все досконально в статье. Я даже пример со всеми описанными функциями выложил и даже макрос там создал, который перевернет быстро и без лишних движений ВСЕ слова в выделенном диапазоне. Вот Вам вопрос - у Вас макросы включены? У Вас не работает как? Что конкретно не получается?

    0
  3. Сергей:

    Здравствуйте!
    Возникла необходимость развернуть "слово" 8 байт таким образом -12345678 -78563412
    код ключей ТМ. Подскажите пожалуйста, каким образом это сделать?

    0
  4. Сергей, для обсуждения личных проблем есть форум. А Ваш вопрос к статье не имеет отношения, т.к. ни о каком перевороте слова речи не идет.

    0
  5. Сергей:

    Вот спасибо тебе за работу, дорогой друг! Массу времени сэкономил!

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

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


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

Тренинги

Заказать
Наши партнеры
Перейти
Перейти
Счетчики
Анализ сайта

Яндекс.Метрика
© 2017 Excel для всех  Войти
Авторизация
*
*
Регистрация
*
*
*
Пароль не введен
*
captcha
Генерация пароля