Макрос-переводчик
Обучим немецкому
языку по методу гестапо.
Работающие в иностранных компаниях сотрудники часто вынуждены готовить по два одинаковых отчета для отечественного и зарубежного своего начальства — на русском и английском языках. Цифры в этих отчетах, естественно, одинаковые, а меняются только подписи, заголовки и другой текст.
Такую задачу можно решить более изящно. Создаем новый лист в таком отчете и называем его «Словарь«. Выписываем на этот лист в любом порядке все слова, которые надо автоматически переводить. Для каждого языка добавляем новый столбец, например, так:
Потом переходим в редактор Visual Basic (меню Сервис — Макрос — Редактор Visual Basic), вставляем новый модуль (меню Insert — Module) и копируем туда текст вот этих двух макросов:
Sub Translate() Dim cell1 as Range, cell2 As Range Dim i as Long, Langs As Long Langs = 3 'количество языков перевода, включая русский For Each cell1 In ActiveSheet.Cells.SpecialCells(xlCellTypeConstants) For Each cell2 In Worksheets("Словарь").Cells.SpecialCells(xlCellTypeConstants) If cell1.Value = cell2.Value Then i = cell2.Column If i = Langs Then i = 1 Else i = i + 1 cell1.Value = Worksheets("Словарь").Cells(cell2.Row, i).Value GoTo 1 End If Next cell2 1: Next cell1 End Sub
Теперь можно вернуться на лист с отчетом и запустить макрос Translate через меню Сервис — Макрос — Макросы (Tools — Macro — Macros) или нажав ALT+F8. Все слова из вашего отчета, найденные в на листе Словарь, будут заменены на слова из соседней колонки, т.е. переведены на другой язык. Запуская макрос несколько раз, мы будем по кругу переводить наш отчет последовательно на русский-английский-немецкий-русский-английский-и т.д. Выглядеть это будет так:
Praktisch, nicht wahr?
Ссылки по теме
- Что такое макросы, куда вставлять код макроса на VBA, как их использовать
- Преобразование русского текста в транслит
Данная VBA функция позволяет перевести текст с любого языка на другой
Язык исходного текста можно не указывать — Google распознает его самостоятельно.
(т.е. вызовы res$ = Translate(txt$, «en», «ru») и res$ = Translate(txt$, «en») равнозначны)
Добавлено 17.10.2011
В данный момент функция не работает для большого числа запросов — Google недавно ввёл ограничение.
Решение для обхода этого ограничения сложное, потому пока мной не реализовано (не было необходимости)
Добавлено 07.03.2012
Исправленный вариант функции вы можете найти в конце статьи. (теперь снова можно выполнять автоматизированный перевод любого количества фраз на любые языки)
Алгоритм функции немного изменился — но это и не важно, главное, что перевод снова работает.
Пример использования перевода на листе Excel — во втором прикреплённом файле
Sub ПримерИспользованияФункцииПеревода() txt$ = "Привет! Это функция перевода текста на иностранный язык" res$ = Translate(txt$, "en", "ru") MsgBox "Результат перевода на английский:" & vbNewLine & res$, vbInformation, txt$ res$ = Translate(txt$, "de") MsgBox "Результат перевода на немецкий:" & vbNewLine & res$, vbInformation, txt$ End Sub
Список кодов доступных языков для перевода:
(используются в качестве параметров функции Translate)
ar — арабский; bg — болгарский; cs — чешский;
da — датский ; de — немецкий; el — греческий;
en — английский; es — испанский; fi — финский;
fr — французский; hi — хинди; hr — хорватский;
it — итальянский; ja — японский; ko — корейский;
nl — голландский; no — норвежский; pl — польский;
pt — португальский; ro — румынский; ru — русский;
sv — шведский; zh-cn — китайский упрощенный; zh-tw — китайский традиционный
Код функции перевода:
Function Translate$(ByVal TextToBeTranslated$, ByVal resultLanguageCode$, Optional ByVal sourceLanguageCode$ = "") ' переводит текст TextToBeTranslated$ с языка sourceLanguageCode$ на язык resultLanguageCode$, ' используя сервис переводов Google Translate With CreateObject("ADODB.Stream") .Charset = "utf-8": .Mode = 3: .Type = 2: .Open .WriteText TextToBeTranslated: .Flush: .Position = 0 .Type = 1: .Read 3: ByteArrayToEncode = .Read(): .Close End With For i = 0 To UBound(ByteArrayToEncode) iAsc = ByteArrayToEncode(i) Select Case iAsc Case 32: sTemp$ = "+" 'space Case 48 To 57, 65 To 90, 97 To 122: sTemp$ = Chr(ByteArrayToEncode(i)) Case Else: sTemp$ = "%" & Hex(iAsc) End Select txt$ = txt$ & sTemp$ Next Set objhttp = CreateObject("MSXML2.ServerXMLHTTP") URL$ = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=" & _ txt$ & "&langpair=" & sourceLanguageCode$ & "%7C" & resultLanguageCode$ objhttp.Open "GET", URL$, False objhttp.setTimeouts 1000000, 1000000, 1000000, 1000000: objhttp.send ("") Translate$ = objhttp.responseText Translate$ = Right(Translate$, Len(Translate$) - InStr(1, Translate$, "translatedText") - 16) Translate$ = Left(Left(Translate$, InStr(1, Translate$, Chr(34)) - 1), 255) Translate$ = Replace(Translate$, "quot;", Chr(39)) If Translate$ = " null, " Then Translate$ = "Не переведено" End Function
(добавлено позже)
Видоизменил функцию — теперь перевод снова работает
(пример использования — во втором прикреплённом файле)
Function Translate$(ByVal TextToBeTranslated$, ByVal resultLanguageCode$, _ Optional ByVal sourceLanguageCode$ = "") ' переводит текст TextToBeTranslated$ с языка sourceLanguageCode$ ' на язык resultLanguageCode$, используя сервис переводов Google Translate Application.Volatile True Set ADOStream = CreateObject("ADODB.Stream") With ADOStream .Charset = "utf-8": .Mode = 3: .Type = 2: .Open .WriteText TextToBeTranslated: .Flush: .Position = 0 .Type = 1: .Read 3: ByteArrayToEncode = .Read(): .Close End With For i = 0 To UBound(ByteArrayToEncode) iAsc = ByteArrayToEncode(i) Select Case iAsc ' переводим текст в кодировку, понятную Google Case 32: sTemp$ = "+" 'space Case 48 To 57, 65 To 90, 97 To 122: sTemp$ = Chr(ByteArrayToEncode(i)) Case Else: sTemp$ = "%" & Hex(iAsc) 'Chr(iAsc) End Select txt$ = txt$ & sTemp$ Next ' формируем ссылку, по которой Google выдаст нам файл с переводом URL$ = "http://translate.google.com.ua/translate_a/t?client=json&text=" & _ txt$ & "&hl=" & resultLanguageCode$ & "&sl=" & sourceLanguageCode$ Set XMLHTTP = CreateObject("Microsoft.XMLHTTP") ' скачиваем файл XMLHTTP.Open "GET", Replace(URL$, "", "/"), "False": XMLHTTP.send If XMLHTTP.statustext = "OK" Then LocalPath$ = Environ("TMP") & "google.txt" With ADOStream ' перекодировка файла .Type = 1: .Open: .Write XMLHTTP.responseBody .SaveToFile LocalPath$, 2 .Close: .Type = 2: .Charset = "utf-8": .Open: .LoadFromFile LocalPath$ ' загружаем данные из файла Translate$ = .ReadText ' считываем текст файла в переменную Translate$ End With On Error Resume Next ' вырезаем нужный текст из ответа Translate$ = Split(Translate$, """trans"":""")(1) Translate$ = Split(Translate$, """,""orig")(0) Translate$ = Replace(Translate$, "quot;", Chr(39)) If Translate$ = " null, " Then Translate$ = "Не переведено" End If Set XMLHTTP = Nothing: Set ADOStream = Nothing End Function
Update: Improved For Each v In arr_Response
-iteration, allowing special charactors. Added mouse-cursor change, when translation is processing. Added an example on how to improve the translated output_string.
There are a majority of free translation API’s outthere, but none really seems to beat Googles Translation Service, GTS (in my opinion). As a result of Googles’ restrictions on the free GTS-usage, the best VBA-approach seems to be narrowed down to the IE.navigation — as Santosh’s answer also emphasizes.
Using this approach, causes some problematics. The IE-instans doesn’t know when the page is fully loaded, and IE.ReadyState is really not trusthworthy. Therefore the coder has to add «delays» using the Application.Wait
function. When using this function, you are just guessing how long it would take, before the page is fully loaded. In situations where the internet is really slow, this hardcoded time, might not be enough. The following code fixes this, with the ImprovedReadyState.
In situations where a sheet has different columns, and you want to add different translation into every cell, I find the best approach where the translation-string is assigned to the ClipBoard, rather then calling a VBA-Function from within the formula. Thereby you can easily paste the translation, and modify it as a string.
How to use:
- Insert the procedures into a custom VBA-Module
- Change the 4 Const’s to your desire (see upper
TranslationText
) - Assign a shortkey to fire the
TranslationText
-procedure
- Activate the cell you want to translate. Required the first row to end with a language-tag. Etc. «_da», «_en», «_de». If you want another functionality, you change
ws_ActiveWS.Cells(r_ActiveCell.Row, r_InputRange.Column)
- Press the shortkey from 4. (etc. CTRL + SHIRT + S). See proces in your processbar (bottom of excel). Paste (CTRL+V) when translation done is displayed:
Option Explicit
'Description: Translates content, and put the translation into ClipBoard
'Required References: MIS (Microsoft Internet Control)
Sub TranslateText()
'Change Const's to your desire
Const INPUT_RANGE As String = "table_products[productname_da]"
Const INPUT_LANG As String = "da"
Const PROCESSBAR_INIT_TEXT As String = "Processing translation. Please wait... "
Const PROCESSBAR_DONE_TEXT As String = "Translation done. "
Dim ws_ActiveWS As Worksheet
Dim r_ActiveCell As Range, r_InputRange As Range
Dim s_InputStr As String, s_InputLang As String, s_OutputLang As String, arr_Response() As String, s_Translation As String
Dim o_IE As Object, o_MSForms_DataObject As Object
Dim i As Long
Dim v As Variant
Set o_MSForms_DataObject = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
Set ws_ActiveWS = ThisWorkbook.ActiveSheet
Set r_ActiveCell = ActiveCell
Set o_IE = CreateObject("InternetExplorer.Application")
Set r_InputRange = ws_ActiveWS.Range(INPUT_RANGE)
'Update statusbar ("Processing translation"), and change cursor
Application.Statusbar = PROCESSBAR_INIT_TEXT
Application.Cursor = xlWait
'Declare inputstring (The string you want to translate from)
s_InputStr = ws_ActiveWS.Cells(r_ActiveCell.Row, r_InputRange.Column)
'Find the output-language
s_OutputLang = Right(ws_ActiveWS.Cells(1, r_ActiveCell.Column).Value, 2)
'Navigate to translate.google.com
With o_IE
.Visible = False 'Run IE in background
.Navigate "http://translate.google.com/#" & INPUT_LANG & "/" _
& s_OutputLang & "/" & s_InputStr
'Call improved IE.ReadyState
Do
ImprovedReadyState
Loop Until Not .Busy
'Split the responseText from Google
arr_Response = Split(.Document.getElementById("result_box").innerHTML, "<span class")
'Remove html from response, and construct full-translation-string
For Each v In arr_Response
s_Translation = s_Translation & Replace(v, "<span>", "")
s_Translation = Replace(s_Translation, "</span>", "")
s_Translation = Replace(s_Translation, """", "")
s_Translation = Replace(s_Translation, "=hps>", "")
s_Translation = Replace(s_Translation, "=atn>", "")
s_Translation = Replace(s_Translation, "=hps atn>", "")
'Improve translation.
'This could etc. be moved to seperate sheets (containing every language), and make the lookup in a dynamic table/sheet. Futurely it'd be possible to hook on the changeevent, and automatically improve the translation-algoritmen.
'If Google can't translate the etc. the word "Lys", you can extend the translation, with an auto correction. This example shows to autocorrect the word "Lys" -> "ljus".
If (s_OutputLang = "sv") Then
s_Translation = Replace(s_Translation, "lys", "ljus")
End if
Next v
'Put Translation into Clipboard
o_MSForms_DataObject.SetText s_Translation
o_MSForms_DataObject.PutInClipboard
If (s_Translation <> vbNullString) Then
'Put Translation into Clipboard
o_MSForms_DataObject.SetText s_Translation
o_MSForms_DataObject.PutInClipboard
'Update statusbar ("Translation done"). If the input_string is above 70 chars (which is roughly the limitation in processbar), then cut the string, and extend with "...".
Application.Statusbar = PROCESSBAR_DONE_TEXT & """" & IIf(Len(s_InputStr) < 70, s_InputStr, Mid(s_InputStr, 1, 70) & "...") & """"
Else
'Update statusbar ("Error")
Application.Statusbar = PROCESSBAR_ERROR_TEXT
End If
'Cleanup
.Quit
'Change cursor back to default
Application.Cursor = xlDefault
Set o_MSForms_DataObject = Nothing
Set ws_ActiveWS = Nothing
Set r_ActiveCell = Nothing
Set o_IE = Nothing
End With
End Sub
Sub ImprovedReadyState()
Dim si_PauseTime As Single: si_PauseTime = 1 'Set duration
Dim si_Start As Single: si_Start = Timer 'Set start-time
Dim si_Finish As Single 'Set end-time
Dim si_TotalTime As Single 'Calculate total time.
Do While Timer < (si_Start + si_PauseTime)
DoEvents
Loop
si_Finish = Timer
si_TotalTime = (si_Finish - si_Start)
End Sub
Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 Excel 2010 Excel 2007 Еще…Меньше
Если книга содержит макрос Visual Basic для приложений(VBA),который вы хотите использовать в другом месте, вы можете скопировать модуль, содержащий этот макрос, в другую открытую книгу с помощью редактора Visual Basic(VBE).
Макросы и средства VBA находятся на вкладке Разработчик, которая по умолчанию скрыта, поэтому сначала нужно включить ее.
-
Чтобы Windows, перейдите в меню Параметры > >Настроить ленту.
-
Для Macперейдите на Excel > параметры… >ленты & панели инструментов.
-
Затем в разделе Настройка ленты в разделе Основные вкладкиубедитесь в том, что в разделе Разработчик.
Общие сведения о макросах и VBA
Если вы не знакомы с макросами и VBA в целом, вам могут пригодиться следующие сведения:
-
Макрос — это действие или набор действий, которые можно использовать для автоматизации задач.
-
Макрос можно записать с помощью команды Запись макроса на вкладке Разработчик.
-
Макрос записуется на языке программирования VBA.
-
Вы можете проверить и изменить макрос в редакторе Visual Basic, которое открывается Excel. Вот пример окна VBE для Windows:
Макрос с именами MakeCellGreen и SetRowHeight находится в модуле Module1,который хранится в книге Book1.
Копирование модуля из одной книги в другую
-
Откройте книгу, содержаную макрос, который вы хотите скопировать, и книгу, в которую вы хотите его скопировать.
-
На вкладке Разработчик щелкните Visual Basic, чтобы открыть редактор Visual Basic редактора.
-
В редакторе Visual Basic меню Вид выберите Project проводник
или нажмите CTRL+R .
-
В области Project проводника перетащите модуль, содержащий макрос, который нужно скопировать в 9-ю книгу. В этом случае мы копируете Module1 из Book2.xlsm в Book1.xlsm.
-
Модуль1, скопирован из Book2.xlsm
-
Копия модуля1, скопированная в Book1.xlsm
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.
Нужна дополнительная помощь?
#Руководства
- 23 май 2022
-
0
Как с помощью макросов автоматизировать рутинные задачи в Excel? Какие команды они выполняют? Как создать макрос новичку? Разбираемся на примере.
Иллюстрация: Meery Mary для Skillbox Media
Рассказывает просто о сложных вещах из мира бизнеса и управления. До редактуры — пять лет в банке и три — в оценке имущества. Разбирается в Excel, финансах и корпоративной жизни.
Макрос (или макрокоманда) в Excel — алгоритм действий в программе, который объединён в одну команду. С помощью макроса можно выполнить несколько шагов в Excel, нажав на одну кнопку в меню или на сочетание клавиш.
Обычно макросы используют для автоматизации рутинной работы — вместо того чтобы выполнять десяток повторяющихся действий, пользователь записывает одну команду и затем запускает её, когда нужно совершить эти действия снова.
Например, если нужно добавить название компании в несколько десятков документов и отформатировать его вид под корпоративный дизайн, можно делать это в каждом документе отдельно, а можно записать ход действий при создании первого документа в макрос — и затем применить его ко всем остальным. Второй вариант будет гораздо проще и быстрее.
В статье разберёмся:
- как работают макросы и как с их помощью избавиться от рутины в Excel;
- какие способы создания макросов существуют и как подготовиться к их записи;
- как записать и запустить макрос начинающим пользователям — на примере со скриншотами.
Общий принцип работы макросов такой:
- Пользователь записывает последовательность действий, которые нужно выполнить в Excel, — о том, как это сделать, поговорим ниже.
- Excel обрабатывает эти действия и создаёт для них одну общую команду. Получается макрос.
- Пользователь запускает этот макрос, когда ему нужно выполнить эту же последовательность действий ещё раз. При записи макроса можно задать комбинацию клавиш или создать новую кнопку на главной панели Excel — если нажать на них, макрос запустится автоматически.
Макросы могут выполнять любые действия, которые в них запишет пользователь. Вот некоторые команды, которые они умеют делать в Excel:
- Автоматизировать повторяющиеся процедуры.
Например, если пользователю нужно каждый месяц собирать отчёты из нескольких файлов в один, а порядок действий каждый раз один и тот же, можно записать макрос и запускать его ежемесячно.
- Объединять работу нескольких программ Microsoft Office.
Например, с помощью одного макроса можно создать таблицу в Excel, вставить и сохранить её в документе Word и затем отправить в письме по Outlook.
- Искать ячейки с данными и переносить их в другие файлы.
Этот макрос пригодится, когда нужно найти информацию в нескольких объёмных документах. Макрос самостоятельно отыщет её и принесёт в заданный файл за несколько секунд.
- Форматировать таблицы и заполнять их текстом.
Например, если нужно привести несколько таблиц к одному виду и дополнить их новыми данными, можно записать макрос при форматировании первой таблицы и потом применить его ко всем остальным.
- Создавать шаблоны для ввода данных.
Команда подойдёт, когда, например, нужно создать анкету для сбора данных от сотрудников. С помощью макроса можно сформировать такой шаблон и разослать его по корпоративной почте.
- Создавать новые функции Excel.
Если пользователю понадобятся дополнительные функции, которых ещё нет в Excel, он сможет записать их самостоятельно. Все базовые функции Excel — это тоже макросы.
Все перечисленные команды, а также любые другие команды пользователя можно комбинировать друг с другом и на их основе создавать макросы под свои потребности.
В Excel и других программах Microsoft Office макросы создаются в виде кода на языке программирования VBA (Visual Basic for Applications). Этот язык разработан в Microsoft специально для программ компании — он представляет собой упрощённую версию языка Visual Basic. Но это не значит, что для записи макроса нужно уметь кодить.
Есть два способа создания макроса в Excel:
- Написать макрос вручную.
Это способ для продвинутых пользователей. Предполагается, что они откроют окно Visual Basic в Еxcel и самостоятельно напишут последовательность действий для макроса в виде кода.
- Записать макрос с помощью кнопки меню Excel.
Способ подойдёт новичкам. В этом варианте Excel запишет программный код вместо пользователя. Нужно нажать кнопку записи и выполнить все действия, которые планируется включить в макрос, и после этого остановить запись — Excel переведёт каждое действие и выдаст алгоритм на языке VBA.
Разберёмся на примере, как создать макрос с помощью второго способа.
Допустим, специальный сервис автосалона выгрузил отчёт по продажам за три месяца первого квартала в формате таблиц Excel. Эти таблицы содержат всю необходимую информацию, но при этом никак не отформатированы: колонки слиплись друг с другом и не видны полностью, шапка таблицы не выделена и сливается с другими строками, часть данных не отображается.
Скриншот: Skillbox Media
Пользоваться таким отчётом неудобно — нужно сделать его наглядным. Запишем макрос при форматировании таблицы с продажами за январь и затем применим его к двум другим таблицам.
Готовимся к записи макроса
Кнопки для работы с макросами в Excel находятся во вкладке «Разработчик». Эта вкладка по умолчанию скрыта, поэтому для начала разблокируем её.
В операционной системе Windows это делается так: переходим во вкладку «Файл» и выбираем пункты «Параметры» → «Настройка ленты». В открывшемся окне в разделе «Основные вкладки» находим пункт «Разработчик», отмечаем его галочкой и нажимаем кнопку «ОК» → в основном меню Excel появляется новая вкладка «Разработчик».
В операционной системе macOS это нужно делать по-другому. В самом верхнем меню нажимаем на вкладку «Excel» и выбираем пункт «Параметры…».
Скриншот: Skillbox Media
В появившемся окне нажимаем кнопку «Лента и панель».
Скриншот: Skillbox Media
Затем в правой панели «Настроить ленту» ищем пункт «Разработчик» и отмечаем его галочкой. Нажимаем «Сохранить».
Скриншот: Skillbox Media
Готово — вкладка «Разработчик» появилась на основной панели Excel.
Скриншот: Skillbox Media
Чтобы Excel смог сохранить и в дальнейшем использовать макрос, нужно пересохранить документ в формате, который поддерживает макросы. Это делается через команду «Сохранить как» на главной панели. В появившемся меню нужно выбрать формат «Книга Excel с поддержкой макросов».
Скриншот: Skillbox Media
Перед началом записи макроса важно знать об особенностях его работы:
- Макрос записывает все действия пользователя.
После старта записи макрос начнёт регистрировать все клики мышки и все нажатия клавиш. Поэтому перед записью последовательности лучше хорошо отработать её, чтобы не добавлять лишних действий и не удлинять код. Если требуется записать длинную последовательность задач — лучше разбить её на несколько коротких и записать несколько макросов.
- Работу макроса нельзя отменить.
Все действия, которые выполняет запущенный макрос, остаются в файле навсегда. Поэтому перед тем, как запускать макрос в первый раз, лучше создать копию всего файла. Если что-то пойдёт не так, можно будет просто закрыть его и переписать макрос в созданной копии.
- Макрос выполняет свой алгоритм только для записанного диапазона таблиц.
Если при записи макроса пользователь выбирал диапазон таблицы, то и при запуске макроса в другом месте он выполнит свой алгоритм только в рамках этого диапазона. Если добавить новую строку, макрос к ней применяться не будет. Поэтому при записи макроса можно сразу выбирать большее количество строк — как это сделать, показываем ниже.
Для начала записи макроса перейдём на вкладку «Разработчик» и нажмём кнопку «Записать макрос».
Скриншот: Skillbox Media
Появляется окно для заполнения параметров макроса. Нужно заполнить поля: «Имя макроса», «Сохранить в», «Сочетание клавиш», «Описание».
Скриншот: Skillbox Media
«Имя макроса» — здесь нужно придумать и ввести название для макроса. Лучше сделать его логически понятным, чтобы в дальнейшем можно было быстро его найти.
Первым символом в названии обязательно должна быть буква. Другие символы могут быть буквами или цифрами. Важно не использовать пробелы в названии — их можно заменить символом подчёркивания.
«Сохранить в» — здесь нужно выбрать книгу, в которую макрос сохранится после записи.
Если выбрать параметр «Эта книга», макрос будет доступен при работе только в этом файле Excel. Чтобы макрос был доступен всегда, нужно выбрать параметр «Личная книга макросов» — Excel создаст личную книгу макросов и сохранит новый макрос в неё.
«Сочетание клавиш» — здесь к уже выбранным двум клавишам (Ctrl + Shift в системе Windows и Option + Cmd в системе macOS) нужно добавить третью клавишу. Это должна быть строчная или прописная буква, которую ещё не используют в других быстрых командах компьютера или программы Excel.
В дальнейшем при нажатии этих трёх клавиш записанный макрос будет запускаться автоматически.
«Описание» — необязательное поле, но лучше его заполнять. Например, можно ввести туда последовательность действий, которые планируется записать в этом макросе. Так не придётся вспоминать, какие именно команды выполнит этот макрос, если нужно будет запустить его позже. Плюс будет проще ориентироваться среди других макросов.
В нашем случае с форматированием таблицы заполним поля записи макроса следующим образом и нажмём «ОК».
Скриншот: Skillbox Media
После этого начнётся запись макроса — в нижнем левом углу окна Excel появится значок записи.
Скриншот: Skillbox Media
Пока идёт запись, форматируем таблицу с продажами за январь: меняем ширину всех столбцов, данные во всех ячейках располагаем по центру, выделяем шапку таблицы цветом и жирным шрифтом, рисуем границы.
Важно: в нашем случае у таблиц продаж за январь, февраль и март одинаковое количество столбцов, но разное количество строк. Чтобы в случае со второй и третьей таблицей макрос сработал корректно, при форматировании выделим диапазон так, чтобы в него попали не только строки самой таблицы, но и строки ниже неё. Для этого нужно выделить столбцы в строке с их буквенным обозначением A–G, как на рисунке ниже.
Скриншот: Skillbox Media
Если выбрать диапазон только в рамках первой таблицы, то после запуска макроса в таблице с большим количеством строк она отформатируется только частично.
Скриншот: Skillbox Media
После всех манипуляций с оформлением таблица примет такой вид:
Скриншот: Skillbox Media
Проверяем, все ли действия с таблицей мы выполнили, и останавливаем запись макроса. Сделать это можно двумя способами:
- Нажать на кнопку записи в нижнем левом углу.
- Перейти во вкладку «Разработчик» и нажать кнопку «Остановить запись».
Скриншот: Skillbox Media
Готово — мы создали макрос для форматирования таблиц в границах столбцов A–G. Теперь его можно применить к другим таблицам.
Запускаем макрос
Перейдём в лист со второй таблицей «Февраль_2022». В первоначальном виде она такая же нечитаемая, как и первая таблица до форматирования.
Скриншот: Skillbox Media
Отформатируем её с помощью записанного макроса. Запустить макрос можно двумя способами:
- Нажать комбинацию клавиш, которую выбрали при заполнении параметров макроса — в нашем случае Option + Cmd + Ф.
- Перейти во вкладку «Разработчик» и нажать кнопку «Макросы».
Скриншот: Skillbox Media
Появляется окно — там выбираем макрос, который нужно запустить. В нашем случае он один — «Форматирование_таблицы». Под ним отображается описание того, какие действия он включает. Нажимаем «Выполнить».
Скриншот: Skillbox Media
Готово — вторая таблица с помощью макроса форматируется так же, как и первая.
Скриншот: Skillbox Media
То же самое можно сделать и на третьем листе для таблицы продаж за март. Более того, этот же макрос можно будет запустить и в следующем квартале, когда сервис автосалона выгрузит таблицы с новыми данными.
Научитесь: Excel + Google Таблицы с нуля до PRO
Узнать больше