Не самая распространенная, но тем не менее встречающаяса задача: перевернуть слово. Т.е. расположить буквы слова в обратном порядке. Из "привет" сделать "тевирп". Если честно, то сейчас затрудняюсь озвучить конкретную ситуацию, в которой это может пригодиться. Сам использовал когда-то в случае, когда надо было перевернуть числовые значения с еще некоторыми манипуляциями. Но ситуации бывают разные, как и решения задачи, которых несколько.
Сначала я хотел бы описать способы переворачивания слова средствами VBA, т.к. именно они кажутся мне наиболее рациональными и наиболее удобными для большинства, несмотря на необходимость использовать VBA.
Через встроенную функцию VBA StrReverse(). Быстрый и короткий. Самый удобный. Но работает только начиная от Excel 2000 и выше.
Sub Reverse_Word() On Error Resume Next ActiveCell.Value = StrReverse(ActiveCell.Value) End Sub |
Чтобы применить этот код необходимо слегка погрузиться в мир Visual Basic for Applications: переходим в редактор VBA(
Более медленный, содержит больше строк кода, но работает во всех версиях:
Sub Reverse_Word() Dim sWord As String, sReverseWord As String Dim li As Long sWord = ActiveCell.Value For li = Len(sWord) To 1 Step -1 sReverseWord = sReverseWord & Mid(sWord, li, 1) Next li ActiveCell.Value = sReverseWord End Sub |
Код применяется точно так же, как и первый.
Оба эти кода можно сделать функциями пользователя, чтобы вызывать их с листа Excel как любую другую функцию:
' Функция работает с версиями Excel, начиная с 2000 Function Reverse_Word(sWord As String) Reverse_Word = StrReverse(sWord) End Function ' Функция работает со всеми версиями Excel Function Reverse_Word_All(sWord As String) Dim sReverseWord As String Dim li As Long For li = Len(sWord) To 1 Step -1 sReverseWord = sReverseWord & Mid(sWord, li, 1) Next li Reverse_Word_All = sReverseWord End Function |
Чтобы правильно использовать приведенные выше коды, необходимо сначала ознакомиться со статьей Что такое функция пользователя(UDF)?. Вкратце: необходимо скопировать текст кода выше, перейти в редактор VBA(
Сразу хочу оговориться - стандартными формулами сделать это хоть и можно, но не совсем просто и совершенно неудобно. Для этого потребуется гораздо больше манипуляций, чем через VBA. Хотя для кого-то, возможно, способ формулами будет более прост, чем через VBA. Для начала необходимо будет включить итеративные вычисления в функциях:
- Excel 2003: Сервис -Параметры -Вычисления -ставим галочку Итерации
- Excel 2007: Меню -Параметры Excel -Формулы -Включить итеративные вычисления
- Excel 2010 и выше: Файл -Параметры -Формулы -Включить итеративные вычисления
Устанавливаем предельное число итераций - 1. Если слово, которое необходимо перевернуть записано в ячейке
Но в данном случае мало просто записать формулу. При внесении формулы в ячейку она сразу не выдаст необходимый результат. Необходимо пересчитывать формулу до тех пор, пока все слово не перевернется(я просто нажал и удерживал клавишу F9). Эту формулу я придумал чисто "из спортивного интереса". Но кому-то, возможно, будет гораздо проще так, чем через VBA.
В приложенном к статье файле помимо рассмотренных примеров есть еще один вариант решения формулами, который лично мне не нравится своей очевидностью, а главное - он "растягивается" на несколько ячеек. Это не очень удобно, но избавляет от необходимости включать итерации. Хотя на мой взгляд это единственный положительный момент в данном способе:
Слово в ячейке
При желании можно в какой-либо другой ячейке записать формулу сцепления всех полученных ячеек с запасом, чтобы получить единое слово в обратном порядке.
А для счастливых обладателей Excel 2016, 365 и выше можно использовать простую и гибкую формулу массива(вводится в ячейки такая формула сочетанием трех клавиш
Если текст слишком длинный необходимо лишь расширить диапазон
Никаких макросов и итераций - все же Microsoft думает о нас, о пользователях и внедряет всякие новые плюшки.
Tips_All_ReverseWord.xls (74,5 КиБ, 3 935 скачиваний)
Так же см.:
Функция перемещения слова в строке
Надстройка для замены и перемещения слов/аббревиатур
Как перевернуть адрес
конечно идея шикарная - лично мне пришлась кстати, хотя вначале посмотрел весьма обычно. Вот только вопросы возникли:
- провозился полдня - так ничего и не понял, мало того, и коды вставлял и формулы, и тянул в разные стороны, и файл качал - и ничего (не помогает).
Вообще ничего. Только есть - нули или по одной букве в ячейке - на том и все.
Вот если не трудно - может все таки поможете страждущим))))
- у меня есть столбец - в котором по возрастанию около 1000 слов увеличиваются по количеству букв, то есть 2-букв., затем 3-х и так далее - последнее 15 буквенное.
Как мне перевернуть весь столбец, причем так, чтобы без лишних действий в 3,4,5 и так далее этапов, чтобы получить из первого столбца - второй и уже готовый и полностью перевернутый????
Вот Вам вопрос - можете поможете?
Чем помочь-то страждущим? Я уже расписал все досконально в статье. Я даже пример со всеми описанными функциями выложил и даже макрос там создал, который перевернет быстро и без лишних движений ВСЕ слова в выделенном диапазоне. Вот Вам вопрос - у Вас макросы включены? У Вас не работает как? Что конкретно не получается?
Спасибо, Дмитрий. Все работает супер. (использую функцию Reverse_Word_All)
Данная задача мне необходима для поиска символа в тексте с конца.
Вячеслав, если ищете символ с конца слова тоже через VBA, то можно просто использовать встроенную в VBA функцию InStrRev. Она именно это и делает.
Здравствуйте!
Возникла необходимость развернуть "слово" 8 байт таким образом -12345678 -78563412
код ключей ТМ. Подскажите пожалуйста, каким образом это сделать?
Сергей, для обсуждения личных проблем есть форум. А Ваш вопрос к статье не имеет отношения, т.к. ни о каком перевороте слова речи не идет.
Вот спасибо тебе за работу, дорогой друг! Массу времени сэкономил!