Текст в ячейке задом наперёд
Добрый день, уважаемые читатели блога! Продолжаем серию уроков по Microsoft Excel и сегодня мы отойдём от привычного создания макросов, рассмотрения приёмов, различных тонкостей.
Поговорим о пользовательских функциях, то есть о функциях, которые может создавать сам пользователь, оперируя переменными Excel.
Перед нами стоит задача — отобразить текст в ячейке (произвольный) в обратном порядке. Пример: «Привет!», — в соседней ячейке появится: «!тевирП».
В таком случае можно использовать макрос, но количество действий, его (макроса) постоянный вызов не улучшат, а затруднят работу с таблицей.
Воспользуемся возможностью создания своих функций. Благо для этого нам подойдёт алгоритм создания макроса.
Добавляем новый модуль в наш документ:
- Вкладка «Разработчик», блок кнопок «Код», кнопка «Visual Basic»;
- Далее «Insert» — > «Module».
Добавим следующий текст в наш модуль:
Function dhReverseText(strText As String) As String
Dim i As Integer
For i = Len(strText) To 1 Step -1
dhReverseText = dhReverseText & Mid(strText, i, 1)
Next i
End Function
Разберём где у нас что:
- «Function dhReverseText(strText As String) As String» — название функции и объявление её типом строка;
- «Dim i As Integer» — объявление переменной i;
- «For i = Len(strText) To 1 Step -1» — для каждой переменной i типа строка устанавливаем обратный порядок расположения символов (Len — возвращает количество символов в ячейке);
- «dhReverseText = dhReverseText & Mid(strText, i, 1)» — указываем функции, что двигаться нужно от конца к началу;
- «Next i» — обработка следующего символа.
Прелестью такого подхода является работа с функцией, мы можем вводить её как простую формулу.
Результат будет такой.
Мы создали первую собственную функцию!
Вам также может понравиться статья — Вставка гиперссылок на листы таблицы.
Excel for Microsoft 365 Outlook for Microsoft 365 PowerPoint for Microsoft 365 Excel 2021 Outlook 2021 PowerPoint 2021 Excel 2019 Outlook 2019 PowerPoint 2019 Excel 2016 Outlook 2016 PowerPoint 2016 Excel 2013 Outlook 2013 PowerPoint 2013 Excel 2010 Outlook 2010 PowerPoint 2010 More…Less
To reverse (or mirror) text in a document, you must first enter the text in a text box. After reversing the text, you can remove the appearance of using a text box by removing the outline.
-
Insert a text box in your document by clicking Insert > Text Box, and then type and format your text.
For more details, see Add, copy, or delete a text box.
-
Right-click the box and click Format Shape.
-
In the Format Shape pane, click Effects.
-
Under 3-D Rotation, in the X Rotation box, enter 180.
Notes:
-
If your text box becomes filled with a color, you can remove the color in the Format Shape pane. Under Shape Options, click the Fill & Line tab , expand Fill, and select No fill.
-
If you want to remove the text box outline, right-click the text box, click Outline in the mini toolbar that appears, and choose No Outline.
-
-
Insert a text box in your document by clicking Insert > Text Box, and then type and format your text.
-
Right-click the box and click Format Shape.
-
In the Format Shape dialog box, click 3-D Rotation on the left.
-
In the X box, enter 180.
Notes:
-
If your text box becomes filled with a color, you can remove the color by right-clicking the text box, clicking the arrow next to Shape Fill in the mini toolbar that appears, and selecting No Fill.
-
If you want to remove the text box outline, right-click the text box, click the arrow next to Shape Outline in the mini toolbar that appears, and choose No Outline.
-
See also
Rotate a text box, shape, WordArt, or picture
Need more help?
Хитрости »
4 Май 2011 57902 просмотров
Как перевернуть слово?
Не самая распространенная, но тем не менее встречающаяса задача: перевернуть слово. Т.е. расположить буквы слова в обратном порядке. Из «привет» сделать «тевирп». Если честно, то сейчас затрудняюсь озвучить конкретную ситуацию, в которой это может пригодиться. Сам использовал когда-то в случае, когда надо было перевернуть числовые значения с еще некоторыми манипуляциями. Но ситуации бывают разные, как и решения задачи, которых несколько.
Сначала я хотел бы описать способы переворачивания слова средствами VBA, т.к. именно они кажутся мне наиболее рациональными и наиболее удобными для большинства, несмотря на необходимость использовать VBA.
Способ 1:
Через встроенную функцию VBA StrReverse(). Быстрый и короткий. Самый удобный. Но работает только начиная от Excel 2000 и выше.
Sub Reverse_Word() On Error Resume Next ActiveCell.Value = StrReverse(ActiveCell.Value) End Sub
Чтобы применить этот код необходимо слегка погрузиться в мир Visual Basic for Applications: переходим в редактор VBA(Alt+F11) —Insert —Module. Вставляем туда приведенный выше код. Выделяем ячейку с любым словом -Alt+F8 -Reverse_Word -Выполнить. Слово в активной ячейке будет перевернуто.
Способ 2:
Более медленный, содержит больше строк кода, но работает во всех версиях:
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(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 и выше можно использовать простую и гибкую формулу массива(вводится в ячейки такая формула сочетанием трех клавиш Ctrl+Shift+Enter):
=ОБЪЕДИНИТЬ(«»;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, 3 772 скачиваний)
Так же см.:
Функция перемещения слова в строке
Надстройка для замены и перемещения слов/аббревиатур
Как перевернуть адрес
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
В этой статье объясняется формула, сочетающая функции TEXTJOIN и MID для изменения порядка текстовых строк в ячейке в Excel.
Как перевернуть текстовую строку в ячейке в Excel?
Общая формула
=TEXTJOIN(«»,1,MID(text_string,{10,9,8,7,6,5,4,3,2,1},1)
аргументы
Текстовая_строка: Текстовая строка, порядок которой нужно изменить. Это может быть:
- 1. Текст, заключенный в кавычки;
- 2. Или ссылку на ячейку, содержащую текст.
Как пользоваться этой формулой?
1. Выберите пустую ячейку, чтобы вывести обратный результат.
2. Введите в нее приведенную ниже формулу и нажмите Enter и перетащите маркер заполнения, чтобы применить формулу к другим ячейкам.
=TEXTJOIN(«»,1,MID(B5,{10,9,8,7,6,5,4,3,2,1},1))
Советы: Вы можете заменить в формуле число 1 на ИСТИНА. Это означает, что пустые элементы в массиве будут проигнорированы.
Как работает эта формула?
=TEXTJOIN(«»,1,MID(B5,{10,9,8,7,6,5,4,3,2,1},1))
- 1. MID(B5,{10,9,8,7,6,5,4,3,2,1},1): Функция MID извлекает каждый символ текстовой строки в B5 в обратном порядке. Здесь результат: {«», «», «», «», «», «l», «e», «c», «x», «E»};
- 2. TEXTJOIN(«»,1,{«»,»»,»»,»»,»»,»l»,»e»,»c»,»x»,»E»}): Функция TEXTJOIN объединяет каждый символ в массиве и игнорирует пустые места. Конечным результатом будет «lecxE».
Примечание: Приведенная выше формула работает правильно, если длина текстовой строки равна или меньше 10 символов. Чтобы перевернуть текстовую строку, длина которой превышает 10 символов, примените следующую формулу массива:
=TEXTJOIN(«»,1,MID(A1,ABS(ROW(INDIRECT(«1:»&LEN(A1)))-(LEN(A1)+1)),1))
Пожалуйста, не забудьте нажать Ctrl + Shift + Enter ключи вместе, чтобы получить правильный результат.
Связанные функции
Функция TEXTJOIN в Excel
Функция Excel TEXTJOIN объединяет несколько значений из строки, столбца или диапазона ячеек с определенным разделителем.
Функция Excel MID
Функция MID используется для поиска и возврата определенного количества символов из середины данной текстовой строки.
Лучшие инструменты для работы в офисе
Kutools for Excel — Помогает вам выделиться из толпы
Хотите быстро и качественно выполнять свою повседневную работу? Kutools for Excel предлагает 300 мощных расширенных функций (объединение книг, суммирование по цвету, разделение содержимого ячеек, преобразование даты и т. д.) и экономит для вас 80 % времени.
- Разработан для 1500 рабочих сценариев, помогает решить 80% проблем с Excel.
- Уменьшите количество нажатий на клавиатуру и мышь каждый день, избавьтесь от усталости глаз и рук.
- Станьте экспертом по Excel за 3 минуты. Больше не нужно запоминать какие-либо болезненные формулы и коды VBA.
- 30-дневная неограниченная бесплатная пробная версия. 60-дневная гарантия возврата денег. Бесплатное обновление и поддержка 2 года.
Вкладка Office — включение чтения и редактирования с вкладками в Microsoft Office (включая Excel)
- Одна секунда для переключения между десятками открытых документов!
- Уменьшите количество щелчков мышью на сотни каждый день, попрощайтесь с рукой мыши.
- Повышает вашу продуктивность на 50% при просмотре и редактировании нескольких документов.
- Добавляет эффективные вкладки в Office (включая Excel), точно так же, как Chrome, Firefox и новый Internet Explorer.
Комментарии (3)
Оценок пока нет. Оцените первым!
У меня EXCEL 2003 есть ли формула которая бы написала слова наоборот? Например: КЕНГУРУ — УРУГНЕК ??? |
|
Hugo Пользователь Сообщений: 23257 |
Нет. |
Hugo Пользователь Сообщений: 23257 |
Function ReverseString(r As Range) |
kim Пользователь Сообщений: 3139 Игорь |
БАХТИ, есть такая формула, но я Вам ее не покажу, так как не отписываетесь в своих темах. |
просто я тут очень недавно (второй раз)… захожу в другие приложения этого сайта и потом чё-то скорость сёдня совсем мучает. |
|
{quote}{login=kim}{date=27.06.2011 06:51}{thema=}{post}БАХТИ, есть такая формула, но я Вам ее не покажу, так как не отписываетесь в своих темах.{/post}{/quote} честно говоря эта формула мне не нужна в практическом смысле просто интересно я как-то пробовал через длстр пстр левсимв правсимв … не получилось тогда |
|
kim Пользователь Сообщений: 3139 Игорь |
В этой теме http://www.planetaexcel.ru/forum.php/plex.php?thread_id=28874 Вам тоже ответы не нужны? |
{quote}{login=kim}{date=27.06.2011 07:07}{thema=}{post}В этой теме http://www.planetaexcel.ru/forum.php/plex.php?thread_id=28874 Вам тоже ответы не нужны? на той теме я уже объявил благодарность всем Когда я работаю в других приложениях этого сайта (например приемы или блог) как я могу сразу узнавать о том что кто-то ответил на мой вопрос в форуме? |
|
kim Пользователь Сообщений: 3139 Игорь |
Функциональность данного движка форума ограничена. |
{quote}{login=kim}{date=27.06.2011 07:23}{thema=}{post}Функциональность данного движка форума ограничена. |
|
Kuzmich Пользователь Сообщений: 7998 |
Билл Джелен «Применение VBA и макросов в Microsoft Excel» Function ReverseContents(myCell As Range, Optional IsText As Boolean = True) Dim i As Integer |
Здравствуйте! |
|
Hugo Пользователь Сообщений: 23257 |
True/False |
kim Пользователь Сообщений: 3139 Игорь |
К формульному варианту Димы добавил небольшую хитрость, теперь F9 жать не нужно |
Serge Пользователь Сообщений: 11308 |
Но надо включить итерации… |
kim Пользователь Сообщений: 3139 Игорь |
Серега, Дима уже это говорил на своем сайте, посчитал лишним повторять |
Hugo Пользователь Сообщений: 23257 |
Не работает. Ругается на циклическую ссылку и результата нет. |
Hugo Пользователь Сообщений: 23257 |
Итерации не включал и не буду |
kim Пользователь Сообщений: 3139 Игорь |
Единственное что хочется добавить, количество итераций должно быть гарантированно большим длины строки вводимого значения, я установил 10000. |
kim Пользователь Сообщений: 3139 Игорь |
{quote}{login=Hugo}{date=27.06.2011 11:28}{thema=}{post}Итерации не включал и не буду :){/post}{/quote} |
Юрий М Модератор Сообщений: 60588 Контакты см. в профиле |
{quote}{login=kim}{date=27.06.2011 11:30}{thema=Re: }{post}{quote}{login=Hugo}{date=27.06.2011 11:28}{thema=}{post}{/post}{/quote} чем обоснован страх перед итерациями? :){/post}{/quote} |
kim Пользователь Сообщений: 3139 Игорь |
Мда, чего-то давненько Повелитель итераций не появлялся Может он не знает, что сайт отремонтировали? |
Юрий М Модератор Сообщений: 60588 Контакты см. в профиле |
Нет — просто в лесу Wi-Fi отрубили. |
Hugo Пользователь Сообщений: 23257 |
У меня в лесу Wi-FI как видите работает:) |
Юрий М Модератор Сообщений: 60588 Контакты см. в профиле |
|
Hugo Пользователь Сообщений: 23257 |
Ну вот… |
vikttur Пользователь Сообщений: 47199 |
#28 02.07.2011 01:46:00 {quote}{login=kim}{date=27.06.2011 11:44}{thema=}{post}Мда, чего-то давненько Повелитель итераций не появлялся{/post}{/quote} |