В этом уроке я покажу Вам самые популярные макросы в VBA Excel, которые вы сможете использовать для оптимизации своей работы. VBA — это язык программирования, который может использоваться для расширения возможностей MS Excel и других приложений MS Office. Это чрезвычайно полезно для пользователей MS Excel, поскольку VBA может использоваться для автоматизации вашей работы и значительно увеличить Вашу эффективность. В этой статье Вы познакомитесь с VBA и я вам покажу некоторые из наиболее полезных, готовых к использованию примеров VBA. Вы сможете использовать эти примеры для создания собственных скриптов, соответствующих Вашим потребностям.
Вам не нужен опыт программирования, чтобы воспользоваться информаций из этой статьи, но вы должны иметь базовые знания Excel. Если вы еще учитесь работать с Excel, я бы рекомендовал Вам прочитать статью 20 формул Excel, которые вам нeобходимо выучить сейчас, чтобы узнать больше о функциональных возможностях Excel.
Я подготовил для вас несколько самых полезных примеров VBA Excel с большой функциональностью, которую вы сможете использовать для оптимизации своей работы. Чтобы их использовать, вам необходимо записать их в файл. Следующий параграф посвящен установке макроса Excel. Пропустите эту часть, если вы уже знакомы с этим.
Table of Contents
Как включить макросы в Excel
В Excel нажмите комбинацию клавиш alt + F11. Это приведет вас к редактору VBA в MS Excel. Затем щелкните правой кнопкой мыши папку Microsoft Excel Objects слева и выберите Insert => Module. Это место, где сохраняются макросы. Чтобы использовать макрос, вам нужно сохранить документ Excel как макрос. Из табуляции File => Save as, выберите Save as macro-enabled Workbok (расширение .xlsm) Теперь пришло время написать свой первый макрос!
1. Копирование данных из одного файла в другой.
Очень полезный макрос, поскольку он показывает, как скопировать ряд данных изнутри vba и как создать и назвать новую книгу. Вы можете изменить этот макрос в соответствии с вашими собственными требованиями:
Sub CopyFiletoAnotherWorkbook() Sheets("Example 1").Range("B4:C15").Copy Workbooks.Add ActiveSheet.Paste Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="C:TempMyNewBook.xlsx" Application.DisplayAlerts = True End Sub
2. Отображение скрытых строк
Иногда большие файлы Excel можно содержать скрытые строки для большей ясности И для лучшего удобства пользователей. Вот один макрос, который отобразит все строки из активной рабочей таблицы:
Sub ShowHiddenRows() Columns.EntireColumn.Hidden = False Rows.EntireRow.Hidden = False End Sub
3. Удаление пустых строк и столбов
Пустые строки в Excel — может быть проблемой для обработки данных. Вот как избавиться от них:
Sub DeleteEmptyRowsAndColumns() Dim MyRange As Range Dim iCounter As Long Set MyRange = ActiveSheet.UsedRange For iCounter = MyRange.Rows.Count To 1 Step -1 If Application.CountA(Rows(iCounter).EntireRow) = 0 Then Rows(iCounter).Delete End If Next iCounter For iCounter = MyRange.Columns.Count To 1 Step -1 If Application.CountA(Columns(iCounter).EntireColumn) = 0 Then Columns(iCounter).Delete End If Next iCounter End Sub
4. Нахождение пустых ячеек
Sub FindEmptyCell() ActiveCell.Offset(1, 0).Select Do While Not IsEmpty(ActiveCell) ActiveCell.Offset(1, 0).Select Loop End Sub
#### 5. Заполнение пустых ячеек
Как упоминалось ранее, пустые ячейки препятствуют обработке данных и созданию сводных таблиц. Вот один примерный код, который заменяет все пустые ячейки на 0. Этот макрос имеет очень большое приложение, потому что Вы можете использовать его для поиска и замены результатов N/A, а также других символов, таких как точки, запятые или повторяющиеся значения:
Sub FindAndReplace() Dim MyRange As Range Dim MyCell As Range Select Case MsgBox("Can't Undo this action. " & _ "Save Workbook First?", vbYesNoCancel) Case Is = vbYes ThisWorkbook.Save Case Is = vbCancel Exit Sub End Select Set MyRange = Selection For Each MyCell In MyRange If Len(MyCell.Value) = 0 Then MyCell = 0 End If Next MyCell End Sub
#### 6. Сортировка данных
Следующий макрос сортирует по возрастанию все числа из столбца активной ячейки. Просто дважды нажмите любую ячейку из столбца, который вы хотите отсортировать.
NB: Здесь нам нужно поставить этот код в Sheet1 (папка Microsoft Excel Objects), а не в Module1 (папка Modules):
Private Sub Worksheet_BeforeDoubleClick (ByVal Target as Range, Cancel As Boolean) Dim LastRow As Long LastRow = Cells (Rows.Count, 1) .End (xlUp) .Row Rows ("6:" & LastRow) .Sort _ Key1: = Cells (6, ActiveCell.Column), _ Order1: = xlAscending End Sub
#### 7. Удаление пустых пространств
Иногда данные в книге содержат дополнительные пробелы (whitespace charachters), которые могут мешать анализу данных и коррумпировать формулы. Вот один макрос, который удалит все пробелы из предварительно выбранного диапазона ячеек:
Sub TrimTheSpaces() Dim MyRange As Range Dim MyCell As Range Select Case MsgBox("Can't Undo this action. " & _ "Save Workbook First?", vbYesNoCancel) Case Is = vbYes ThisWorkbook.Save Case Is = vbCancel Exit Sub End Select Set MyRange = Selection For Each MyCell In MyRange If Not IsEmpty(MyCell) Then MyCell = Trim(MyCell) End If Next MyCell End Sub
#### 8. Выделение дубликатов цветом
Иногда в нескольких столбцах, которые мы хотели бы осветить, есть повторяющиеся значения. Этот макрос делает именно это:
Sub HighlightDuplicates() Dim MyRange As Range Dim MyCell As Range Set MyRange = Selection For Each MyCell In MyRange If WorksheetFunction.CountIf(MyRange, MyCell.Value) > 1 Then MyCell.Interior.ColorIndex = 36 End If Next MyCell End Sub
#### 9. Выделение десяти самых высоких чисел
Этот код будет отображать десять самых высоких чисел из набора ячеек:
Sub TopTen() Selection.FormatConditions.AddTop10 Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1) .TopBottom = xlTop10Top .Rank = 10 .Percent = False End With With Selection.FormatConditions(1).Font .Color = -16752384 .TintAndShade = 0 End With With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 13561798 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False End Sub
Вы можете легко настроить код, чтобы выделить различное количество чисел.
#### 10. Выделение данных больших чем данные число
Когда вы запустите этот код, появится окно. Вам надо написать число, которое вы хотите сравнить с выбранными ячейками.
Sub HighlightGreaterThanValues() Dim i As Integer i = InputBox("Enter Greater Than Value", "Enter Value") Selection.FormatConditions.Delete Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:=i Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1) .Font.Color = RGB(0, 0, 0) .Interior.Color = RGB(31, 218, 154) End With End Sub
Вы тоже можете настроить этот код, чтобы выделить более низкие чисел.
#### 11. Выделение ячеек комментариями
Простой макрос, который выделяет все ячейки, содержащие комментарии:
Sub HighlightCommentCells() Selection.SpecialCells(xlCellTypeComments).Select Selection.Style= "Note" End Sub
#### 12. Выделение ячеек со словами с ошибками
Это очень полезно, когда вы работаете с функциями, которые принимают строки, однако кто-то ввел строку с ошибкой, и ваши формулы не работают. Вот как решить эту проблему:
Sub ColorMispelledCells() For Each cl In ActiveSheet.UsedRange If Not Application.CheckSpelling(Word:=cl.Text) Then _ cl.Interior.ColorIndex = 28 Next cl End Sub
13. Создание сводной таблицы
Вот как создать сводную таблицу в MS Excel (версия 2007). Особенно полезно, когда вы делаете индивидуальный отчет каждый день. Вы можете оптимизировать создание сводной таблицы следующим образом:
Sub PivotTableForExcel2007() Dim SourceRange As Range Set SourceRange = Sheets("Sheet1").Range("A3:N86") ActiveWorkbook.PivotCaches.Create( _ SourceType:=xlDatabase, _ SourceData:=SourceRange, _ Version:=xlPivotTableVersion12).CreatePivotTable _ TableDestination:="", _ TableName:="", _ DefaultVersion:=xlPivotTableVersion12 End Sub
14. Отправка активного файла по электронной почте
Мой любимый код VBA. Он позволяет вам прикреплять и отправлять файл, с которым вы работаете, с предопределенным адресом электронной почты, заголовком сообщения и телом сообщения! Сначала Вам нужно сделать референцию в Excel на Microsoft Outlook (в редакторе Excel VBA, нажмите tools => references и выберите Microsoft Outlook).
Sub SendFIleAsAttachment() Dim OLApp As Outlook.Application Dim OLMail As Object Set OLApp = New Outlook.Application Set OLMail = OLApp.CreateItem(0) OLApp.Session.Logon With OLMail .To = "admin@datapigtechnologies.com; mike@datapigtechnologies.com" .CC = "" .BCC = "" .Subject = "This is the Subject line" .Body = "Hi there" .Attachments.Add ActiveWorkbook.FullName .Display End With Set OLMail = Nothing Set OLApp = Nothing End Sub
15. Вставка всех графиков Excel в презентацию PowerPoint
Очень удобный макрос, который позволяет вам добавлять все ваши графики Excel в презентацию Powerpoint одним щелчком мыши:
Sub SendExcelFiguresToPowerPoint() Dim PP As PowerPoint.Application Dim PPPres As PowerPoint.Presentation Dim PPSlide As PowerPoint.Slide Dim i As Integer Sheets("Slide Data").Select If ActiveSheet.ChartObjects.Count < 1 Then MsgBox "No charts existing the active sheet" Exit Sub End If Set PP = New PowerPoint.Application Set PPPres = PP.Presentations.Add PP.Visible = True For i = 1 To ActiveSheet.ChartObjects.Count ActiveSheet.ChartObjects(i).Chart.CopyPicture _ Size:=xlScreen, Format:=xlPicture Application.Wait (Now + TimeValue("0:00:1")) ppSlideCount = PPPres.Slides.Count Set PPSlide = PPPres.Slides.Add(SlideCount + 1, ppLayoutBlank) PPSlide.Select PPSlide.Shapes.Paste.Select PP.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True PP.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True Next i Set PPSlide = Nothing Set PPPres = Nothing Set PP = Nothing End Sub
16. Вставка таблицы Excel в MS Word
Таблицы Excel обычно помещаются внутри текстовых документов. Вот один автоматический способ экспорта таблицы Excel в MS Word:
Sub ExcelTableInWord() Dim MyRange As Excel.Range Dim wd As Word.Application Dim wdDoc As Word.Document Dim WdRange As Word.Range Sheets("Revenue Table").Range("B4:F10").Cop Set wd = New Word.Application Set wdDoc = wd.Documents.Open _ (ThisWorkbook.Path & "" & "PasteTable.docx") wd.Visible = True Set WdRange = wdDoc.Bookmarks("DataTableHere").Rangе On Error Resume Next WdRange.Tables(1).Delete WdRange.Paste WdRange.Tables(1).Columns.SetWidth _ (MyRange.Width / MyRange.Columns.Count), wdAdjustSameWidth wdDoc.Bookmarks.Add "DataTableHere", WdRange Set wd = Nothing Set wdDoc = Nothing Set WdRange = Nothing End Sub
17. Извлечение слов из текста
Мы можем использовать формулы, если хотим извлечь определенное количество символов. Но что, если мы хотим извлечь только одно слово из предложения или диапазон слов в ячейке? Для этого мы можем сами создать функцию Excel с помощью VBA. Это одна из самых удобных функций VBA, поскольку она позволяет создавать собственные формулы, которые отсутствуют в MS Excel. Давайте продолжим и создадим две функции: findword() и findwordrev():
Function FindWord(Source As String, Position As Integer) As String On Error Resume Next FindWord = Split(WorksheetFunction.Trim(Source), " ")(Position - 1) On Error GoTo 0 End Function Function FindWordRev(Source As String, Position As Integer) As String Dim Arr() As String Arr = VBA.Split(WorksheetFunction.Trim(Source), " ") On Error Resume Next FindWordRev = Arr(UBound(Arr) - Position + 1) On Error GoTo 0 End Function
Отлично, мы уже создали две новые функции в Excel! Теперь попробуйте использовать их в Excel. Функция = FindWordRev (A1,1) берет последнее слово из ячейки A1. Функция = FindWord (A1,3) берет третье слово из ячейки A1 и т. Д.
18. Защита данных в MS Excel
Иногда мы хотим защитить данных нашего файла, чтобы только мы могли его изменять. Вот как это сделать с VBA:
Sub ProtectSheets() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets ws.Protect Password:="1234" Next ws End Sub
Поздравления! Поскольку вы все еще читаете это, вы действительно заинтересованы в изучении VBA. Как вы уже сами видели, язык программирования VBA чрезвычайно полезен и может сэкономить нам много времени. Надеюсь, вы нашли эту информацию полезной и использовали ее, чтобы стать мастером MS Excel, VBA и компьютерных наук в целом.
© 2018 Атанас Йонков
Литература:
1. ExcelChamps.com: Top 100 Useful Excel Macro [VBA] Codes Examples.
2. Michael Alexander, John Walkenbach (2012). 101 Ready-To-Use Excel Macros.
3. BG Excel.info: 14 ready-to-use Macros for Excel.
Экономисты в повседневной работе сталкиваются с рутинной работой: с определенной периодичностью им приходится выполнять одну и ту же последовательность действий для получения определенного отчета, например. Частично автоматизировать такую работу можно с помощью макросов. Причем для написания несложных команд достаточно знать только азы программирования.
Как записать самый простой макрос?
Для начала запишем самый легкий макрос — зададим в ячейке А1 формат вида 12 345:
- Открываем новую книгу, в ячейке А1 набираем шестизначное число 123456. Сейчас оно выдается без разделителей разрядов. Запишем макрос, который ставит эти разделители.
- Заходим на панели инструментов в закладку Вид*, находим кнопку Макросы, жмем Запись макроса. В появившемся окне задаем имя макроса и книгу, в которой хотим этот макрос сохранить.
Важно
Запустить макросы можно только из открытых книг, поэтому если вы планируете использовать записанные вами макросы довольно часто, стоит использовать специальную книгу макросов, которая автоматически открывается вместе с запуском сеанса Excel.
Если вы все-таки хотите хранить макросы в отдельном файле, эту книгу нужно сохранить, выбрав тип файла Книга Excel с поддержкой макросов. В противном случае после закрытия книги макросы будут стерты.
- Выбираем Сохранить в… — Личная книга макросов и нажимаем Ок (рис. 1).
Рис. 1. Запись макроса в личную книгу макросов
- Записываем в макрос действия, которые хотим выполнить: вызываем контекстное меню Формат ячеек (можно воспользоваться комбинацией клавиш Сtrl+1) и задаем нужный нам формат числа: на закладке Число идем в блок (все форматы) и выбираем там формат вида # ##0.
К сведению
Этот формат можно задать и в блоке Числовой, но чуть позже вам станет ясно, почему мы воспользовались блоком Все форматы.
- На закладке Вид — Макросы выбираем пункт Остановить запись.
Второй, более быстрый способ остановить запись макроса — нажать на появившийся в левом нижнем углу синий квадратик (рис. 2.).
Мы рекомендуем
Всегда обращайте внимание на этот квадратик: если он появился на панели, значит, сейчас идет запись всех ваших действий в макрос. Не забывайте вовремя останавливать запись макроса, чтобы потом его не пришлось переделывать.
Проверяем, что макрос записан и работоспособен:
- в ячейку А2 вбиваем любое шестизначное число;
- запускаем макрос одним из двух способов: на закладке Вид — Макросы выбираем пункт Макросы или нажимаем комбинацию клавиш Alt+F8, находим в списке наш макрос и нажимаем кнопку Выполнить.
Рис. 2. Форматирование числа и остановка записи макроса
Итак, вы записали свой первый макрос! Примите поздравления. Теперь давайте познакомимся с личной книгой макросов и синтаксисом написания команд для макроса.
Личная книга макросов
По умолчанию Excel не отображает личную книгу макросов. Чтобы убедиться, что она открыта, выбираем на вкладке Вид кнопку Отобразить — в появившемся окне должна быть книга под именем PERSONAL.
Мы убедились, что книга открыта, но отображать ее не будем, чтобы потом по ошибке не закрыть ее. По сути, в этой книге нас интересует так называемый Исходный текст — блок, в котором записываются макросы. Чтобы увидеть это окно, нажмите клавиши Alt+F11 или кликните правой кнопкой мыши на ярлыке любого листа Excel и выберите в контекстном меню Исходный текст. Откроется окно VBA-кодирования в Excel (рис. 3). Оно состоит из двух блоков:
1. В левой части экрана окно Project – VBAProject — это проводник, в котором отображаются все открытые в данный момент книги Excel (даже если вы их не видите, как, например, книгу Personal). Работа с этим блоком аналогична работе в обычном проводнике — двойной клик по наименованию книги раскрывает ее содержимое. Нас интересует блок Modules — Module1. Кликаем левой кнопкой мыши дважды по этому объекту.
2. В правой части экрана откроется блок записи и редактирования макросов. Здесь уже автоматически записался Макрос1. Рассмотрим на его примере основную канву макроса.
Рис. 3. Окно VBA-кодирования в Excel
Синтаксис макроса
Макросы — это команды, написанные на языке VBA (Visual Basic for Applications). И синтаксис кода макроса не отличается от записи кода в Visual Basic.
Любой макрос имеет следующий вид:
Sub Имя_Макроса_Без_Пробелов()
‘ комментарии к макросу — они нужны для вас, VBA не воспринимает такие строки как команды
команды, написанные на языке VBA
End Sub
3 обязательных блока макроса:
1. Начало макроса. Всегда начинается с команды Sub. Далее идет имя макроса — оно может быть на русском языке, но не должно содержать пробелы и специальные символы.
В конце имени макроса всегда ставятся скобки () — они нужны, когда вы создаете свою функцию, в них указываются аргументы функции, но об этом сейчас речь не пойдет.
2. Блок команд. В нашем примере он состоит из одной строки: Selection.NumberFormat = «#,##0»
Каждая команда должна начинаться с новой строки. Если текст команды очень длинный и не помещается на экране, его можно разбить на несколько строк, заканчивая строку символом нижнего подчеркивания _ (далее в примере мы это увидим).
3. Конец макроса. Всегда обозначается как End Sub.
Есть и один необязательный блок — это комментарии, которые вы можете оставлять в любом месте внутри кода макроса, поставив перед началом комментариев знак апострофа ‘. Например, вы можете описать, что именно делает тот или иной макрос.
Обратите внимание!
Если вы хотите разместить комментарии в несколько строк, каждую новую строку надо начинать с апострофа.
Теперь запишем более сложный макрос и научимся понимать текст его кода.
Например, информационная система выдает отчет «Бюджет на месяц» без выделения групповых значений цветом или шрифтом.
Нам необходимо:
- выделить групповые строки полужирным шрифтом;
- отформатировать на печать — расположить отчет по центру листа, задать масштаб 75 %, вывести в колонтитулы название отчета (рис. 4).
Рис. 4. Изменения после написания макроса
Запишем алгоритм форматирования отчета в макрос.
Нажимаем кнопку записи макроса и выполняем следующие действия:
- Даем макросу имя Форматирование_БДР, в блоке описания записываем, что будет делать этот макрос (например, Выделяет жирным курсивом итоги, форматирует на печать). Жмем Ок.
- Выделяем столбцы А:С, ставим автофильтр — на закладке Данные находим кнопку Фильтр.
- По столбцу КОД задаем условие не содержит точку: Текстовые фильтры — Не содержит и в поле текста ставим символ точки без пробелов (рис. 5).
Рис. 5. Использование автофильтра по столбцу «КОД»
- Выделяем отфильтрованный диапазон и задаем ему полужирный шрифт.
- Снимаем автофильтр (повторное нажатие на закладке Данные кнопки Фильтр).
- Заходим в меню форматирования на печать (Кнопка Файл/Office — Печать — Предварительный просмотр — Параметры страницы) и задаем там три параметра:
1) на вкладке Страница задаем масштаб 75 %;
2) на вкладке Поля отмечаем пункт Горизонтально в блоке Центрировать на странице;
3) на вкладке Колонтитулы создаем верхний колонтитул с текстом Бюджет на январь.
- Выходим из параметров страницы.
- Заканчиваем запись макроса.
- Нажимаем Alt+F11 и смотрим, что получилось (см. рис. 4).
Код этого макроса уже гораздо длиннее и непонятнее, но легко читаем для знающих английский язык и азы программирования в VBA.
Правила написания команд в VBA
Любая команда макроса состоит из двух блоков, разделенных точкой:
Объект.Действие с объектом или свойство объекта
Объектами в Excel являются, например:
- книга: WorkBook, ActiveWorkbook;
- лист, листы: WorkSheet, ActiveSheet, Sheets;
- ячейка: Cells(1,1) — в скобках указываются номера строки (Row) и столбца (Column) ячейки на листе;
- диапазон ячеек (может быть и одна ячейка): Range(«А1:С5»), Range(«А1»);
- строки (Rows);
- столбцы (Columns);
- выделение (Selection) — выделенный в данный момент диапазон (это может быть как несколько смежных ячеек, так и смежные строки или столбцы).
Примеры действий с объектами:
- ActiveWorkbook.Save — сохранить рабочую книгу (та, которая была активна в момент вызова пользователем макроса);
- Sheets(«Лист3»).Name = «Отчет» — переименовать «Лист3» в «Отчет»;
- Sheets(«Отчет»).Activate — перейти на лист с названием «Отчет»;
- Range(«А1»).Copy — скопировать в буфер обмена данные из ячейки А1;
- Rows(«13:13»).Delete Shift:=xlUp — удалить строку 13 со сдвигом вверх.
Примеры свойств объектов:
- ActiveCell.FormulaR1C1 = «БДР» — в выделенной (активной) ячейке записан текст «БДР»;
- ActiveCell.Row < 65 — номер ряда активной ячейки меньше 65.
Помнить все названия объектов, команд и свойств для написания несложных макросов не обязательно. Вы всегда можете сначала записать ваши стандартные действия с отчетами в Excel, а потом отформатировать код макроса, убрав из него лишние действия или заменив некоторые заданные параметры (например, длину диапазона) на переменные (которые в дальнейшем макрос будет запрашивать у пользователя или рассчитывать самостоятельно).
Но об этом мы расскажем далее, а сейчас обратимся к коду нашего первого макроса, состоящего из одной строки:
Selection.NumberFormat = «#,##0»
Суть его в следующем: к объекту Выделенный диапазон (у нас одна ячейка, но это может быть и весь столбец/строка или диапазон смежных ячеек) применяется свойство Числовой формат вида # ##0 (если помните, именно этот формат мы выбрали в списке).
Код макроса Форматирование_БДР и расшифровка строк кода представлены в таблице.
Строка кода |
Расшифровка |
Sub Форматирование_БДР() |
Начало макроса, имя макроса |
‘ |
Пустая строка комментариев (ставится автоматически при записи макроса) |
‘ Форматирование_БДР Макрос |
Автоматически добавленный комментарий при записи макроса — может быть удален без потери работоспособности макроса |
‘ Выделяем жирным курсивом итоги, форматируем на печать |
Автоматически добавленный комментарий при записи макроса из поля Описание |
Пустая строка — не влияет на суть исполнения макроса, но их полезно добавлять для разделения блоков команд внутри кода |
|
Columns(«A:C»).Select |
Выделить (Select) объект Столбцы (Columns) А:С |
Selection.AutoFilter |
Применить автофильтр (AutoFilter) для выделенного диапазона (Selection) |
ActiveSheet.Range(«$A$1:$C$34″).AutoFilter Field:=1, Criteria1:=»<>*.*», _ |
Задать критерий отбора «не содержит точку» |
Operator:=xlAnd |
Продолжение команды из предыдущей строки. Обратите внимание: предыдущая строка закончилась символом нижнего подчеркивания _, значит, текст команды не уместился на одну строку и окончание команды перенесено на следующую |
Range(«A1:C34»).Select |
Выделить (Select) объект Диапазон (Range) А1:С34. Обратите внимание: какой бы длины ни был ваш следующий отчет, для которого вы будете применять этот макрос, выделится всегда только диапазон до 34 строки! Как сделать этот диапазон любой длины — обсудим немного позже |
Selection.Font.Bold = True |
Для выделенного диапазона (Объект Selection) установить свойство «полужирный шрифт» (Font.Bold = True). Если нужно отменить какое-то свойство, пишем False |
Selection.AutoFilter |
Снять автофильтр (при записи макроса это было повторное нажатие кнопки Фильтр на закладке Данные) |
With ActiveSheet.PageSetup |
Начало процедуры With (используется, если далее перечисляются свойства или действия с одним и тем же объектом для компактности записи кода). Для объекта ActiveSheet (Текущий лист) применить следующие параметры свойства PageSetup (Параметры печати): |
.PrintTitleRows = «» |
Печатать на каждой странице сквозные строки — пусто (то есть данное свойство не задано пользователем) |
.PrintTitleColumns = «» |
Печатать на каждой странице сквозные столбцы — пусто |
End With |
Окончание процедуры With |
ActiveSheet.PageSetup.PrintArea = «» |
Заданная область печати — пусто (то есть пользователь не ограничил область печати, следовательно, на экран будет выведено все, что есть на листе) |
With ActiveSheet.PageSetup |
Начало процедуры With Для объекта Текущий лист применить следующие параметры печати (цветом выделены те, которые мы изменили по сравнению со стандартными): |
.LeftHeader = «» |
Левый верхний колонтитул — пусто |
.CenterHeader = «Бюджет на январь» |
Центральный верхний колонтитул — задан текст пользователем |
.RightHeader = «» |
Правый верхний колонтитул — пусто |
.LeftFooter = «» |
Левый нижний колонтитул — пусто |
.CenterFooter = «» |
Центральный нижний колонтитул — пусто |
.RightFooter = «» |
Правый нижний колонтитул — пусто |
.LeftMargin = Application.InchesToPoints(0.708661417322835) |
Размеры левого поля |
.RightMargin = Application.InchesToPoints(0.708661417322835) |
Размеры правого поля |
.TopMargin = Application.InchesToPoints(0.748031496062992) |
Размеры верхнего поля |
.BottomMargin = Application.InchesToPoints(0.748031496062992) |
Размеры нижнего поля |
.HeaderMargin = Application.InchesToPoints(0.31496062992126) |
Размеры верхнего колонтитула |
.FooterMargin = Application.InchesToPoints(0.31496062992126) |
Размеры нижнего колонтитула |
.PrintHeadings = False |
Не печатать заголовки строк и столбцов (False — пользователь не отметил этот пункт) |
.PrintGridlines = False |
Не печатать сетку |
.PrintComments = xlPrintNoComments |
Не печатать примечания |
.PrintQuality = 600 |
Качество печати — 600 точек на дюйм |
.CenterHorizontally = True |
Центрировать на странице горизонтально (True — пользователь отметил этот пункт) |
.CenterVertically = False |
Не центрировать по вертикали |
.Orientation = xlPortrait |
Ориентация страницы — книжная |
.Draft = False |
Пользователь не отметил пункт Черновая в блоке Печать |
.PaperSize = xlPaperA4 |
Размер бумаги А4 |
.FirstPageNumber = xlAutomatic |
Номер первой страницы — автоматически |
.Order = xlDownThenOver |
Последовательность вывода страниц: вниз, потом вправо (пункт в блоке Печать) |
.BlackAndWhite = False |
Пользователь не отметил пункт Черно-белая в блоке Печать |
.Zoom = 75 |
Масштаб 75 % |
.PrintErrors = xlPrintErrorsDisplayed |
Пункт в блоке Печать – Ошибки ячеек — Как на экране |
.OddAndEvenPagesHeaderFooter = False |
Пользователь не задавал разные колонтитулы для четных и нечетных страниц (флажок в блоке Колонтитулы) |
.DifferentFirstPageHeaderFooter = False |
Пользователь не задавал отдельный колонтитул для первой страницы (флажок в блоке Колонтитулы) |
.ScaleWithDocHeaderFooter = True |
Флажок в блоке Колонтитулы – Изменять вместе с масштабом страницы отмечен пользователем |
.AlignMarginsHeaderFooter = True |
Флажок в блоке Колонтитулы – Выровнять относительно полей страницы отмечен пользователем |
.EvenPage.LeftHeader.Text = «» |
Текст колонтитулов для четных и первой страниц не задан |
.EvenPage.CenterHeader.Text = «» |
|
.EvenPage.RightHeader.Text = «» |
|
.EvenPage.LeftFooter.Text = «» |
|
.EvenPage.CenterFooter.Text = «» |
|
.EvenPage.RightFooter.Text = «» |
|
.FirstPage.LeftHeader.Text = «» |
|
.FirstPage.CenterHeader.Text = «» |
|
.FirstPage.RightHeader.Text = «» |
|
.FirstPage.LeftFooter.Text = «» |
|
.FirstPage.CenterFooter.Text = «» |
|
.FirstPage.RightFooter.Text = «» |
|
End With |
Окончание процедуры With |
End Sub |
Окончание кода макроса |
Редактирование макроса
Как видите, код макроса легко читаем и понятен. Кроме того, нам не надо нагромождать его лишними строками: так как в параметрах печати мы меняли только три пункта, остальные строки можем удалить (они будут установлены по умолчанию). Удалим ненужные строки, поставим комментарии и в итоге получим вот такой элегантный код:
Sub Форматирование_БДР()
‘ Макрос выделяет жирным курсивом итоги, форматирует отчет на печать
‘——————
‘ Выделяем столбцы и ставим фильтр по столбцу КОД
Columns(«A:C»).Select
Selection.AutoFilter
ActiveSheet.Range(«$A$1:$C$34″).AutoFilter Field:=1, Criteria1:=»<>*.*», _
Operator:=xlAnd
‘ Выделяем отфильтрованный диапазон полужирным шрифтом, снимаем фильтр
Range(«A1:C34»).Select
Selection.Font.Bold = True
Selection.AutoFilter
‘ Форматируем на печать: верхний колонтитул, центрирование по горизонтали, масштаб 75 %
With ActiveSheet.PageSetup
.CenterHeader = «Бюджет на январь»
.CenterHorizontally = True
.Zoom = 75
End With
End Sub
Ввод в код макроса функций и процедур
Теперь усложним код макроса, задав ему два параметра:
1. Название месяца отчета запрашиваем у пользователя.
2. Последняя строка отчета БДР (в случае если она плавающая) рассчитывается в коде макроса.
Функция InputBox
Чтобы запросить у пользователя месяц отчета, воспользуемся функцией Inputbox, которая выводит диалоговое окно, в котором пользователь может самостоятельно задать значение переменной, используемой в коде. Синтаксис функции InputBox:
Zapros = InputBox(«Текст запроса», <«Текст в шапке окна»>, <Значение по умолчанию>,…)
где Zapros — введенная вами переменная (имя придумываете вы сами), а в скобках через запятую перечисляются аргументы функции.
Обратите внимание: первый аргумент является обязательным, то есть любое диалоговое окно должно сопровождаться пояснительным текстом, чего вы ждете от пользователя. Следующие аргументы обязательными не являются и их можно не указывать. То есть если вы хотите задать значение по умолчанию, но не хотите писать текст в шапке диалогового окна, разделите первый и третий аргументы двумя запятыми, как это будет сделано в нашем примере (см. далее).
Для удобства присвойте полученное значение функции InputBox какой-нибудь введенной вами переменной, особенно если в коде макроса вы будете несколько раз использовать значение этой функции.
Важно
Имена вводимых переменных не должны совпадать с уже занятыми VBA словами под название объектов, свойств или функций!
В нашем примере присвоим результат вызова функции InputBox переменной Mes.
Например, нельзя завести свою переменную Range, Cells или Month — компилятор VBA предупредит вас, что делать этого нельзя, и не запустит макрос, пока вы не устраните ошибку (рис. 6).
Рис. 6. Пример ошибки при заведении переменной
Не забывайте любой текст в коде брать в кавычки! В противном случае компилятор VBA будет воспринимать этот текст как команды и выдавать ошибку, так как не сможет их обработать.
Итак, приступим к редактированию кода макроса. Добавим в самое начало кода макроса строки:
‘ Запрашиваем у пользователя месяц отчета
Mes = InputBox(«Введите название месяца отчета», , «Январь»)
Теперь при запуске макроса будет выводиться диалоговое окно, в котором пользователь самостоятельно сможет указать, за какой месяц этот отчет (рис. 7).
Рис. 7. Диалоговое окно для указания месяца
С помощью функции InputBox можно запросить у пользователя и длину отчета. Но мы научим Excel высчитывать ее самостоятельно. Для этого нам потребуется процедура While.
Процедура While
Используется в коде, если надо сделать одинаковые действия несколько раз подряд до тех пор, пока выполняется какое-либо условие. Синтаксис процедуры While:
Do While <условие, которое должно быть верным для выполнения процедуры>
<список команд>
Loop
Условие может состоять из одного выражения или содержать несколько, перечисленных через оператор AND (то есть оба условия должны быть выполнены) или OR (достаточно выполнения только одного из перечисленных условий). Также условие обязательно должно содержать переменную-счетчик (это может быть номер строки или столбца ячейки, значения которой вы проверяете).
В список команд обязательно должна входить команда наращивания переменной-счетчика, иначе процедура зациклится (так как она постоянно будет сравнивать одно и то же значение) и макрос придется прерывать принудительно.
Если макрос ушел в цикл, прервите его с помощью комбинации клавиш Ctrl+Break и либо прекратите макрос (кнопка End), либо зайдите в код макроса и исправьте ошибку (кнопка Debug). Чтобы макрос не уходил в цикл, рекомендуется включить в блок условий «защиту от дурака». Например, добавляем в условие проверку, чтобы значение счетчика не превышало определенной, заведомо достаточной для нас величины.
Рассмотрим применение процедуры While для поиска конца отчета БДР.
Как видно на рис. 4, последняя строка отчета имеет код «500». Напишем процедуру, которая будет проверять значения в ячейках столбца «А» и остановит свои действия, когда найдет ячейку с кодом «500».
Обратите внимание!
Excel иногда воспринимает числа как текст, поэтому включим два условия проверки значения ячейки и добавим «защиту от дурака» на случай, если в форме отчета случайно затрется код последней строки.
Помним, что все текстовые значения надо брать в кавычки. Числа записываем без кавычек:
‘ Ищем последнюю строку отчета
Dim Row_End As Integer ‘ Вводим переменную «счетчик номера строки»
Row_End = 1 ‘ Присваиваем ей номер 1
‘ Начинаем процедуру поиска последней строки отчета по коду «500»
Do While Cells(Row_End, 1).Value <> «500» And Cells(Row_End, 1).Value <> 500 And Row_End < 100
‘ До тех пор, пока код не равен 500 и номер строки меньше 100, выполняем наращивание счетчика
Row_End = Row_End +1
Loop
Таким образом, процедура While нам нужна только для наращивания счетчика — никаких дополнительных действий она не производит. Запомните этот прием — он часто нужен в кодировании.
Теперь заменим в изначальном коде макроса номер последней ячейки (34) на переменную Row_End. Число 34 было частью текста А1:С34, а теперь нам надо часть текста заменить на переменную. Делается это с помощью символа амперсанд &:
«текст» & переменная & «текст».
В нашем случае ссылка на диапазон А1:С34 будет записана так: А1:С & Row_End.
Кроме того, вспоминаем, что и название отчета Бюджет на январь у нас тоже теперь содержит параметр и будет записываться так: Бюджет на & Mes.
Не забывайте оставлять пробелы в кавычках перед переменной-словом, иначе текст сольется.
Еще раз взглянем на получившийся код макроса:
Sub Форматирование_БДР()
‘ Макрос выделяет жирным курсивом итоги, форматирует отчет на печать
‘ ——————
‘ Запрашиваем у пользователя месяц отчета
Mes = InputBox(«Введите название месяца отчета», , «Январь»)
‘ Ищем последнюю строку отчета
Dim Row_End As Integer ‘ Вводим переменную «счетчик номера строки»
Row_End = 1 ‘ Присваиваем ей номер 1
‘ Начинаем процедуру поиска последней строки отчета по коду «500»
‘ Критичным значением для «защиты от дурака» принимаем номер строки 100
Do While Cells(Row_End, 1).Value <> «500» And Cells(Row_End, 1).Value <> 500 And Row_End < 100
‘ До тех пор, пока код не равен 500 и номер строки меньше 100, выполняем наращивание счетчика
Row_End = Row_End +1
Loop
‘ Выделяем столбцы и ставим фильтр на КОД
Columns(«A:C»).Select
Selection.AutoFilter
ActiveSheet.Range(«$A$1:$C$» & Row_End).AutoFilter Field:=1, Criteria1:=»<>*.*», _
Operator:=xlAnd
‘ Выделяем отфильтрованный диапазон полужирным шрифтом, снимаем фильтр
Range(«A1:C» & Row_End).Select
Selection.Font.Bold = True
Selection.AutoFilter
‘ Форматируем на печать: верхний колонтитул, центрирование по горизонтали, масштаб 75 %
With ActiveSheet.PageSetup
.CenterHeader = «Бюджет на » & Mes
.CenterHorizontally = True
.Zoom = 75
End With
End Sub
Теперь макрос стал более универсальным. Добавим в него еще одну «защиту от дурака».
Если нам принципиально, правильно ли макрос нашел последнюю строку отчета, после окончания процедуры While (строка Loop) можно добавить блок проверки значения Row_End и запроса у пользователя подтверждения на продолжение макроса.
Для этого изучим функцию MsgBox, процедуру IF и команду Exit Sub.
Функция MsgBox
MsgBox — еще один способ общения с пользователем: сообщения ему какой-то информации по ходу выполнения макроса или запрос у него подтверждения по дальнейшим действиям макроса путем нажатия на кнопки вида Yes, No, Ок, Cancel.
Она имеет два вида записи:
1. Мы просто сообщаем пользователю какую-то информацию. В этом случае аргументы функции перечисляются сразу же за функцией, без использования скобок:
MsgBox «Текст сообщения», <Вид кнопок>, <«Текст в шапке окна»>,…
На экране отобразится диалоговое окно, и после нажатия пользователем кнопки Ок продолжится выполнение макроса (рис. 8).
Рис. 8. Первый вид записи функции MsgBox
Как и в случае с функцией InputBox, обязательным здесь является только первый аргумент — Текст сообщения. Остальные можно даже не указывать, сократив вид записи функции до вида:
2. Нам важно, что ответил пользователь, мы записываем его ответ в значение какой-то переменной (рис. 9). В этом случае аргументы функции заключаются в скобки, а перед функцией обязательно должна стоять переменная, в которую мы записываем, на какую кнопку нажал пользователь:
YesNo = MsgBox(«Текст сообщения», <Вид кнопок>, <«Текст в шапке окна»>,…)
Рис. 9. Второй вид записи функции MsgBox
Варианты вида кнопок:
- vbOKOnly — только кнопка ОК;
- vbOKCanсel — кнопки ОК и Cancel;
- vbYesNo — кнопки Yes и No;
- vbYesNoCancel — кнопки Yes, No и Cancel.
Соответственно в зависимости от нажатой кнопки значения функции MsgBox могут быть vbOK, vbCancel, vbYes или vbNo.
Процедура If
С помощью данной процедуры можно разбить команды кода на две ветки в зависимости от выполнения заданного условия. Синтаксис процедуры If:
If <условие, которое должно быть верным> Then
<список команд при выполнении указанного условия>
else
<список команд при невыполнении указанного условия>
End If
Обязательным к заполнению является только условие. Список команд в обоих блоках заполнять не обязательно. В зависимости от ваших задач вы можете заполнить оба блока или только один из них. Условие может состоять из одного выражения или содержать несколько выражений, перечисленных через оператор AND (то есть оба условия должны быть выполнены) или оператор OR (достаточно выполнения только одного из перечисленных условий).
Команда Exit Sub
Прекращает выполнение макроса. Обычно ее используют в ветках процедуры If при проверке допустимости дальнейшего исполнения макроса. Обратите внимание: ни одно действие после команды Exit Sub выполнено не будет. Поэтому если вы хотите сообщить пользователю о принудительном прекращении процедуры, команду MsgBox нужно расположить выше команды Exit Sub.
Итак, объединим новые знания в код «защиты от дурака» и запишем его после строки Loop:
‘ Проверяем, дошла ли процедура While до «критичной» строки 100
‘ и спрашиваем подтверждение о продолжении выполнения макроса
If Row_End = 100 Then
YesNo = MsgBox(«Поиск последней строки отчета дошел до 100, продолжаем?», vbYesNo)
If YesNo = vbNo Then ‘ Если нажата кнопка «No», то…
MsgBox «Процедура прервана пользователем» ‘ 1. выдаем сообщение для пользователя,
Exit Sub ‘ 2. останавливаем макрос
End If
End If
В нашем коде прошло вложение одной процедуры If в другую:
- сначала мы проверили, дошел ли счетчик Row_End до значения 100;
- если дошел, мы спрашиваем у пользователя, продолжать ли нам выполнение макроса;
- если пользователь ответил «нет», останавливаем макрос.
В обеих процедурах If мы опустили второй блок (else): если Row_End не достиг значения 100 или пользователь ответил «да», макрос просто покинет процедуру If и продолжит выполнять команды, написанные ниже.
Каждая процедура If должна заканчиваться командой End If. Если количество строк с командой If не будет соответствовать количеству строк с командой End If, компилятор VBA сообщит об ошибке и вам придется искать, где вы потеряли конец процедуры If.
Поэтому рекомендуется сразу писать обе строки, а потом уже наполнять процедуру командами.
Также для удобства визуального восприятия кода макроса рекомендуется каждую вложенную процедуру начинать с отступа, чтобы визуально было понятно, где заканчивается вложенная процедура и продолжается список команд процедуры верхнего уровня.
Подведем итоги
Мы с вами научились:
- записывать макросы через команду Вид Макросы Запись макроса;
- редактировать автоматически записанный макрос, удалять из него лишние команды;
- унифицировать код макроса, вводя в него переменные, которые макрос запрашивает у пользователя или рассчитывает самостоятельно,
а также изучили функции InputBox и MsgBox, процедуры While и If, команду Exit Sub.
В следующем номере рассмотрим процедуру FOR, запишем макрос суммирования результирующих статей БДР, научимся тестировать макросы и выносить кнопки вызова макроса на панель быстрого доступа.
Статья опубликована в журнале «Справочник экономиста» № 4, 2016.
Всё о работе с ячейками в Excel-VBA: обращение, перебор, удаление, вставка, скрытие, смена имени.
Содержание:
Table of Contents:
- Что такое ячейка Excel?
- Способы обращения к ячейкам
- Выбор и активация
- Получение и изменение значений ячеек
- Ячейки открытой книги
- Ячейки закрытой книги
- Перебор ячеек
- Перебор в произвольном диапазоне
- Свойства и методы ячеек
- Имя ячейки
- Адрес ячейки
- Размеры ячейки
- Запуск макроса активацией ячейки
2 нюанса:
- Я почти везде стараюсь использовать ThisWorkbook (а не, например, ActiveWorkbook) для обращения к текущей книге, в которой написан этот код (считаю это наиболее безопасным для новичков способом обращения к книгам, чтобы случайно не внести изменения в другие книги). Для экспериментов можете вставлять этот код в модули, коды книги, либо листа, и он будет работать только в пределах этой книги.
- Я использую английский эксель и у меня по стандарту листы называются Sheet1, Sheet2 и т.д. Если вы работаете в русском экселе, то замените Thisworkbook.Sheets(«Sheet1») на Thisworkbook.Sheets(«Лист1»). Если этого не сделать, то вы получите ошибку в связи с тем, что пытаетесь обратиться к несуществующему объекту. Можно также заменить на Thisworkbook.Sheets(1), но это менее безопасно.
Что такое ячейка Excel?
В большинстве мест пишут: «элемент, образованный пересечением столбца и строки». Это определение полезно для людей, которые не знакомы с понятием «таблица». Для того, чтобы понять чем на самом деле является ячейка Excel, необходимо заглянуть в объектную модель Excel. При этом определения объектов «ряд», «столбец» и «ячейка» будут отличаться в зависимости от того, как мы работаем с файлом.
Объекты в Excel-VBA. Пока мы работаем в Excel без углубления в VBA определение ячейки как «пересечения» строк и столбцов нам вполне хватает, но если мы решаем как-то автоматизировать процесс в VBA, то о нём лучше забыть и просто воспринимать лист как «мешок» ячеек, с каждой из которых VBA позволяет работать как минимум тремя способами:
- по цифровым координатам (ряд, столбец),
- по адресам формата А1, B2 и т.д. (сценарий целесообразности данного способа обращения в VBA мне сложно представить)
- по уникальному имени (во втором и третьем вариантах мы будем иметь дело не совсем с ячейкой, а с объектом VBA range, который может состоять из одной или нескольких ячеек). Функции и методы объектов Cells и Range отличаются. Новичкам я бы порекомендовал работать с ячейками VBA только с помощью Cells и по их цифровым координатам и использовать Range только по необходимости.
Все три способа обращения описаны далее
Как это хранится на диске и как с этим работать вне Excel? С точки зрения хранения и обработки вне Excel и VBA. Сделать это можно, например, сменив расширение файла с .xls(x) на .zip и открыв этот архив.
Пример содержимого файла Excel:
Далее xl -> worksheets и мы видим файл листа
Содержимое файла:
То же, но более наглядно:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac xr xr2 xr3" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:xr="http://schemas.microsoft.com/office/spreadsheetml/2014/revision" xmlns:xr2="http://schemas.microsoft.com/office/spreadsheetml/2015/revision2" xmlns:xr3="http://schemas.microsoft.com/office/spreadsheetml/2016/revision3" xr:uid="{00000000-0001-0000-0000-000000000000}">
<dimension ref="B2:F6"/>
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0">
<selection activeCell="D12" sqref="D12"/>
</sheetView>
</sheetViews>
<sheetFormatPr defaultRowHeight="14.4" x14ac:dyDescent="0.3"/>
<sheetData>
<row r="2" spans="2:6" x14ac:dyDescent="0.3">
<c r="B2" t="s">
<v>0</v>
</c>
</row>
<row r="3" spans="2:6" x14ac:dyDescent="0.3">
<c r="C3" t="s">
<v>1</v>
</c>
</row>
<row r="4" spans="2:6" x14ac:dyDescent="0.3">
<c r="D4" t="s">
<v>2</v>
</c>
</row>
<row r="5" spans="2:6" x14ac:dyDescent="0.3">
<c r="E5" t="s">
<v>0</v></c>
</row>
<row r="6" spans="2:6" x14ac:dyDescent="0.3">
<c r="F6" t="s"><v>3</v>
</c></row>
</sheetData>
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
</worksheet>
Как мы видим, в структуре объектной модели нет никаких «пересечений». Строго говоря рабочая книга — это архив структурированных данных в формате XML. При этом в каждую «строку» входит «столбец», и в нём в свою очередь прописан номер значения данного столбца, по которому оно подтягивается из другого XML файла при открытии книги для экономии места за счёт отсутствия повторяющихся значений. Почему это важно. Если мы захотим написать какой-то обработчик таких файлов, который будет напрямую редактировать данные в этих XML, то ориентироваться надо на такую модель и структуру данных. И правильное определение будет примерно таким: ячейка — это объект внутри столбца, который в свою очередь находится внутри строки в файле xml, в котором хранятся данные о содержимом листа.
Способы обращения к ячейкам
Выбор и активация
Почти во всех случаях можно и стоит избегать использования методов Select и Activate. На это есть две причины:
- Это лишь имитация действий пользователя, которая замедляет выполнение программы. Работать с объектами книги можно напрямую без использования методов Select и Activate.
- Это усложняет код и может приводить к неожиданным последствиям. Каждый раз перед использованием Select необходимо помнить, какие ещё объекты были выбраны до этого и не забывать при необходимости снимать выбор. Либо, например, в случае использования метода Select в самом начале программы может быть выбрано два листа вместо одного потому что пользователь запустил программу, выбрав другой лист.
Можно выбирать и активировать книги, листы, ячейки, фигуры, диаграммы, срезы, таблицы и т.д.
Отменить выбор ячеек можно методом Unselect:
Selection.Unselect
Отличие выбора от активации — активировать можно только один объект из раннее выбранных. Выбрать можно несколько объектов.
Если вы записали и редактируете код макроса, то лучше всего заменить Select и Activate на конструкцию With … End With. Например, предположим, что мы записали вот такой макрос:
Sub Macro1()
' Macro1 Macro
Range("F4:F10,H6:H10").Select 'выбрали два несмежных диапазона зажав ctrl
Range("H6").Activate 'показывает только то, что я начал выбирать второй диапазон с этой ячейки (она осталась белой). Это действие ни на что не влияет
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535 'залили желтым цветом, нажав на кнопку заливки на верхней панели
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
Почему макрос записался таким неэффективным образом? Потому что в каждый момент времени (в каждой строке) программа не знает, что вы будете делать дальше. Поэтому в записи выбор ячеек и действия с ними — это два отдельных действия. Этот код лучше всего оптимизировать (особенно если вы хотите скопировать его внутрь какого-нибудь цикла, который должен будет исполняться много раз и перебирать много объектов). Например, так:
Sub Macro11()
'
' Macro1 Macro
Range("F4:F10,H6:H10").Select '1. смотрим, что за объект выбран (что идёт до .Select)
Range("H6").Activate
With Selection.Interior '2. понимаем, что у выбранного объекта есть свойство interior, с которым далее идёт работа
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
Sub Optimized_Macro()
With Range("F4:F10,H6:H10").Interior '3. переносим объект напрямую в конструкцию With вместо Selection
' ////// Здесь я для надёжности прописал бы ещё Thisworkbook.Sheet("ИмяЛиста") перед Range,
' ////// чтобы минимизировать риск любых случайных изменений других листов и книг
' ////// With Thisworkbook.Sheet("ИмяЛиста").Range("F4:F10,H6:H10").Interior
.Pattern = xlSolid '4. полностью копируем всё, что было записано рекордером внутрь блока with
.PatternColorIndex = xlAutomatic
.Color = 55555 '5. здесь я поменял цвет на зеленый, чтобы было видно, работает ли код при поочерёдном запуске двух макросов
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
Пример сценария, когда использование Select и Activate оправдано:
Допустим, мы хотим, чтобы во время исполнения программы мы одновременно изменяли несколько листов одним действием и пользователь видел какой-то определённый лист. Это можно сделать примерно так:
Sub Select_Activate_is_OK()
Thisworkbook.Worksheets(Array("Sheet1", "Sheet3")).Select 'Выбираем несколько листов по именам
Thisworkbook.Worksheets("Sheet3").Activate 'Показываем пользователю третий лист
'Далее все действия с выбранными ячейками через Select будут одновременно вносить изменения в оба выбранных листа
'Допустим, что тут мы решили покрасить те же два диапазона:
Range("F4:F10,H6:H10").Select
Range("H6").Activate
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
Единственной причиной использовать этот код по моему мнению может быть желание зачем-то показать пользователю определённую страницу книги в какой-то момент исполнения программы. С точки зрения обработки объектов, опять же, эти действия лишние.
Получение и изменение значений ячеек
Значение ячеек можно получать/изменять с помощью свойства value.
'Если нужно прочитать / записать значение ячейки, то используется свойство Value
a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Value 'записать значение ячейки А1 листа "Sheet1" в переменную "a"
ThisWorkbook.Sheets("Sheet1").Cells (1,1).Value = 1 'задать значение ячейки А1 (первый ряд, первый столбец) листа "Sheet1"
'Если нужно прочитать текст как есть (с форматированием), то можно использовать свойство .text:
ThisWorkbook.Sheets("Sheet1").Cells (1,1).Text = "1"
a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Text
'Когда проявится разница:
'Например, если мы считываем дату в формате "31 декабря 2021 г.", хранящуюся как дата
a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Value 'эапишет как "31.12.2021"
a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Text 'запишет как "31 декабря 2021 г."
Ячейки открытой книги
К ячейкам можно обращаться:
'В книге, в которой хранится макрос (на каком-то из листов, либо в отдельном модуле или форме)
ThisWorkbook.Sheets("Sheet1").Cells(1,1).Value 'По номерам строки и столбца
ThisWorkbook.Sheets("Sheet1").Cells(1,"A").Value 'По номерам строки и букве столбца
ThisWorkbook.Sheets("Sheet1").Range("A1").Value 'По адресу - вариант 1
ThisWorkbook.Sheets("Sheet1").[A1].Value 'По адресу - вариант 2
ThisWorkbook.Sheets("Sheet1").Range("CellName").Value 'По имени ячейки (для этого ей предварительно нужно его присвоить)
'Те же действия, но с использованием полного названия рабочей книги (книга должна быть открыта)
Workbooks("workbook.xlsm").Sheets("Sheet1").Cells(1,1).Value 'По номерам строки и столбца
Workbooks("workbook.xlsm").Sheets("Sheet1").Cells(1,"A").Value 'По номерам строки и букве столбца
Workbooks("workbook.xlsm").Sheets("Sheet1").Range("A1").Value 'По адресу - вариант 1
Workbooks("workbook.xlsm").Sheets("Sheet1").[A1].Value 'По адресу - вариант 2
Workbooks("workbook.xlsm").Sheets("Sheet1").Range("CellName").Value 'По имени ячейки (для этого ей предварительно нужно его присвоить)
Ячейки закрытой книги
Если нужно достать или изменить данные в другой закрытой книге, то необходимо прописать открытие и закрытие книги. Непосредственно работать с закрытой книгой не получится, потому что данные в ней хранятся отдельно от структуры и при открытии Excel каждый раз производит расстановку значений по соответствующим «слотам» в структуре. Подробнее о том, как хранятся данные в xlsx см выше.
Workbooks.Open Filename:="С:closed_workbook.xlsx" 'открыть книгу (она становится активной)
a = ActiveWorkbook.Sheets("Sheet1").Cells(1,1).Value 'достать значение ячейки 1,1
ActiveWorkbook.Close False 'закрыть книгу (False => без сохранения)
Скачать пример, в котором можно посмотреть, как доставать и как записывать значения в закрытую книгу.
Код из файла:
Option Explicit
Sub get_value_from_closed_wb() 'достать значение из закрытой книги
Dim a, wb_path, wsh As String
wb_path = ThisWorkbook.Sheets("Sheet1").Cells(2, 3).Value 'get path to workbook from sheet1
wsh = ThisWorkbook.Sheets("Sheet1").Cells(3, 3).Value
Workbooks.Open Filename:=wb_path
a = ActiveWorkbook.Sheets(wsh).Cells(3, 3).Value
ActiveWorkbook.Close False
ThisWorkbook.Sheets("Sheet1").Cells(4, 3).Value = a
End Sub
Sub record_value_to_closed_wb() 'записать значение в закрытую книгу
Dim wb_path, b, wsh As String
wsh = ThisWorkbook.Sheets("Sheet1").Cells(3, 3).Value
wb_path = ThisWorkbook.Sheets("Sheet1").Cells(2, 3).Value 'get path to workbook from sheet1
b = ThisWorkbook.Sheets("Sheet1").Cells(5, 3).Value 'get value to record in the target workbook
Workbooks.Open Filename:=wb_path
ActiveWorkbook.Sheets(wsh).Cells(4, 4).Value = b 'add new value to cell D4 of the target workbook
ActiveWorkbook.Close True
End Sub
Перебор ячеек
Перебор в произвольном диапазоне
Скачать файл со всеми примерами
Пройтись по всем ячейкам в нужном диапазоне можно разными способами. Основные:
- Цикл For Each. Пример:
Sub iterate_over_cells() For Each c In ThisWorkbook.Sheets("Sheet1").Range("B2:D4").Cells MsgBox (c) Next c End Sub
Этот цикл выведет в виде сообщений значения ячеек в диапазоне B2:D4 по порядку по строкам слева направо и по столбцам — сверху вниз. Данный способ можно использовать для действий, в который вам не важны номера ячеек (закрашивание, изменение форматирования, пересчёт чего-то и т.д.).
- Ту же задачу можно решить с помощью двух вложенных циклов — внешний будет перебирать ряды, а вложенный — ячейки в рядах. Этот способ я использую чаще всего, потому что он позволяет получить больше контроля над исполнением: на каждой итерации цикла нам доступны координаты ячеек. Для перебора всех ячеек на листе этим методом потребуется найти последнюю заполненную ячейку. Пример кода:
Sub iterate_over_cells() Dim cl, rw As Integer Dim x As Variant 'перебор области 3x3 For rw = 1 To 3 ' цикл для перебора рядов 1-3 For cl = 1 To 3 'цикл для перебора столбцов 1-3 x = ThisWorkbook.Sheets("Sheet1").Cells(rw + 1, cl + 1).Value MsgBox (x) Next cl Next rw 'перебор всех ячеек на листе. Последняя ячейка определена с помощью UsedRange 'LastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1 'LastCol = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count - 1 'For rw = 1 To LastRow 'цикл перебора всех рядов ' For cl = 1 To LastCol 'цикл для перебора всех столбцов ' Действия ' Next cl 'Next rw End Sub
- Если нужно перебрать все ячейки в выделенном диапазоне на активном листе, то код будет выглядеть так:
Sub iterate_cell_by_cell_over_selection() Dim ActSheet As Worksheet Dim SelRange As Range Dim cell As Range Set ActSheet = ActiveSheet Set SelRange = Selection 'if we want to do it in every cell of the selected range For Each cell In Selection MsgBox (cell.Value) Next cell End Sub
Данный метод подходит для интерактивных макросов, которые выполняют действия над выбранными пользователем областями.
- Перебор ячеек в ряду
Sub iterate_cells_in_row() Dim i, RowNum, StartCell As Long RowNum = 3 'какой ряд StartCell = 0 ' номер начальной ячейки (минус 1, т.к. в цикле мы прибавляем i) For i = 1 To 10 ' 10 ячеек в выбранном ряду ThisWorkbook.Sheets("Sheet1").Cells(RowNum, i + StartCell).Value = i '(i + StartCell) добавляет 1 к номеру столбца при каждом повторении Next i End Sub
- Перебор ячеек в столбце
Sub iterate_cells_in_column() Dim i, ColNum, StartCell As Long ColNum = 3 'какой столбец StartCell = 0 ' номер начальной ячейки (минус 1, т.к. в цикле мы прибавляем i) For i = 1 To 10 ' 10 ячеек ThisWorkbook.Sheets("Sheet1").Cells(i + StartCell, ColNum).Value = i ' (i + StartCell) добавляет 1 к номеру ряда при каждом повторении Next i End Sub
Свойства и методы ячеек
Имя ячейки
Присвоить новое имя можно так:
Thisworkbook.Sheets(1).Cells(1,1).name = "Новое_Имя"
Для того, чтобы сменить имя ячейки нужно сначала удалить существующее имя, а затем присвоить новое. Удалить имя можно так:
ActiveWorkbook.Names("Старое_Имя").Delete
Пример кода для переименования ячеек:
Sub rename_cell()
old_name = "Cell_Old_Name"
new_name = "Cell_New_Name"
ActiveWorkbook.Names(old_name).Delete
ThisWorkbook.Sheets(1).Cells(2, 1).Name = new_name
End Sub
Sub rename_cell_reverse()
old_name = "Cell_New_Name"
new_name = "Cell_Old_Name"
ActiveWorkbook.Names(old_name).Delete
ThisWorkbook.Sheets(1).Cells(2, 1).Name = new_name
End Sub
Адрес ячейки
Sub get_cell_address() ' вывести адрес ячейки в формате буква столбца, номер ряда
'$A$1 style
txt_address = ThisWorkbook.Sheets(1).Cells(3, 2).Address
MsgBox (txt_address)
End Sub
Sub get_cell_address_R1C1()' получить адрес столбца в формате номер ряда, номер столбца
'R1C1 style
txt_address = ThisWorkbook.Sheets(1).Cells(3, 2).Address(ReferenceStyle:=xlR1C1)
MsgBox (txt_address)
End Sub
'пример функции, которая принимает 2 аргумента: название именованного диапазона и тип желаемого адреса
'(1- тип $A$1 2- R1C1 - номер ряда, столбца)
Function get_cell_address_by_name(str As String, address_type As Integer)
'$A$1 style
Select Case address_type
Case 1
txt_address = Range(str).Address
Case 2
txt_address = Range(str).Address(ReferenceStyle:=xlR1C1)
Case Else
txt_address = "Wrong address type selected. 1,2 available"
End Select
get_cell_address_by_name = txt_address
End Function
'перед запуском нужно убедиться, что в книге есть диапазон с названием,
'адрес которого мы хотим получить, иначе будет ошибка
Sub test_function() 'запустите эту программу, чтобы увидеть, как работает функция
x = get_cell_address_by_name("MyValue", 2)
MsgBox (x)
End Sub
Размеры ячейки
Ширина и длина ячейки в VBA меняется, например, так:
Sub change_size()
Dim x, y As Integer
Dim w, h As Double
'получить координаты целевой ячейки
x = ThisWorkbook.Sheets("Sheet1").Cells(2, 2).Value
y = ThisWorkbook.Sheets("Sheet1").Cells(3, 2).Value
'получить желаемую ширину и высоту ячейки
w = ThisWorkbook.Sheets("Sheet1").Cells(6, 2).Value
h = ThisWorkbook.Sheets("Sheet1").Cells(7, 2).Value
'сменить высоту и ширину ячейки с координатами x,y
ThisWorkbook.Sheets("Sheet1").Cells(x, y).RowHeight = h
ThisWorkbook.Sheets("Sheet1").Cells(x, y).ColumnWidth = w
End Sub
Прочитать значения ширины и высоты ячеек можно двумя способами (однако результаты будут в разных единицах измерения). Если написать просто Cells(x,y).Width или Cells(x,y).Height, то будет получен результат в pt (привязка к размеру шрифта).
Sub get_size()
Dim x, y As Integer
'получить координаты ячейки, с которой мы будем работать
x = ThisWorkbook.Sheets("Sheet1").Cells(2, 2).Value
y = ThisWorkbook.Sheets("Sheet1").Cells(3, 2).Value
'получить длину и ширину выбранной ячейки в тех же единицах измерения, в которых мы их задавали
ThisWorkbook.Sheets("Sheet1").Cells(2, 6).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).ColumnWidth
ThisWorkbook.Sheets("Sheet1").Cells(3, 6).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).RowHeight
'получить длину и ширину с помощью свойств ячейки (только для чтения) в поинтах (pt)
ThisWorkbook.Sheets("Sheet1").Cells(7, 9).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).Width
ThisWorkbook.Sheets("Sheet1").Cells(8, 9).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).Height
End Sub
Скачать файл с примерами изменения и чтения размера ячеек
Запуск макроса активацией ячейки
Для запуска кода VBA при активации ячейки необходимо вставить в код листа нечто подобное:
3 важных момента, чтобы это работало:
1. Этот код должен быть вставлен в код листа (здесь контролируется диапазон D4)
2-3. Программа, ответственная за запуск кода при выборе ячейки, должна называться Worksheet_SelectionChange и должна принимать значение переменной Target, относящейся к триггеру SelectionChange. Другие доступные триггеры можно посмотреть в правом верхнем углу (2).
Скачать файл с базовым примером (как на картинке)
Скачать файл с расширенным примером (код ниже)
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' имеем в виду, что триггер SelectionChange будет запускать эту Sub после каждого клика мышью (после каждого клика будет проверяться:
'1. количество выделенных ячеек и
'2. не пересекается ли выбранный диапазон с заданным в этой программе диапазоном.
' поэтому в эту программу не стоит без необходимости писать никаких других тяжелых операций
If Selection.Count = 1 Then 'запускаем программу только если выбрано не более 1 ячейки
'вариант модификации - брать адрес ячейки из другой ячейки:
'Dim CellName as String
'CellName = Activesheet.Cells(1,1).value 'брать текстовое имя контролируемой ячейки из A1 (должно быть в формате Буква столбца + номер строки)
'If Not Intersect(Range(CellName), Target) Is Nothing Then
'для работы этой модификации следующую строку надо закомментировать/удалить
If Not Intersect(Range("D4"), Target) Is Nothing Then
'если заданный (D4) и выбранный диапазон пересекаются
'(пересечение диапазонов НЕ равно Nothing)
'можно прописать диапазон из нескольких ячеек:
'If Not Intersect(Range("D4:E10"), Target) Is Nothing Then
'можно прописать несколько диапазонов:
'If Not Intersect(Range("D4:E10"), Target) Is Nothing or Not Intersect(Range("A4:A10"), Target) Is Nothing Then
Call program 'выполняем программу
End If
End If
End Sub
Sub program()
MsgBox ("Program Is running") 'здесь пишем код того, что произойдёт при выборе нужной ячейки
End Sub
Время на прочтение
7 мин
Количество просмотров 312K
Приветствую всех.
В этом посте я расскажу, что такое VBA и как с ним работать в Microsoft Excel 2007/2010 (для более старых версий изменяется лишь интерфейс — код, скорее всего, будет таким же) для автоматизации различной рутины.
VBA (Visual Basic for Applications) — это упрощенная версия Visual Basic, встроенная в множество продуктов линейки Microsoft Office. Она позволяет писать программы прямо в файле конкретного документа. Вам не требуется устанавливать различные IDE — всё, включая отладчик, уже есть в Excel.
Еще при помощи Visual Studio Tools for Office можно писать макросы на C# и также встраивать их. Спасибо, FireStorm.
Сразу скажу — писать на других языках (C++/Delphi/PHP) также возможно, но требуется научится читать, изменять и писать файлы офиса — встраивать в документы не получится. А интерфейсы Microsoft работают через COM. Чтобы вы поняли весь ужас, вот Hello World с использованием COM.
Поэтому, увы, будем учить Visual Basic.
Чуть-чуть подготовки и постановка задачи
Итак, поехали. Открываем Excel.
Для начала давайте добавим в Ribbon панель «Разработчик». В ней находятся кнопки, текстовые поля и пр. элементы для конструирования форм.
Появилась вкладка.
Теперь давайте подумаем, на каком примере мы будем изучать VBA. Недавно мне потребовалось красиво оформить прайс-лист, выглядевший, как таблица. Идём в гугл, набираем «прайс-лист» и качаем любой, который оформлен примерно так (не сочтите за рекламу, пожалуйста):
То есть требуется, чтобы было как минимум две группы, по которым можно объединить товары (в нашем случае это будут Тип и Производитель — в таком порядке). Для того, чтобы предложенный мною алгоритм работал корректно, отсортируйте товары так, чтобы товары из одной группы стояли подряд (сначала по Типу, потом по Производителю).
Результат, которого хотим добиться, выглядит примерно так:
Разумеется, если смотреть прайс только на компьютере, то можно добавить фильтры и будет гораздо удобнее искать нужный товар. Однако мы хотим научится кодить и задача вполне подходящая, не так ли?
Кодим
Для начала требуется создать кнопку, при нажатии на которую будет вызываться наша програма. Кнопки находятся в панели «Разработчик» и появляются по кнопке «Вставить». Вам нужен компонент формы «Кнопка». Нажали, поставили на любое место в листе. Далее, если не появилось окно назначения макроса, надо нажать правой кнопкой и выбрать пункт «Назначить макрос». Назовём его FormatPrice. Важно, чтобы перед именем макроса ничего не было — иначе он создастся в отдельном модуле, а не в пространстве имен книги. В этому случае вам будет недоступно быстрое обращение к выделенному листу. Нажимаем кнопку «Новый».
И вот мы в среде разработки VB. Также её можно вызвать из контекстного меню командой «Исходный текст»/«View code».
Перед вами окно с заглушкой процедуры. Можете его развернуть. Код должен выглядеть примерно так:
Sub FormatPrice()End Sub
Напишем Hello World:
Sub FormatPrice()
MsgBox "Hello World!"
End Sub
И запустим либо щелкнув по кнопке (предварительно сняв с неё выделение), либо клавишей F5 прямо из редактора.
Тут, пожалуй, следует отвлечься на небольшой ликбез по поводу синтаксиса VB. Кто его знает — может смело пропустить этот раздел до конца. Основное отличие Visual Basic от Pascal/C/Java в том, что команды разделяются не ;, а переносом строки или двоеточием (:), если очень хочется написать несколько команд в одну строку. Чтобы понять основные правила синтаксиса, приведу абстрактный код.
Примеры синтаксиса
' Процедура. Ничего не возвращает
' Перегрузка в VBA отсутствует
Sub foo(a As String, b As String)
' Exit Sub ' Это значит "выйти из процедуры"
MsgBox a + ";" + b
End Sub' Функция. Вовращает Integer
Function LengthSqr(x As Integer, y As Integer) As Integer
' Exit Function
LengthSqr = x * x + y * y
End FunctionSub FormatPrice()
Dim s1 As String, s2 As String
s1 = "str1"
s2 = "str2"
If s1 <> s2 Then
foo "123", "456" ' Скобки при вызове процедур запрещены
End IfDim res As sTRING ' Регистр в VB не важен. Впрочем, редактор Вас поправит
Dim i As Integer
' Цикл всегда состоит из нескольких строк
For i = 1 To 10
res = res + CStr(i) ' Конвертация чего угодно в String
If i = 5 Then Exit For
Next iDim x As Double
x = Val("1.234") ' Парсинг чисел
x = x + 10
MsgBox xOn Error Resume Next ' Обработка ошибок - игнорировать все ошибки
x = 5 / 0
MsgBox xOn Error GoTo Err ' При ошибке перейти к метке Err
x = 5 / 0
MsgBox "OK!"
GoTo ne
Err:
MsgBox
"Err!"
ne:
On Error GoTo 0 ' Отключаем обработку ошибок
' Циклы бывает, какие захотите
Do While True
Exit DoLoop 'While True
Do 'Until False
Exit Do
Loop Until False
' А вот при вызове функций, от которых хотим получить значение, скобки нужны.
' Val также умеет возвращать Integer
Select Case LengthSqr(Len("abc"), Val("4"))
Case 24
MsgBox "0"
Case 25
MsgBox "1"
Case 26
MsgBox "2"
End Select' Двухмерный массив.
' Можно также менять размеры командой ReDim (Preserve) - см. google
Dim arr(1 to 10, 5 to 6) As Integer
arr(1, 6) = 8Dim coll As New Collection
Dim coll2 As Collection
coll.Add "item", "key"
Set coll2 = coll ' Все присваивания объектов должны производится командой Set
MsgBox coll2("key")
Set coll2 = New Collection
MsgBox coll2.Count
End Sub
Грабли-1. При копировании кода из IDE (в английском Excel) есь текст конвертируется в 1252 Latin-1. Поэтому, если хотите сохранить русские комментарии — надо сохранить крокозябры как Latin-1, а потом открыть в 1251.
Грабли-2. Т.к. VB позволяет использовать необъявленные переменные, я всегда в начале кода (перед всеми процедурами) ставлю строчку Option Explicit. Эта директива запрещает интерпретатору заводить переменные самостоятельно.
Грабли-3. Глобальные переменные можно объявлять только до первой функции/процедуры. Локальные — в любом месте процедуры/функции.
Еще немного дополнительных функций, которые могут пригодится: InPos, Mid, Trim, LBound, UBound. Также ответы на все вопросы по поводу работы функций/их параметров можно получить в MSDN.
Надеюсь, что этого Вам хватит, чтобы не пугаться кода и самостоятельно написать какое-нибудь домашнее задание по информатике. По ходу поста я буду ненавязчиво знакомить Вас с новыми конструкциями.
Кодим много и под Excel
В этой части мы уже начнём кодить нечто, что умеет работать с нашими листами в Excel. Для начала создадим отдельный лист с именем result (лист с данными назовём data). Теперь, наверное, нужно этот лист очистить от того, что на нём есть. Также мы «выделим» лист с данными, чтобы каждый раз не писать длинное обращение к массиву с листами.
Sub FormatPrice()
Sheets("result").Cells.Clear
Sheets("data").Activate
End Sub
Работа с диапазонами ячеек
Вся работа в Excel VBA производится с диапазонами ячеек. Они создаются функцией Range и возвращают объект типа Range. У него есть всё необходимое для работы с данными и/или оформлением. Кстати сказать, свойство Cells листа — это тоже Range.
Примеры работы с Range
Sheets("result").Activate
Dim r As Range
Set r = Range("A1")
r.Value = "123"
Set r = Range("A3,A5")
r.Font.Color = vbRed
r.Value = "456"
Set r = Range("A6:A7")
r.Value = "=A1+A3"
Теперь давайте поймем алгоритм работы нашего кода. Итак, у каждой строчки листа data, начиная со второй, есть некоторые данные, которые нас не интересуют (ID, название и цена) и есть две вложенные группы, к которым она принадлежит (тип и производитель). Более того, эти строки отсортированы. Пока мы забудем про пропуски перед началом новой группы — так будет проще. Я предлагаю такой алгоритм:
- Считали группы из очередной строки.
- Пробегаемся по всем группам в порядке приоритета (вначале более крупные)
- Если текущая группа не совпадает, вызываем процедуру AddGroup(i, name), где i — номер группы (от номера текущей до максимума), name — её имя. Несколько вызовов необходимы, чтобы создать не только наш заголовок, но и всё более мелкие.
- После отрисовки всех необходимых заголовков делаем еще одну строку и заполняем её данными.
Для упрощения работы рекомендую определить следующие функции-сокращения:
Function GetCol(Col As Integer) As String
GetCol = Chr(Asc("A") + Col)
End FunctionFunction GetCellS(Sheet As String, Col As Integer, Row As Integer) As Range
Set GetCellS = Sheets(Sheet).Range(GetCol(Col) + CStr(Row))
End FunctionFunction GetCell(Col As Integer, Row As Integer) As Range
Set GetCell = Range(GetCol(Col) + CStr(Row))
End Function
Далее определим глобальную переменную «текущая строчка»: Dim CurRow As Integer. В начале процедуры её следует сделать равной единице. Еще нам потребуется переменная-«текущая строка в data», массив с именами групп текущей предыдущей строк. Потом можно написать цикл «пока первая ячейка в строке непуста».
Глобальные переменные
Option Explicit ' про эту строчку я уже рассказывал
Dim CurRow As Integer
Const GroupsCount As Integer = 2
Const DataCount As Integer = 3
FormatPrice
Sub FormatPrice()
Dim I As Integer ' строка в data
CurRow = 1
Dim Groups(1 To GroupsCount) As String
Dim PrGroups(1 To GroupsCount) As String
Sheets(
"data").Activate
I = 2
Do While True
If GetCell(0, I).Value = "" Then Exit Do
' ...
I = I + 1
Loop
End Sub
Теперь надо заполнить массив Groups:
На месте многоточия
Dim I2 As Integer
For I2 = 1 To GroupsCount
Groups(I2) = GetCell(I2, I)
Next I2
' ...
For I2 = 1 To GroupsCount ' VB не умеет копировать массивы
PrGroups(I2) = Groups(I2)
Next I2
I = I + 1
И создать заголовки:
На месте многоточия в предыдущем куске
For I2 = 1 To GroupsCount
If Groups(I2) <> PrGroups(I2) Then
Dim I3 As Integer
For I3 = I2 To GroupsCount
AddHeader I3, Groups(I3)
Next I3
Exit For
End If
Next I2
Не забудем про процедуру AddHeader:
Перед FormatPrice
Sub AddHeader(Ty As Integer, Name As String)
GetCellS("result", 1, CurRow).Value = Name
CurRow = CurRow + 1
End Sub
Теперь надо перенести всякую информацию в result
For I2 = 0 To DataCount - 1
GetCellS("result", I2, CurRow).Value = GetCell(I2, I)
Next I2
Подогнать столбцы по ширине и выбрать лист result для показа результата
После цикла в конце FormatPrice
Sheets("Result").Activate
Columns.AutoFit
Всё. Можно любоваться первой версией.
Некрасиво, но похоже. Давайте разбираться с форматированием. Сначала изменим процедуру AddHeader:
Sub AddHeader(Ty As Integer, Name As String)
Sheets("result").Range("A" + CStr(CurRow) + ":C" + CStr(CurRow)).Merge
' Чтобы не заводить переменную и не писать каждый раз длинный вызов
' можно воспользоваться блоком With
With GetCellS("result", 0, CurRow)
.Value = Name
.Font.Italic = True
.Font.Name = "Cambria"
Select Case Ty
Case 1 ' Тип
.Font.Bold = True
.Font.Size = 16
Case 2 ' Производитель
.Font.Size = 12
End Select
.HorizontalAlignment = xlCenter
End With
CurRow = CurRow + 1
End Sub
Уже лучше:
Осталось только сделать границы. Тут уже нам требуется работать со всеми объединёнными ячейками, иначе бордюр будет только у одной:
Поэтому чуть-чуть меняем код с добавлением стиля границ:
Sub AddHeader(Ty As Integer, Name As String)
With Sheets("result").Range("A" + CStr(CurRow) + ":C" + CStr(CurRow))
.Merge
.Value = Name
.Font.Italic = True
.Font.Name = "Cambria"
.HorizontalAlignment = xlCenterSelect Case Ty
Case 1 ' Тип
.Font.Bold = True
.Font.Size = 16
.Borders(xlTop).Weight = xlThick
Case 2 ' Производитель
.Font.Size = 12
.Borders(xlTop).Weight = xlMedium
End Select
.Borders(xlBottom).Weight = xlMedium ' По убыванию: xlThick, xlMedium, xlThin, xlHairline
End With
CurRow = CurRow + 1
End Sub
Осталось лишь добится пропусков перед началом новой группы. Это легко:
В начале FormatPrice
Dim I As Integer ' строка в data
CurRow = 0 ' чтобы не было пропуска в самом начале
Dim Groups(1 To GroupsCount) As String
В цикле расстановки заголовков
If Groups(I2) <> PrGroups(I2) Then
CurRow = CurRow + 1
Dim I3 As Integer
В точности то, что и хотели.
Надеюсь, что эта статья помогла вам немного освоится с программированием для Excel на VBA. Домашнее задание — добавить заголовки «ID, Название, Цена» в результат. Подсказка: CurRow = 0 CurRow = 1.
Файл можно скачать тут (min.us) или тут (Dropbox). Не забудьте разрешить исполнение макросов. Если кто-нибудь подскажет человеческих файлохостинг, залью туда.
Спасибо за внимание.
Буду рад конструктивной критике в комментариях.
UPD: Перезалил пример на Dropbox и min.us.
UPD2: На самом деле, при вызове процедуры с одним параметром скобки можно поставить. Либо использовать конструкцию Call Foo(«bar», 1, 2, 3) — тут скобки нужны постоянно.
Назначить макрос на ячейку, может нужно назначить существующий, так как они ввод текста или и не только…
Запуск макроса
положение на листе. ввести большую букву Вас буде приведет(Custom button)Разработчик (Developer) в качестве примера любых нужных нам A активного рабочего
Cells(i, 1).Value = значительно ускорить выполнение содержимого трёх ячеек. появиться сообщение об макрос и выберите будут заменять собой
чисел, выбор ячеек Они могут практически Для этого снова для комбинации, естественно пошаговый пример с:Затем необходимо настроить параметры макрос действий, которые нам листа ‘Имя листа iFib ‘Вычисляем следующее рутинных и однообразных
(=C4+C5+C6).В поле ошибке, указывающее на команду
Абсолютная и относительная запись макроса
Вы уже знаете про абсолютные и относительные ссылки в Excel? Если вы используете абсолютную ссылку для записи макроса, код VBA всегда будет ссылаться на те же ячейки, которые вы использовали. Например, если вы выберете ячейку A2 и введете текст “Excel”, то каждый раз – независимо от того, где вы находитесь на листе и независимо от того, какая ячейка выбрана, ваш код будет вводить текст “Excel” в ячейку A2.
Если вы используете параметр относительной ссылки для записи макроса, VBA не будет привязываться к конкретному адресу ячейки. В этом случае программа будет “двигаться” относительно активной ячейки. Например, предположим, что вы уже выбрали ячейку A1, и вы начинаете запись макроса в режиме относительной ссылки. Теперь вы выбираете ячейку A2, вводите текст Excel и нажмите клавишу Enter. Теперь, если вы запустите этот макрос, он не вернется в ячейку A2, вместо этого он будет перемещаться относительно активной ячейки. Например, если выбрана ячейка B3, она переместится на B4, запишет текст “Excel” и затем перейдет к ячейке K5.
Теперь давайте запишем макрос в режиме относительных ссылок:
- Выберите ячейку A1.
- Перейдите на вкладку “Разработчик”.
- В группе “Код” нажмите кнопку “Относительные ссылки”. Он будет подсвечиваться, указывая, что он включен.
- Нажмите кнопку “Запись макроса”.
- В диалоговом окне “Запись макроса” введите имя для своего макроса. Например, имя “ОтносительныеСсылки”.
- В опции “Сохранить в” выберите “Эта книга”.
- Нажмите “ОК”.
- Выберите ячейку A2.
- Введите текст “Excel” (или другой как вам нравится).
- Нажмите клавишу Enter. Курсор переместиться в ячейку A3.
- Нажмите кнопку “Остановить запись” на вкладке “Разработчик”.
Макрос в режиме относительных ссылок будет сохранен.
Теперь сделайте следующее.
- Выберите любую ячейку (кроме A1).
- Перейдите на вкладку “Разработчик”.
- В группе “Код” нажмите кнопку “Макросы”.
- В диалоговом окне “Макрос” кликните на сохраненный макрос “ОтносительныеСсылки”.
- Нажмите кнопку “Выполнить”.
Как вы заметите, макрос записал текст “Excel” не в ячейки A2. Это произошло, потому что вы записали макрос в режиме относительной ссылки. Таким образом, курсор перемещается относительно активной ячейки. Например, если вы сделаете это, когда выбрана ячейка B3, она войдет в текст Excel – ячейка B4 и в конечном итоге выберет ячейку B5.
Вот код, который записал макрорекодер:
Sub ОтносительныеСсылки() ' ' ОтносительныеСсылки Макрос ' ' ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "Excel" ActiveCell.Offset(1, 0).Range("A1").Select End Sub
Обратите внимание, что в коде нет ссылок на ячейки B3 или B4. Макрос использует Activecell для ссылки на текущую ячейку и смещение относительно этой ячейки.
Не обращайте внимание на часть кода Range(«A1»). Это один из тех случаев, когда макрорекодер добавляет ненужный код, который не имеет никакой цели и может быть удален. Без него код будет работать отлично.
Показывать сообщение
Просто вставьте команду MsgBox в свой макрос. Вот как в следующем примере:
MsgBox “текст сообщения”
Эта строка кода может быть вставлена в любой макрос, что очень полезно в случаях, когда необходимо выдавать предупреждения пользователю электронной таблицы, в которой выполняется макрос.
Как записать самый простой макрос?
Для начала запишем самый легкий макрос — зададим в ячейке А1 формат вида 12 345:
- Открываем новую книгу, в ячейке А1 набираем шестизначное число 123456. Сейчас оно выдается без разделителей разрядов. Запишем макрос, который ставит эти разделители.
- Заходим на панели инструментов в закладку Вид*, находим кнопку Макросы, жмем Запись макроса. В появившемся окне задаем имя макроса и книгу, в которой хотим этот макрос сохранить.
Важно
Запустить макросы можно только из открытых книг, поэтому если вы планируете использовать записанные вами макросы довольно часто, стоит использовать специальную книгу макросов, которая автоматически открывается вместе с запуском сеанса Excel.
Если вы все-таки хотите хранить макросы в отдельном файле, эту книгу нужно сохранить, выбрав тип файла Книга Excel с поддержкой макросов. В противном случае после закрытия книги макросы будут стерты.
- Выбираем Сохранить в… – Личная книга макросов и нажимаем Ок (рис. 1).
Рис. 1. Запись макроса в личную книгу макросов
- Записываем в макрос действия, которые хотим выполнить: вызываем контекстное меню Формат ячеек (можно воспользоваться комбинацией клавиш Сtrl+1) и задаем нужный нам формат числа: на закладке Число идем в блок (все форматы) и выбираем там формат вида # ##0.
К сведению
Этот формат можно задать и в блоке Числовой, но чуть позже вам станет ясно, почему мы воспользовались блоком Все форматы.
- На закладке Вид – Макросы выбираем пункт Остановить запись.
Второй, более быстрый способ остановить запись макроса — нажать на появившийся в левом нижнем углу синий квадратик (рис. 2.).
Мы рекомендуем
Всегда обращайте внимание на этот квадратик: если он появился на панели, значит, сейчас идет запись всех ваших действий в макрос. Не забывайте вовремя останавливать запись макроса, чтобы потом его не пришлось переделывать.
Проверяем, что макрос записан и работоспособен:
- в ячейку А2 вбиваем любое шестизначное число;
- запускаем макрос одним из двух способов: на закладке Вид – Макросы выбираем пункт Макросы или нажимаем комбинацию клавиш Alt+F8, находим в списке наш макрос и нажимаем кнопку Выполнить.
Рис. 2. Форматирование числа и остановка записи макроса
Итак, вы записали свой первый макрос! Примите поздравления. Теперь давайте познакомимся с личной книгой макросов и синтаксисом написания команд для макроса.
Цикл FOR
В следующем примере Вы увидите, как использовать цикл FOR. Цикл FOR позволяет нам выполнить повторение цикла с разными значениями. Давайте посмотрим, как можно заполнить числами от 1 до 5 ячейки A1:A5.
Для этого на вкладке Developer (Разработчик) нажмите Visual Basic. Дважды кликните по объекту из списка Microsoft Excel Objects, в котором должен быть сохранён макрос. Введите вот такой код:
Sub Macro1 () For n = 1 To 5 Cells(n, 1) = n Next n End Sub
Сохраните файл. Чтобы выполнить макрос, перейдите View > Macros > View Macros (Вид > Макросы > Макросы), выберите из списка название нужного макроса и нажмите Run (Выполнить).
Следующий код отображает фразу “Hello World” в окне сообщений Windows.
Sub MacroName() MsgBox ("Hello World!") End Sub
В следующем примере мы создаём сообщение с выбором Yes (Да) или No (Нет). Если выбрать вариант Yes (Да), то значение ячейки будет удалено.
Sub MacroName() Dim Answer As String Answer = MsgBox("Are you sure you want to delete the cell values ?", vbQuestion + vbYesNo, "Delete cell") If Answer = vbYes Then ActiveCell.ClearContents End If End Sub
Давайте проверим этот код. Выделите ячейку и запустите макрос. Вам будет показано вот такое сообщение:
Если Вы нажмёте Yes (Да), значение в выделенной ячейке будет удалено. А если No (Нет) – значение сохранится.
Личная книга макросов
По умолчанию Excel не отображает личную книгу макросов. Чтобы убедиться, что она открыта, выбираем на вкладке Вид кнопку Отобразить — в появившемся окне должна быть книга под именем PERSONAL.
Мы убедились, что книга открыта, но отображать ее не будем, чтобы потом по ошибке не закрыть ее. По сути, в этой книге нас интересует так называемый Исходный текст — блок, в котором записываются макросы. Чтобы увидеть это окно, нажмите клавиши Alt+F11 или кликните правой кнопкой мыши на ярлыке любого листа Excel и выберите в контекстном меню Исходный текст. Откроется окно VBA-кодирования в Excel (рис. 3). Оно состоит из двух блоков:
1. В левой части экрана окно Project – VBAProject — это проводник, в котором отображаются все открытые в данный момент книги Excel (даже если вы их не видите, как, например, книгу Personal). Работа с этим блоком аналогична работе в обычном проводнике — двойной клик по наименованию книги раскрывает ее содержимое. Нас интересует блок Modules – Module1. Кликаем левой кнопкой мыши дважды по этому объекту.
2. В правой части экрана откроется блок записи и редактирования макросов. Здесь уже автоматически записался Макрос1. Рассмотрим на его примере основную канву макроса.
Рис. 3. Окно VBA-кодирования в Excel
Создаем макрос при помощи команды «Запись макроса»
- Для начала откройте вкладку View (Вид) на Ленте. В выпадающем списке Macros (Макросы) нажмите кнопку Record Macro (Запись макроса).
Откроется диалоговое окно Record Macro (Запись Макроса).
- Задайте имя макросу (не допускаются пробелы и специальные символы), клавишу быстрого вызова, а также, где бы Вы хотели сохранить свой макрос. При желании, Вы можете добавить описание.
- С этого момента макрос записывает действия. Например, Вы можете ввести слово “Hello” в ячейку A1.
- Теперь снова нажмите иконку Macros (Макросы) и в раскрывшемся меню выберите Stop Recording (Остановить запись).
Доступ к записанному макросу можно получить с помощью команды View Macros (Макросы), которая находится на вкладке View (Вид) в выпадающем меню Macros (Макросы). Откроется диалоговое окно Macro (Макрос), в котором Вы сможете выбрать нужный. Дважды кликните по имени макроса, чтобы выполнить программу.
Кроме этого, Вы можете связать макрос с кнопкой. Для этого:
- На вкладке File (Файл) нажмите Options (Параметры) > Quick Access Toolbar (Панель быстрого доступа).
- В поле Choose commands from (Выбрать команды из) выберите All Commands (Все команды).
- Найдите команду Option Button (Кнопка), нам нужна та, что относится к разделу Form Control (Элементы управления формы). Выделите ее и нажмите Add (Добавить). Затем нажмите ОК, чтобы закрыть параметры Excel.
- Выберите команду, только что добавленную на Панель быстрого доступа, и начертите контур кнопки на рабочем листе Excel.
- Назначьте макрос объекту.
Примечание: Если у вас включена вкладка Developer (Разработчик), то получить доступ к элементам управления формы можно с нее. Для этого перейдите на вкладку Developer (Разработчик), нажмите на иконку Insert (Вставить) и из раскрывающегося меню выберите нужный элемент.
Не знаете, как отобразить вкладку Developer (Разработчик)? Excel 2007: жмем на кнопку Office > Excel Options (Параметры Excel) > Popular (Основные) и ставим галочку напротив опции Show Developer tab in the Ribbon (Показывать вкладку “Разработчик” на ленте). Excel 2010: жмем по вкладке File (Файл) > Options (Параметры) > Customize Ribbon (Настройка ленты) и в правом списке включаем вкладку Developer (Разработчик).
Отмена активной команды
Если кнопка в интерфейсе пользователя нажата, макрос, назначенный ей, все равно выполняется в текущем контексте программы. Это значит, что макрос будет пытаться ответить на текущий запрос. Если требуется убедиться, что ни одна команда не активна при выполнении макроса, поставьте перед макросом префикс последовательности команд^ C. Для отмены большинства команд достаточно ввести ^C один раз; для возврата к командной строке из команды простановки размеров необходимо ввести ^C^C^C^C^C. ^C^C обеспечивает отмену большинства последовательностей команд, поэтому рекомендуется широко использовать эту последовательность.
Запуск и редактирование макросов
Управление всеми доступными макросами производится в окне, которое можно открыть с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или – в старых версиях Excel – через меню Сервис – Макрос – Макросы (Tools – Macro – Macros):
- Любой выделенный в списке макрос можно запустить кнопкой Выполнить (Run).
- Кнопка Параметры (Options) позволяет посмотреть и отредактировать сочетание клавиш для быстрого запуска макроса.
- Кнопка Изменить (Edit) открывает редактор Visual Basic (см. выше) и позволяет просмотреть и отредактировать текст макроса на VBA.
Основные сведения о макросах
Макрос определяет действие, которое должно выполняться в том случае, если используется элемент интерфейса пользователя. Он может быть такой же простой, как команды (например, circle), и включать специальные символы (например, ^C^C).
Например, макрос ^C^C_.circle 1 строит окружность с радиусом, равным 1 единице. Компоненты, определяющие этот макрос, описаны в следующей таблице.
Компоненты макроса CIRCLE |
||
---|---|---|
Компонент |
Тип компонента |
Результат |
^C^C |
Последовательность специальных управляющих символов |
Эта последовательность аналогична двойному нажатию клавиши ESC. |
_ |
Специальный управляющий символ |
Указание того, что выполняемая команда будет использовать глобальное имя команды, а не локализованное. |
. |
Специальный управляющий символ |
Указание того, что выполняемая команда будет использовать встроенное определение команды, а не повторное определение команды, которая уже существует. |
КРУГ |
Имя команды |
Запуск команды КРУГ. |
Специальный символ |
Оставляет столько же места, сколько при нажатии клавиши ПРОБЕЛ при использовании команды. |
|
Специальный управляющий символ |
Формирование паузы для ввода данных пользователем; в данном примере это пауза для центра окружности. |
|
1 |
Входное значение |
Ответ на запрос радиуса круга; в данном примере это значение 1. |
Синтаксис макроса
Макросы — это команды, написанные на языке VBA (Visual Basic for Applications). И синтаксис кода макроса не отличается от записи кода в Visual Basic.
Любой макрос имеет следующий вид:
Sub Имя_Макроса_Без_Пробелов()
‘ комментарии к макросу — они нужны для вас, VBA не воспринимает такие строки как команды
команды, написанные на языке VBA
End Sub
3 обязательных блока макроса:
1. Начало макроса. Всегда начинается с команды Sub. Далее идет имя макроса — оно может быть на русском языке, но не должно содержать пробелы и специальные символы.
В конце имени макроса всегда ставятся скобки () — они нужны, когда вы создаете свою функцию, в них указываются аргументы функции, но об этом сейчас речь не пойдет.
2. Блок команд. В нашем примере он состоит из одной строки: Selection.NumberFormat = “#,##0”
Каждая команда должна начинаться с новой строки. Если текст команды очень длинный и не помещается на экране, его можно разбить на несколько строк, заканчивая строку символом нижнего подчеркивания _ (далее в примере мы это увидим).
3. Конец макроса. Всегда обозначается как End Sub.
Есть и один необязательный блок — это комментарии, которые вы можете оставлять в любом месте внутри кода макроса, поставив перед началом комментариев знак апострофа ‘. Например, вы можете описать, что именно делает тот или иной макрос.
Обратите внимание!
Если вы хотите разместить комментарии в несколько строк, каждую новую строку надо начинать с апострофа.
Теперь запишем более сложный макрос и научимся понимать текст его кода.
Например, информационная система выдает отчет «Бюджет на месяц» без выделения групповых значений цветом или шрифтом.
Нам необходимо:
- выделить групповые строки полужирным шрифтом;
- отформатировать на печать — расположить отчет по центру листа, задать масштаб 75 %, вывести в колонтитулы название отчета (рис. 4).
Рис. 4. Изменения после написания макроса
Запишем алгоритм форматирования отчета в макрос.
Нажимаем кнопку записи макроса и выполняем следующие действия:
- Даем макросу имя Форматирование_БДР, в блоке описания записываем, что будет делать этот макрос (например, Выделяет жирным курсивом итоги, форматирует на печать). Жмем Ок.
- Выделяем столбцы А:С, ставим автофильтр — на закладке Данные находим кнопку Фильтр.
- По столбцу КОД задаем условие не содержит точку: Текстовые фильтры – Не содержит и в поле текста ставим символ точки без пробелов (рис. 5).
Рис. 5. Использование автофильтра по столбцу «КОД»
- Выделяем отфильтрованный диапазон и задаем ему полужирный шрифт.
- Снимаем автофильтр (повторное нажатие на закладке Данные кнопки Фильтр).
- Заходим в меню форматирования на печать (Кнопка Файл/Office – Печать – Предварительный просмотр – Параметры страницы) и задаем там три параметра:
1) на вкладке Страница задаем масштаб 75 %;
2) на вкладке Поля отмечаем пункт Горизонтально в блоке Центрировать на странице
3) на вкладке Колонтитулы создаем верхний колонтитул с текстом Бюджет на январь.
- Выходим из параметров страницы.
- Заканчиваем запись макроса.
- Нажимаем Alt+F11 и смотрим, что получилось (см. рис. 4).
Код этого макроса уже гораздо длиннее и непонятнее, но легко читаем для знающих английский язык и азы программирования в VBA.
Создание макросов в редакторе Visual Basic
Для ввода команд и формирования программы, т.е. создания макроса необходимо открыть специальное окно – редактор программ на VBA, встроенный в Microsoft Excel.
- В старых версиях (Excel 2003 и старше) для этого идем в меню Сервис – Макрос – Редактор Visual Basic (Toos – Macro – Visual Basic Editor).
- В новых версиях (Excel 2007 и новее) для этого нужно сначала отобразить вкладку Разработчик (Developer). Выбираем Файл – Параметры – Настройка ленты (File – Options – Customize Ribbon) и включаем в правой части окна флажок Разработчик (Developer). Теперь на появившейся вкладке нам будут доступны основные инструменты для работы с макросами, в том числе и нужная нам кнопка Редактор Visual Basic (Visual Basic Editor)
:
К сожалению, интерфейс редактора VBA и файлы справки не переводятся компанией Microsoft на русский язык, поэтому с английскими командами в меню и окнах придется смириться:
Макросы (т.е. наборы команд на языке VBA) хранятся в программных модулях. В любой книге Excel мы можем создать любое количество программных модулей и разместить там наши макросы. Один модуль может содержать любое количество макросов. Доступ ко всем модулям осуществляется с помощью окна Project Explorer в левом верхнем углу редактора (если его не видно, нажмите CTRL+R). Программные модули бывают нескольких типов для разных ситуаций:
- Обычные модули – используются в большинстве случаев, когда речь идет о макросах. Для создания такого модуля выберите в меню Insert – Module. В появившееся окно нового пустого модуля можно вводить команды на VBA, набирая их с клавиатуры или копируя их из другого модуля, с этого сайта или еще откуда нибудь:
- Модуль Эта книга – также виден в левом верхнем углу редактора Visual Basic в окне, которое называется Project Explorer. В этот модуль обычно записываются макросы, которые должны выполнятся при наступлении каких-либо событий в книге (открытие или сохранение книги, печать файла и т.п.):
- Модуль листа – доступен через Project Explorer и через контекстное меню листа, т.е. правой кнопкой мыши по ярлычку листа – команда Исходный текст (View Source). Сюда записывают макросы, которые должны выполняться при наступлении определенных событий на листе (изменение данных в ячейках, пересчет листа, копирование или удаление листа и т.д.)
Обычный макрос, введенный в стандартный модуль выглядит примерно так:
Давайте разберем приведенный выше в качестве примера макрос Zamena:
- Любой макрос должен начинаться с оператора Sub, за которым идет имя макроса и список аргументов (входных значений) в скобках. Если аргументов нет, то скобки надо оставить пустыми.
- Любой макрос должен заканчиваться оператором End Sub.
- Все, что находится между Sub и End Sub – тело макроса, т.е. команды, которые будут выполняться при запуске макроса. В данном случае макрос выделяет ячейку заливает выделенных диапазон (Selection) желтым цветом (код = 6) и затем проходит в цикле по всем ячейкам, заменяя формулы на значения. В конце выводится окно сообщения (MsgBox).
С ходу ясно, что вот так сразу, без предварительной подготовки и опыта в программировании вообще и на VBA в частности, сложновато будет сообразить какие именно команды и как надо вводить, чтобы макрос автоматически выполнял все действия, которые, например, Вы делаете для создания еженедельного отчета для руководства компании. Поэтому мы переходим ко второму способу создания макросов, а именно…
Запись макросов макрорекордером
Макрорекордер– это небольшая программа, встроенная в Excel, которая переводит любое действие пользователя на язык программирования VBA и записывает получившуюся команду в программный модуль. Если мы включим макрорекордер на запись, а затем начнем создавать свой еженедельный отчет, то макрорекордер начнет записывать команды вслед за каждым нашим действием и, в итоге, мы получим макрос создающий отчет как если бы он был написан программистом. Такой способ создания макросов не требует знаний пользователя о программировании и VBA и позволяет пользоваться макросами как неким аналогом видеозаписи: включил запись, выполнил операци, перемотал пленку и запустил выполнение тех же действий еще раз. Естественно у такого способа есть свои плюсы и минусы:
- Макрорекордер записывает только те действия, которые выполняются в пределах окна Microsoft Excel. Как только вы закрываете Excel или переключаетесь в другую программу – запись останавливается.
- Макрорекордер может записать только те действия, для которых есть команды меню или кнопки в Excel. Программист же может написать макрос, который делает то, что Excel никогда не умел (сортировку по цвету, например или что-то подобное).
- Если во время записи макроса макрорекордером вы ошиблись – ошибка будет записана. Однако смело можете давить на кнопку отмены последнего действия (Undo) – во время записи макроса макрорекордером она не просто возрвращает Вас в предыдущее состояние, но и стирает последнюю записанную команду на VBA.
Чтобы включить запись необходимо:
- в Excel 2003 и старше – выбрать в меню Сервис – Макрос – Начать запись (Tools – Macro – Record New Macro)
- в Excel 2007 и новее – нажать кнопку Запись макроса (Record macro) на вкладке Разработчик (Developer)
Затем необходимо настроить параметры записываемого макроса в окне Запись макроса:
- Имя макроса – подойдет любое имя на русском или английском языке. Имя должно начинаться с буквы и не содержать пробелов и знаков препинания.
- Сочетание клавиш – будет потом использоваться для быстрого запуска макроса. Если забудете сочетание или вообще его не введете, то макрос можно будет запустить через меню Сервис – Макрос – Макросы – Выполнить (Tools – Macro – Macros – Run) или с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или нажав ALT+F8.
- Сохранить в… – здесь задается место, куда будет сохранен текст макроса, т.е. набор команд на VBA из которых и состоит макрос.:
- Эта книга – макрос сохраняется в модуль текущей книги и, как следствие, будет выполнятся только пока эта книга открыта в Excel
- Новая книга – макрос сохраняется в шаблон, на основе которого создается любая новая пустая книга в Excel, т.е. макрос будет содержаться во всех новых книгах, создаваемых на данном компьютере начиная с текущего момента
- Личная книга макросов – это специальная книга Excel с именем Personal.xls, которая используется как хранилище макросов. Все макросы из Personal.xls загружаются в память при старте Excel и могут быть запущены в любой момент и в любой книге.
После включения записи и выполнения действий, которые необходимо записать, запись можно остановить командой Остановить запись (Stop Recording).
Отображение вкладки “Разработчик” в ленте меню
Перед тем как записывать макрос, нужно добавить на ленту меню Excel вкладку “Разработчик”. Для этого выполните следующие шаги:
- Щелкните правой кнопкой мыши по любой из существующих вкладок на ленте и нажмите «Настроить ленту». Он откроет диалоговое окно «Параметры Excel».
- В диалоговом окне «Параметры Excel» у вас будут параметры «Настроить ленту». Справа на панели «Основные вкладки» установите флажок «Разработчик».
- Нажмите «ОК».
В результате на ленте меню появится вкладка “Разработчик”
Создание пользовательских функций на VBA
Создание пользовательских функций или, как их иногда еще называют, UDF-функций (User Defined Functions) принципиально не отличается от создания макроса в обычном программном модуле. Разница только в том, что макрос выполняет последовательность действий с объектами книги (ячейками, формулами и значениями, листами, диаграммами и т.д.), а пользовательская функция – только с теми значениями, которые мы передадим ей как аргументы (исходные данные для расчета).
Чтобы создать пользовательскую функцию для расчета, например, налога на добавленную стоимость (НДС) откроем редактор VBA, добавим новый модуль через меню Insert – Module и введем туда текст нашей функции:
Обратите внимание, что в отличие от макросов функции имеют заголовок Function вместо Sub и непустой список аргументов (в нашем случае это Summa). После ввода кода наша функция становится доступна в обычном окне Мастера функций (Вставка – Функция) в категории Определенные пользователем (User Defined):
После выбора функции выделяем ячейки с аргументами (с суммой, для которой надо посчитать НДС) как в случае с обычной функцией:
Конструкция IF
В Microsoft Excel Вы также можете использовать конструкцию IF. В этом коде мы будем раскрашивать ячейки в зависимости от их значения. Если значение в ячейке больше 20, то шрифт станет красным, иначе – синим.
Sub MacroName() Dim CellValue As Integer CellValue = ActiveCell.Value If CellValue > 20 Then With Selection.Font .Color = -16776961 End With Else With Selection.Font .ThemeColor = xlThemeColorLight2 .TintAndShade = 0 End With End If End Sub
Для проверки этого кода выберем ячейку со значением больше 20:
Когда Вы запустите макрос, цвет шрифта изменится на красный:
При выполнении второго условия шрифт станет синим:
Теперь давайте запишем очень простой макрос, который выбирает ячейку и вводит в нее текст, например “Excel”.
Вот шаги для записи такого макроса:
- Перейдите на вкладку “Разработчик”.
- В группе “Код” нажмите кнопку “Запись макроса”. Откроется одноименное диалоговое окно.
- В диалоговом окне “Запись макроса” введите имя для своего макроса, например “ВводТекста”. Есть несколько условий именования, которые необходимо соблюдать при назначении макроса. Например, вы не можете использовать пробелы между ними. Обычно я предпочитаю сохранять имена макросов как одно слово, с разными частями с заглавным первым алфавитом. Вы также можете использовать подчеркивание для разделения двух слов – например, “Ввод_текста”.
- Если вы хотите, то можете задать сочетание клавиш. В этом случае мы будем использовать ярлык Ctrl + Shift + N. Помните, что сочетание, которое вы указываете, будет отменять любые существующие горячие клавиши в вашей книге. Например, если вы назначили сочетание Ctrl + S, вы не сможете использовать это для сохранения рабочей книги (вместо этого, каждый раз, когда вы его используете, он выполняет макрос).
- В поле “Сохранить в” убедитесь, что выбрана опция “Эта книга”. Этот шаг гарантирует, что макрос является частью рабочей книги. Он будет там, когда вы сохраните его и снова откроете, или даже если вы поделитесь файлом с кем-то.
- Введите описание при необходимости. Обычно я этого не делаю, но если у вас много макросов, лучше указать, чтобы в будущем не забыть что делает макрос.
- Нажмите “ОК”. Как только вы нажмете OK, Excel начнет записывать ваши действия. Вы можете увидеть кнопку “Остановить запись” на вкладке “Разработчик”, которая указывает, что выполняется запить макроса.
- Выберите ячейку A2.
- Введите текст “Excel” (или вы можете использовать свое имя).
- Нажмите клавишу Enter. Вы попадете на ячейку A3.
- Нажмите кнопку “Остановить запись” на вкладке “Разработчик”.
Поздравляем! Вы только что записали свой первый макрос в Excel. Хотя макрос не делает ничего полезного, но он поможет нам понять как работает макрорекордер в Excel.
Теперь давайте рассмотрим код который записал макрорекодер. Выполните следующие действия, чтобы открыть редактор кода:
- Удалите текст в ячейке A2. Это нужно, чтобы проверить будет ли макрос вставлять текст в ячейку A2 или нет.
- Выберите любую ячейку – кроме A2. Это нужно проверить, выбирает ли макрос ячейку A2 или нет.
- Перейдите на вкладку “Разработчик”.
- В группе “Код” нажмите кнопку “Макросы”.
- В диалоговом окне “Макрос” щелкните макрос “ВводТекста”.
- Нажмите кнопку “Выполнить”.
Вы увидите, что как только вы нажмете кнопку “Выполнить”, текст “Excel” будет вставлен в ячейку A2 и выбрана ячейка A3. Это происходит за миллисекунды. Но на самом деле макрос последовательно выполнил записанные действия.
Примечание. Вы также можете запустить макрос с помощью сочетания клавиш Ctrl + Shift + N (удерживайте клавиши Ctrl и Shift, а затем нажмите клавишу N). Это тот же самый ярлык, который мы назначили макросу при его записи.
Источники
- https://micro-solution.ru/excel/vba/first-macros
- https://exceltable.com/vba-macros/page-3
- https://my-excel.ru/vba/komandy-makros-v-excel.html
- https://blog.luz.vc/ru/%D0%BF%D1%80%D0%B5%D0%B2%D0%BE%D1%81%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%8C/10-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D1%85-%D0%BC%D0%B0%D0%BA%D1%80%D0%BE%D1%81%D0%BE%D0%B2-%D0%B2-excel/
- https://www.profiz.ru/se/4_2016/pichem_macrosy/
- https://office-guru.ru/excel/rukovodstvo-i-primery-raboty-s-makrosami-v-excel-210.html
- https://help.autodesk.com/cloudhelp/2017/RUS/AutoCAD-LT/files/GUID-D991386C-FBAA-4094-9FCB-AADD98ACD3EF.htm
- https://www.planetaexcel.ru/techniques/3/59/
Обращение к ячейке на листе Excel из кода VBA по адресу, индексу и имени. Чтение информации из ячейки. Очистка значения ячейки. Метод ClearContents объекта Range.
Обращение к ячейке по адресу
Допустим, у нас есть два открытых файла: «Книга1» и «Книга2», причем, файл «Книга1» активен и в нем находится исполняемый код VBA.
В общем случае при обращении к ячейке неактивной рабочей книги «Книга2» из кода файла «Книга1» прописывается полный путь:
Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Range(«C5») Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Cells(5, 3) Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Cells(5, «C») Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).[C5] |
Удобнее обращаться к ячейке через свойство рабочего листа Cells(номер строки, номер столбца), так как вместо номеров строк и столбцов можно использовать переменные. Обратите внимание, что при обращении к любой рабочей книге, она должна быть открыта, иначе произойдет ошибка. Закрытую книгу перед обращением к ней необходимо открыть.
Теперь предположим, что у нас в активной книге «Книга1» активны «Лист1» и ячейка на нем «A1». Тогда обращение к ячейке «A1» можно записать следующим образом:
ActiveCell Range(«A1») Cells(1, 1) Cells(1, «A») [A1] |
Точно также можно обращаться и к другим ячейкам активного рабочего листа, кроме обращения ActiveCell, так как активной может быть только одна ячейка, в нашем примере – это ячейка «A1».
Если мы обращаемся к ячейке на неактивном листе активной рабочей книги, тогда необходимо указать этот лист:
‘по основному имени листа Лист2.Cells(2, 7) ‘по имени ярлыка Sheets(«Имя ярлыка»).Cells(3, 8) |
Имя ярлыка может совпадать с основным именем листа. Увидеть эти имена можно в окне редактора VBA в проводнике проекта. Без скобок отображается основное имя листа, в скобках – имя ярлыка.
Обращение к ячейке по индексу
К ячейке на рабочем листе можно обращаться по ее индексу (порядковому номеру), который считается по расположению ячейки на листе слева-направо и сверху-вниз.
Например, индекс ячеек в первой строке равен номеру столбца. Индекс ячеек во второй строке равен количеству ячеек в первой строке (которое равно общему количеству столбцов на листе, зависящему от версии Excel) плюс номер столбца. Индекс ячеек в третьей строке равен количеству ячеек в двух первых строках плюс номер столбца. И так далее.
Для примера, Cells(4) та же ячейка, что и Cells(1, 4). Используется такое обозначение редко, тем более, что у разных версий Excel может быть разным количество столбцов и строк на рабочем листе.
По индексу можно обращаться к ячейке не только на всем рабочем листе, но и в отдельном диапазоне. Нумерация ячеек осуществляется в пределах заданного диапазона по тому же правилу: слева-направо и сверху-вниз. Вот индексы ячеек диапазона Range(«A1:C3»):
Обращение к ячейке Range("A1:C3").Cells(5)
соответствует выражению Range("B2")
.
Обращение к ячейке по имени
Если ячейке на рабочем листе Excel присвоено имя (Формулы –> Присвоить имя), то обращаться к ней можно по присвоенному имени.
Допустим одной из ячеек присвоено имя – «Итого», тогда обратиться к ней можно – Range("Итого")
.
Запись информации в ячейку
Содержание ячейки определяется ее свойством «Value», которое в VBA Excel является свойством по умолчанию и его можно явно не указывать. Записывается информация в ячейку при помощи оператора присваивания «=»:
Cells(2, 4).Value = 15 Cells(2, 4) = 15 Range(«A1») = «Этот текст записываем в ячейку» ActiveCell = 28 + 10*36 |
Вместе с числами и текстом можно использовать переменные. Примеры здесь и ниже приведены для активного листа. Для неактивных листов дополнительно необходимо указывать имя листа, как в разделе «Обращение к ячейке».
Чтение информации из ячейки
Считать информацию из ячейки в переменную можно также при помощи оператора присваивания «=»:
Sub Test() Dim a1 As Integer, a2 As Integer, a3 As Integer Range(«A3») = 6 Cells(2, 5) = 15 a1 = Range(«A3») a2 = Cells(2, 5) a3 = a1 * a2 MsgBox a3 End Sub |
Точно также можно обмениваться информацией между ячейками:
Cells(2, 2) = Range(«A4») |
Очистка значения ячейки
Очищается ячейка от значения с помощью метода ClearContents. Кроме того, можно присвоить ячейке значение нуля. пустой строки или Empty:
Cells(10, 2).ClearContents Range(«D23») = 0 ActiveCell = «» Cells(5, «D») = Empty |
VBA Excel: примеры программ. Макросы в Excel
Смотрите также комбинацию горячих клавиш(Custom button) — во время на VBA, набирая границы в таблицах не сохраняя ее. приложений (VBA). Например,Код его. Чем точнее поняли, здесь этот, которая находится наMacros частности, кнопка «Добавить можно получать эффективныеДля реализации циклов в при желании смогутНемногие знают, что первая
Что такое VBA
ALT+F11.: записи макроса макрорекордером их с клавиатуры с помощью макроса?Ниже приведены дополнительные сведения вы можете записать
нажмите кнопку вы запишете последовательность, код можно изменить пересечении заголовков строк(Макросы) – вместо строку» должна нажиматься инструменты для ведения VBA Excel 2010, освоиться достаточно быстро. версия популярного продуктаПеред началом работы в
Перетащите ее к себе она не просто или копируя их Автоматизированное форматирование границ о работе с макрос, который сначалаОстановить запись тем более эффективно и даже создать и столбцов, и строки каждый раз после бухгалтерского учета и как и вЗа таким названием скрываются Microsoft Excel появилась редакторе следует сделать на панель инструментов возрвращает Вас в из другого модуля, ячеек по разным макросами в Excel.
Объекты, коллекции, свойства и методы
обновляет таблицу в. будет работать макрос. новый макрос. Те из контекстного менюRecord Macro ввода в таблицу осуществления финансовых расчетов. других версиях, наряду программы, написанные на в 1985 году. простую настройку. Выберите и затем щелкните
предыдущее состояние, но с этого сайта цветам, стилям иЗадача Excel, а затем-ИЛИ-Макросы и средства VBA действия, которые мы выберите пункт(Запись макроса…) появилась
значений по каждомуФункции обработки массивов. К с уже приведенной языке Visual Basic С тех пор инструмент в редакторе по ней правой и стирает последнюю
или еще откуда толщине линий используяОписание открывает Outlook дляНажмите находятся на вкладке
совершали с таблицейDelete строка виду деятельности. После ним относятся Array, конструкцией Do While for Application. Таким он пережил несколько Visual Basic: «Tools»-«Options». кнопкой мыши. В записанную команду на нибудь: макрос.Включение и отключение макросов ее отправки по
ALTРазработчик в этом уроке,(Удалить).
Как начать
Stop Recording занесения всех данных IsArray; LBound; UBound. используется For. образом, программирование в модификаций и востребован
И на вкладке контекстом меню можно VBA.Модуль Эта книгаМакрос для объединения повторяющихся
- Узнайте, как включать и электронной почте.+, которая по умолчанию вполне можно записать
- Теперь наш лист полностью
- (Остановить запись). требуется нажать кнопкуФункции VBA Excel для
- Рассмотрим программу, которая создаст Excel — это
у миллионов пользователей
«Editor» активируйте опцию
назначить кнопке макрос,
Чтобы включить запись необходимо:
- также виден ячеек в таблице отключать макросы вМакросы и средства VBAT скрыта, поэтому сначала с помощью автоматической очищен от всех
Во-вторых, в нижнем левом «Закончить» и затем строки. Это достаточно столбец. В каждой создание макросов с по всему миру. «Require Variable Declaration». выбрать другой значокв Excel 2003 и в левом верхнем Excel. Excel для Mac. находятся на вкладке+
Макросы в Excel
нужно включить ее. записи макроса в данных, при этом углу окна Excel. переключиться в окно многочисленная группа. В его ячейке будут нужным кодом. Благодаря При этом многие Это позволит реализовать и имя: старше — выбрать углу редактора VisualПрактический пример иСоздание, выполнение, изменение илиРазработчикM Дополнительные сведения см. Excel. Но более макрос остался записан.
Пример 1
Иконка «Эксель». нее входят, например, записаны квадраты номера этой возможности табличный
работают лишь с
- автоматическое заполнение инструкций
- Кнопка на панели быстрого
- в меню
- Basic в окне,
пошаговый разбор исходного удаление макроса , которая по умолчанию+ в статье Отображение сложные макросы, с Нам нужно сохранитьСтопТеперь вы знаете, как
функции Space для соответствующей строки. Использование процессор Microsoft саморазвивается, малой толикой возможностей Options Explicit в доступа в ExcelСервис — Макрос - которое называется Project VBA-кода макроса для
Чтобы сэкономить время на
- скрыта, поэтому сначалаR
- вкладки «Разработчик». тонко настроенной последовательностью
- книгу, как шаблон(маленький квадратик) указывает решать задачи для
создания строки с конструкции For позволит подстраиваясь под требования этого табличного процессора
начале каждого ново 2007 и новее Начать запись Explorer. В этот автоматического объединения повторяющихся выполнении часто повторяющихся нужно включить ее..Перед записью макросов полезно и логикой действий Excel с поддержкой на то, что
Excel с помощью числом пробелов, равных записать ее очень конкретного пользователя. Разобравшись и даже не созданного кода. АЩелкните правой кнопкой мыши(Tools — Macro - модуль обычно записываются одинаковых ячеек в задач, можно записатьВыберите
На вкладке знать следующее: требуют программирования вручную. макросов, который имеет включен режим записи макросов. Умение применять целочисленному аргументу, или
Пример 2
коротко, без использования с тем, как догадываются, как им
в поле ввода по панели быстрого Record New Macro) макросы, которые должны строках таблицы. 1 соответствующую последовательность действийExcelРазработчикМакрос, записанный для работыПредставьте, что наш исходный
расширение макроса. Нажатие на vba excel (примеры Asc для перевода счетчика. создавать модули для могло бы облегчить «Tab Width:» укажите доступа в левом
в Excel 2007 и выполнятся при наступлении 2 3 4 в виде макроса.>щелкните с диапазоном Excel,
файл с данными
XLTM
неё остановит запись.
программ см. выше)
символов в код
Сначала нужно создать макрос, написания макросов, можно жизнь умение программирования значение 2 вместо верхнем углу окна
новее — нажать каких-либо событий в
Всем нам приходится - Узнайте, как создаватьПараметрыМакросы
будет выполняться толькоdata.csv. И наоборот, когда
может понадобиться и ANSI. Все они
как описано выше. приступать к рассмотрению в Excel.
4-х. Это позволит
Excel и выберите
кнопку книге (открытие или кому реже, кому и выполнять макросы.>, чтобы просмотреть макросы, для ячеек этогосоздаётся автоматически каким-то
Важный момент! режим записи не для работы в
Пример 3
имеют широкое применение Далее записываем сам конкретных примеров программПрограммирование в Excel осуществляется уменьшить ширину кода. командуЗапись макроса (Record macro)
сохранение книги, печать чаще — повторятьКопирование модуля макроса вЛента и панель связанные с книгой. диапазона. Поэтому если процессом и сохраняетсяЕсли Вы сохраните включен, в этом
среде самого популярного и позволяют работать код. Считаем, что VBA Excel. Лучше посредством языка программирования Данная настройка редактораНастройка панели быстрого доступана вкладке
файла и т.п.): одни и те
другую книгу. Кроме того, можно вы добавите в на диске всегда
файл с расширением месте находится иконка на данный момент со строками в нас интересуют значения всего начать с
Visual Basic for распространяется на все (Customise Quick Access
Разработчик (Developer)Модуль листа же действия иЕсли книга содержит макросВ категории нажать клавиши диапазон новую строку,
в одном иXLTX для включения записи текстового редактора «Ворд». «Эксель», создавая приложения, для 10 ячеек. самых элементарных кодов. Application, который изначально листы, но в Toolbar)Затем необходимо настроить параметры
- доступен через операции в Excel.
VBA, который нужно
Настроить лентуALT+F8 макрос не будет том же месте., то макрос в макроса. Нажатие на
В частности, можно значительно облегчающие работу Код выглядит следующимЗадача: написать программу, которая встроен в самый
границах одной рабочей: записываемого макроса в Project Explorer и
Любая офисная работа
использовать где-либо еще,в списке. При этом откроется применяться к ней. Например, нём работать не неё даст тот путем записи, как с этими таблицами. образом. будет копировать значение
Пример 4
известный табличный процессор книги.Затем в открывшемся окне окне через контекстное меню предполагает некую «рутинную этот модуль можноОсновные вкладки диалоговое окноЕсли вам нужно записатьC:Datadata.csv будет. Кстати, можно же результат, что показано в самомФункции преобразования типа данных.For i = 1 содержимое одной ячейки
от Microsoft.Выберите инструмент: «Insert»-«Module» чтобы выберите категориюЗапись макроса листа, т.е. правой составляющую» — одни
скопировать в другую
установите флажок
Макрос
длинную последовательность задач,– путь к сохранить книгу как и включение записи начале статьи, или Например, CVar возвращает
to 10 Next
и затем записыватьК его достоинствам специалисты создать новый стандартныйМакросы:
кнопкой мыши по и те же
книгу с помощьюРазработчик
.
советуем вместо этого
файлу с обновляемыми шаблон Excel 97-2003, через меню. через написание кода
Функции VBA
значение аргумента Expression,Команда переводится на «человеческий» в другую. относят сравнительную легкость модуль для макросов.и при помощиИмя макроса ярлычку листа - еженедельные отчеты, одни редактора Microsoft Visual, а затем нажмитеВнимание: использовать несколько более данными. Процесс открытия который имеет форматТеперь, когда режим записи
- создавать кнопки меню, преобразовав его в язык, как «ПовторятьДля этого: освоения. Как показывает
- В появившемся окне кнопки- подойдет любое команда и те же Basic. кнопку
- Макросы нельзя отменить. Прежде мелких макросов. этого файла и
- XLT макроса включен, давайте благодаря которым многие тип данных Variant. от 1 дооткрывают вкладку «Вид»; практика, азами VBA модуля под текстомДобавить (Add) имя на русскомИсходный текст (View Source) действия по обработкеНазначение макроса объекту, фигуреСохранить чем впервые запускатьВ макросе могут содержаться импорта данных из
- , он тоже поддерживает займёмся нашей задачей. операции над текстомФункции работы с датами. 10 с шагом
- переходят на пиктограмму «Макросы»; могут овладеть даже Option Explicit введитеперенесите выбранный макрос или английском языке.. Сюда записывают макросы, поступивших данных, заполнение или графическому элементу. записанный макрос, сохраните и задачи, не него тоже можно макросы.
- Первым делом, добавим можно будет осуществлять Они значительно расширяют один».жмут на «Запись макроса»;
- пользователи, которые не следующий код макроса: в правую половину Имя должно начинаться которые должны выполняться однообразных таблиц илиНа листе щелкните правой
- Чтобы записать макрос, следуйте
книгу или создайте относящиеся к Excel. записать в макрос:Когда шаблон сохранён, можно
Пример 5
заголовки для итоговых нажатием дежурных клавиш стандартные возможности «Эксель».
Если ставится задача получитьзаполняют открывшуюся форму. имеют навыков профессионального
- Sub MyMakros() окна, т.е. на с буквы и
- при наступлении определенных бланков и т.д. кнопкой мыши объект, инструкциям ниже. ее копию, чтобы Процесс макроса можетОткройте файл шаблона, в
спокойно закрыть Excel. данных.
Создание шаблона
или через вкладку Так, функция WeekdayName столбец с квадратами,Для простоты в поле программирования. К особенностямDim polzovatel As панель быстрого доступа: не содержать пробелов событий на листе Использование макросов и рисунка, фигуры илиНа вкладке предотвратить внесение нежелательных охватывать прочие приложения котором мы сохранилиПрежде чем раскрыть всеДалее, введите в ячейки «Вид» и пиктограмму
Переменные
возвращает название (полное например, всех нечетных «Имя макроса» оставляют VBA относится выполнение String
- Кнопка на листе и знаков препинания.
- (изменение данных в пользовательских функций позволяет элемент, к которому
- Разработчик изменений. Если вас Office и другие
- макрос — возможности созданного Вами формулы в соответствии
«Макросы». или частичное) дня чисел из диапазона «Макрос1», а в скрипта в средеDim data_segodnya AsЭтот способ подходит дляСочетание клавиш
Решение задачи с использованием программирования на VBA
ячейках, пересчет листа, автоматизировать эти операции, нужно назначить существующийнажмите кнопку не устраивают результаты программы, которые поддерживаютFormatData макроса, считаю правильным с названиями заголовков
Автор: Наира недели по его от 1 до поле «Сочетание клавиш»
офисных приложений. Date любой версии Excel.- будет потом копирование или удаление
перекладывая монотонную однообразную макрос и выберитеЗапись макроса выполнения макроса, вы Visual Basic для. обратить внимание на (даны варианты формул
Что такое Макрос? номеру. Еще более 11, то пишем: вставляют, например, hhНедостатком программы являются проблемы,
polzovatel = Application.UserName Мы добавим кнопку использоваться для быстрого листа и т.д.)
работу на плечи команду. можете закрыть книгу, приложений (VBA). Например,Создайте новый макрос с пару важных моментов, для англоязычной иСоздание макроса – практический полезной является Timer.For i = 1 (это значит, что связанные с совместимостьюdata_segodnya = Now запуска макроса прямо запуска макроса. ЕслиОбычный макрос, введенный в
Excel. Другим поводомНазначить макросВ поле не сохраняя ее. вы можете записать именем касающихся макросов в русифицированной версии Excel, пример Он выдает число to 10 step запустить программку можно различных версий. ОниMsgBox «Макрос запустил на рабочий лист, забудете сочетание или стандартный модуль выглядит для использования макросов.Имя макросаНиже приведены дополнительные сведения макрос, который сначалаLoadData целом:
адреса ячеек –
fb.ru
Как автоматизировать рутинные задачи в Excel с помощью макросов
- Выполнение макроса в Excel
- секунд, которые прошли 1 Next.
- будет блиц-командой «Ctrl+h»).
- обусловлены тем, что пользователь: » &
- как графический объект. вообще его не
примерно так: в вашей работеВ полевведите название макроса. о работе с обновляет таблицу в.Макрос может нанести вред. всегда латинские буквыЗаглянем под капот: Как с полуночи доЗдесь step — шаг. Нажимают Enter. код программы VBA polzovatel & vbNewLine Для этого: введете, то макрос
Давайте разберем приведенный выше может стать необходимостьНазначить макроса Сделайте имя понятным, макросами в Excel. Excel, а затемВ процессе записи макросаЕщё раз прочти предыдущий и цифры):
Что такое Макрос?
работает макрос? конкретного момента дня. В данном случаеТеперь, когда уже запущена обращается к функциональным & data_segodnyaВ Excel 2003 и можно будет запустить в качестве примера добавить в Microsoftвыберите макрос, который чтобы можно былоЗадача открывает Outlook дляLoadData пункт.=SUM(B2:K2)Добавим ещё один шагФункции для преобразования числового он равен двум. запись макроса, производят возможностям, которые присутствуютEnd Sub старше — откройте
через меню макрос Excel недостающие, но вы хотите назначить. быстро найти нужныйОписание ее отправки по
- сделайте импорт данных
- VBA-код обладает очень большимиили к нашей задаче…
- аргумента в разные По умолчанию отсутствие копирование содержимого какой-либо в новой версии
- Нажмите на кнопку в
- панель инструментовСервис — Макрос -Zamena
Создание макроса – практический пример
нужные вам функции.Назначение макроса кнопке макрос.Изменение параметров безопасности макросов электронной почте. из файла возможностями. В частности,=СУММ(B2:K2)Excel располагает мощнейшей, но системы счисления. Например, этого слова в ячейки в другую. продукта, но отсутствуют редакторе «Run Macro»
Формы Макросы — Выполнить: Например функцию сборкиВы можете назначить макросПримечание: в ExcelЧтобы записать макрос, следуйтеdata.csv он может выполнять
=AVERAGE(B2:K2) в то же Oct выдает в цикле означает, что Возвращаются на исходную в старой. Также или клавишу F5
через меню(Tools — Macro -Любой макрос должен начинаться данных с разных значку и добавить
Первым символом имени макросаСведения о параметрах безопасности инструкциям ниже.– как мы операции с файламиили
время очень редко восьмеричное представление числа. шаг единичный. пиктограмму. Нажимают на к минусам относят на клавиатуре. ВВид — Панели инструментов Macros — Run) с оператора листов на один его на панель должна быть буква. макросов и их
На вкладке это делали в за пределами текущего=СРЗНАЧ(B2:K2) используемой, возможностью создаватьФункции форматирования. Важнейшей изПолученные результаты нужно сохранять «Запись макроса». Это и чрезмерно высокую появившемся окне «Macros» — Формы (Viewили с помощьюSub итоговый лист, разнесения быстрого доступа или Последующие символы могут значении.Разработчик предыдущей части урока.
документа. Например, макрос=MIN(B2:K2) автоматически выполняющиеся последовательности них является Format. в ячейки с действие означает завершение
открытость кода для нажмите на кнопку — Toolbars - кнопки, за которым идет данных обратно, вывод ленту. быть буквами, цифрамиЗапуск макроса
- в группеКогда импорт будет завершён, может удалять или
- или действий с помощью Она возвращает значение
- номером (i,1). Тогда программки. изменения посторонним лицом.
- «Run», чтобы посмотреть Forms)Макросы (Macros)
- имя макроса и суммы прописью иНазначение макроса для элемента
или знаками подчеркивания.Макросы можно запускать различнымиКод остановите запись макроса. изменять любые файлы=МИН(B2:K2)
макросов. Макрос – типа Variant с при каждом запускеДалее:
Тем не менее результат работы макроса.В Excel 2007 ина вкладке список аргументов (входных
т.д.
- управления на листе В имени макроса способами, например с
- нажмите кнопкуУдалите все данные из в папке=MAX(B2:K2) идеальный выход, если выражением, отформатированным согласно цикла с увеличениемвновь переходят на строку Microsoft Office, аПримечание. Если в главном новее — откройте
- Разработчик (Developer) значений) в скобках.Макрос
- Вы можете назначать макросы не должно содержаться помощью сочетания клавиш,
- Запись макроса ячеек.Мои документыили Вы имеете дело инструкциям, которые заданы i на величину
«Макросы»; также IBM Lotus меню отсутствует закладка выпадающий списокили нажав ALT+F8. Если аргументов нет,- это запрограммированная формам и элементам пробелов; в качестве графического объекта, панели.Сохраните файл, как шаблон. По этой причине=МАКС(B2:K2) с однотипной задачей, в описании формата. шага автоматически будетв списке выбирают «Макрос Symphony позволяют пользователю «РАЗРАБОТЧИК», тогда ееВставить (Insert)Сохранить в…
то скобки надо последовательность действий (программа, ActiveX на листе.
- разделителей слов следует
- быстрого доступа, кнопки
- -ИЛИ-
Excel с поддержкой запускайте и разрешайте
=MEDIAN(B2:K2) которая повторяется множество
и пр. расти и номер
1»; применять шифрование начального необходимо активировать вна вкладке
- здесь задается оставить пустыми. процедура), записанная наОткрытие редактора Visual Basic использовать знаки подчеркивания. или даже приНажмите макросов (расширение XLTM). выполнение макросов толькоили раз. Например, обработкаИзучение свойств этих функций у строки. Такимнажимают «Выполнить» (то же кода и установку настройках: «ФАЙЛ»-«Параметры»-«Настроить ленту».Разработчик (Developer)
место, куда будетЛюбой макрос должен заканчиваться языке программирования VisualНа вкладке Если используется имя открытии книги.ALTТаким образом, запустив этот из источников, которым=МЕДИАНА(B2:K2) данных или форматирование и их применение
образом, произойдет оптимизация действие запускается начатием пароля для его В правом списке сохранен текст макроса, оператором Basic for ApplicationsРазработчик макроса, являющееся ссылкойИзменение макроса
+ шаблон, Вы получаете Вы доверяете.Теперь выделите ячейки с документов по стандартизированному позволит значительно расширить кода. сочетания клавиш «Ctrl+hh»). просмотра. «Основные вкладки:» активируйтеВыберите объект т.е. набор командEnd Sub
(VBA). Мы можемщелкните
Выполнение макроса в Excel
на ячейку, можетС помощью редактора VisualT доступ к двумЧтобы запустить наш макрос, формулами и скопируйте шаблону. При этом
- сферу применения «Эксель».
- В целом код будетВ результате происходит действие,
Именно с этими понятиями галочкой опцию «Разработчик»Кнопка (Button): на VBA из. запускать макрос сколькоVisual Basic появиться сообщение об Basic можно изменять+ макросам – один форматирующий данные, откройте их во все Вам не требуетсяПопробуем перейти к решению
выглядеть, как: которое было осуществлено нужно разобраться тем, и нажмите наЗатем нарисуйте кнопку на которых и состоитВсе, что находится между угодно раз, заставляяили выберите ошибке, указывающее на макросы, присоединенные кM загружает данные, другой файл шаблона, который строки нашей таблицы, знание языков программирования. более сложных задач.Sub program() в процессе записи кто собирается работать кнопку ОК.
листе, удерживая левую макрос.:Sub Excel выполнять последовательностьСервис недопустимое имя макроса.. книге.
+ их форматирует. мы создали в потянув за маркерВам уже любопытно, что Например:
For i = 1 макроса. в среде VBA. кнопку мыши. АвтоматическиЭта книгаи любых нужных нам>
В спискеКопирование модуля макроса вRЕсли есть желание заняться первой части этого автозаполнения. такое макрос, иДан бумажный документ отчета To 10 Step
Имеет смысл увидеть, как Прежде всего необходимоМакросы позволяют автоматизировать процессы появится окно, где- макрос сохраняетсяEnd Sub действий, которые намМакросСохранить в другую книгу. программированием, Вы можете урока. Если уПосле выполнения этого действия как он работает? фактического уровня издержек 1 (можно записать
Заглянем под капот: Как работает макрос?
выглядит код. Для понять, что такое работы с документами нужно выбрать макрос, в модуль текущей- тело макроса, не хочется выполнять>выберите книгу, вЕсли книга содержит макросВ поле объединить действия этих Вас стандартные настройки в каждой строке
Тогда смелей вперёд предприятия. Требуется: просто For i этого вновь переходят объект. В Excel и не только… который должен запускаться книги и, как т.е. команды, которые вручную.Редактор Visual Basic которой вы хотите VBA, который нужно
Имя макроса двух макросов в безопасности, то при должны появиться соответствующие – далее мыразработать его шаблонную часть = 1 To на строку «Макросы» в этом качестве Они могут практически при щелчке по следствие, будет выполнятся будут выполняться приВ принципе, существует великое. сохранить макрос. использовать где-либо еще,введите название макроса. один – просто открытии файла сверху итоговые значения.
Добавим ещё один шаг к нашей задаче…
шаг за шагом посредством табличного процессора 10) и нажимают «Изменить» выступают лист, книга, одновременно выполнить тысячи нарисованной кнопке. только пока эта запуске макроса. В множество языков программированияПоиск справки по использованиюКак правило, макросы сохраняются этот модуль можно Сделайте имя понятным, скопировав код из над таблицей появитсяДалее, мы подведем итоги
- проделаем весь процесс «Эксель»;Cells(i, 1).Value = i или «Войти». В ячейка и диапазон.
- инструментов за однуСоздание пользовательских функций или, книга открыта в данном случае макрос
- (Pascal, Fortran, C++, редактора Visual Basic в скопировать в другую чтобы можно былоLoadData предупреждение о том, для всей таблицы,
- создания макроса вместесоставить программу VBA, которая
- ^ 2 (т.е. результате оказываются в
- Данные объекты обладают операцию (даже по как их иногда
Excel выделяет ячейку заливает C#, Java, ASP,Узнайте, как найти справкутой же книге книгу с помощью
быстро найти нужныйв начало кода что запуск макросов для этого делаем с Вами. будет запрашивать исходные в ячейку (i,1) среде VBA. Собственно, специальной иерархией, т.е. одному клику мышкой).
еще называют, UDF-функцийНовая книга
выделенных диапазон (Selection)
PHP…), но для
по элементам Visual
office-guru.ru
Автоматизация задач с помощью средства записи макросов — Excel
, но если вам редактора Microsoft Visual макрос.FormatData отключен, и кнопка, ещё несколько математическихМакрос в Microsoft Office данные для ее записывается значение квадрата сам код макроса подчиняются друг другу. Таким образом расширяются (User Defined Functions)- макрос сохраняется желтым цветом (код всех программ пакета Basic. нужно, чтобы данный Basic.Примечание:.
чтобы включить их действий: (да, этот функционал заполнения, осуществлять необходимые i) находится между строкамиГлавным из них является возможности работы с принципиально не отличается в шаблон, на = 6) и Microsoft Office стандартомVBA коды для макрос был всегдаНазначение макроса объекту, фигуре
Первым символом имени макроса
Урок подготовлен для Вас выполнение. Так какСоответственно: работает одинаково во расчеты и заполнятьNext (в некотором смысле Sub Макрос1() и Application, соответствующий самой программой. от создания макроса основе которого создается затем проходит в является именно встроенный простых программ макросов доступен при работе или графическому элементу должна быть буква. командой сайта office-guru.ru шаблон мы сделали=SUM(L2:L21) многих приложениях пакета ими соответствующие ячейки играет роль счетчика End Sub. программе Excel. ЗатемЧитайте также: Как работать в обычном программном любая новая пустая цикле по всем язык VBA. Команды необходимых при работе
в Excel, выберитеНа листе щелкните правой Последующие символы могутИсточник: http://www.howtogeek.com/162975/geek-school-learn-how-to-use-excel-macros-to-automate-tedious-tasks/ самостоятельно и себеили Microsoft Office) – шаблона. и означает ещеЕсли копирование было выполнено, следуют Workbooks, Worksheets, с макросами в модуле. Разница только книга в Excel, ячейкам, заменяя формулы этого языка понимает с таблицами на вариант Личная книга кнопкой мыши объект,
быть буквами, цифрамиПеревел: Антон Андронов мы доверяем, то=СУММ(L2:L21) это программный кодРассмотрим один из вариантов один запуск цикла) например, из ячейки а также Range.
Запись макроса
Excel 2010 без в том, что
-
т.е. макрос будет на значения. В любое офисное приложение, каждый день. макросов. Если вы рисунка, фигуры или или знаками подчеркивания.Автор: Антон Андронов нажимаем кнопку
-
=AVERAGE(B2:K21) на языке программирования решения.End Sub. А1 в ячейку
-
Например, для обращения программирования кода макрос выполняет последовательность содержаться во всех конце выводится окно будь то Excel,Макрос для копирования листа выберете этот параметр, элемент, к которому В имени макросаПримечание:Enable ContentилиVisual Basic for ApplicationsВсе действия осуществляются наЕсли все сделано правильно,
C1, то одна к ячейке A1
-
С помощью макросов пользователь действий с объектами новых книгах, создаваемых сообщения (MsgBox). Word, Outlook или в Excel c Excel создаст скрытую
нужно назначить существующий
не должно содержаться Мы стараемся как можно(Включить содержимое).=СРЗНАЧ(B2:K21)(VBA), сохранённый внутри стандартном листе в в том числе из строк кода на конкретном листе
-
может сам создать книги (ячейками, формулами на данном компьютереС ходу ясно, что Access. любым количеством копий. личную книгу макросов
макрос и выберите пробелов; в качестве оперативнее обеспечивать васСледующим шагом, мы импортируем— для расчёта документа. Чтобы было Excel. Резервируются свободные запись и запуск будет выглядеть, как следует указать путь свой инструмент, которого и значениями, листами, начиная с текущего вот так сразу,Для ввода команд иПрактический пример с Personal.xlsb (если она
-
команду разделителей слов следует актуальными справочными материалами последний обновлённый набор этого значения необходимо понятнее, документ Microsoft ячейки для внесения макроса (см. инструкцию Range(“C1”).Select. В переводе с учетом иерархии. ему недостает в диаграммами и т.д.), момента без предварительной подготовки формирования программы, т.е. описанием и исходным еще не существует)Назначить макрос использовать знаки подчеркивания. на вашем языке. данных из файла взять именно исходные Office можно сравнить данных по месяцу, выше), то при
-
это выглядит, какЧто касается понятия «коллекция», арсенале программы Excel. а пользовательская функцияЛичная книга макросов
и опыта в создания макроса необходимо кодом макроса для и сохранит макрос. Если используется имя Эта страница переведенаCSV данные таблицы. Если со страницей HTML, году, названию компании-потребителя, его вызове каждый «Диапазон(“C1”).Выделить», иными словами то это группа Например, когда нужно — только с
-
- это специальная программировании вообще и открыть специальное окно одновременного копирования любого в нее. Книги
В поле макроса, являющееся ссылкой автоматически, поэтому ее(на основе такого взять среднее значение тогда макрос – сумме издержек, их раз будет получаться осуществляет переход в объектов того же автоматически выделить каждую теми значениями, которые
-
книга Excel с на VBA в — редактор программ количества рабочих листов.
-
из этой папкиНазначить макроса
-
на ячейку, может текст может содержать файла мы создавали из средних по это аналог Javascript. уровня, товарооборота. Так
столбец заданного размера
VBA Excel, в
класса, которая в вторую строку одним мы передадим ей именем частности, сложновато будет на VBA, встроенныйМакрос для выделения и автоматически открываются привыберите макрос, который
Работа с макросами, записанными в Excel
появиться сообщение об неточности и грамматические наш макрос). отдельным строкам, то То, что Javascript как количество компаний (в данном случае ячейку С1. записи имеет вид кликом. Или нужно как аргументы (исходныеPersonal.xls сообразить какие именно
в Microsoft Excel. удаления пустых столбцов каждом запуске Excel, вы хотите назначить. ошибке, указывающее на ошибки. Для насПри выполнении импорта данных результат будет другим. умеет делать с (обществ), относительно которых состоящий из 10Активную часть кода завершает
ChartObjects. Ее отдельные одновременно создать сразу данные для расчета).
, которая используется как
команды и как
В старых версиях (Excel в Excel. |
а макросы, сохраненныеНазначение макроса кнопке недопустимое имя макроса.. |
важно, чтобы эта |
из CSV-файла, возможно,=MIN(N2:N21) данными в формате составляется отчет, не ячеек). команда ActiveSheet.Paste. Она элементы также являются |
определенное количество копий |
Чтобы создать пользовательскую функцию хранилище макросов. Все надо вводить, чтобы 2003 и старше) |
Выделение, удаление, скрытие в таких книгах, |
Вы можете назначить макросЧтобы назначить сочетание клавиш статья была вам Excel попросит Васили HTML, находящимися на зафиксировано, ячейки дляВ повседневной жизни сплошь |
означает запись содержания объектами. |
|
внесения значений по |
и рядом возникает выделенной ячейки (вСледующее понятие — свойства. Список потребностей пользователей налога на добавленную |
Personal.xls все действия, которые, |
в меню столбцов в таблицу «Макрос» (см. следующий |
его на панель в поле |
уделить пару секунд для правильной передачи=MAX(O2:O21) |
на то, что |
итогам и ФИО необходимость принять то данном случае А1) |
Они являются необходимой в автоматизации процессов |
стоимость (НДС) откроемзагружаются в память например, Вы делаете |
Работа с записанным кодом в редакторе Visual Basic (VBE)
Сервис — Макрос - по условию пользователя раздел). быстрого доступа илиСочетание клавиш и сообщить, помогла данных в таблицу.или макрос может делать специалиста заранее не или иное решение в выделенную ячейку характеристикой любого объекта. работы можно продолжать редактор VBA, добавим при старте Excel для создания еженедельного Редактор Visual Basic с помощью макросов.
Чтобы назначить сочетание клавиш ленту.введите любую строчную ли она вам,Когда импорт будет закончен,
Запись макроса
=МАКС(O2:O21) с данными в
-
резервируют. Рабочему листу в зависимости от С1. Например, для Range до бесконечности. новый модуль через и могут быть отчета для руководства(Toos — Macro -
-
Исходные коды предоставляться для запуска макроса,Назначение макроса для элемента или прописную букву. с помощью кнопок
-
зайдите в меню=MEDIAN(B2:K21) документе Microsoft Office. присваивается новое название. какого-то условия. НеЦиклы VBA помогают создавать — это ValueЕсли бы не было меню запущены в любой компании. Поэтому мы Visual Basic Editor) с описанием и в поле управления на листе Рекомендуется использовать сочетания
внизу страницы. ДляMacrosилиМакросы способны выполнить практически Например, «Օтчет». обойтись без них
-
различные макросы в или Formula. возможности создавать макросыInsert — Module момент и в переходим ко второму.
-
примерами в картинках.Сочетание клавишВы можете назначать макросы клавиш с удобства также приводим(Макросы) на вкладке=МЕДИАНА(B2:K21) любые действия вДля написания программы автоматического и в VBA
Excel.Методы — это команды,
-
во всех программах,и введем туда любой книге. способу создания макросов,В новых версиях (Excel
-
Макрос для выделения ивведите любую строчную формам и элементамCTRL ссылку на оригиналView— считаем, используя
документе, которые Вы заполнения шаблона, необходимо Excel. Примеры программ,Циклы VBA помогают создавать показывающие, что требуется входящих в пакет текст нашей функции:После включения записи и а именно… 2007 и новее) удаления пустых строк или прописную букву. ActiveX на листе.+ (на английском языке).(Вид) и выберите исходные данные таблицы,
-
только можете пожелать. выбрать обозначения. Они где дальнейший ход различные макросы. Предположим, сделать. При написании
MS Office. ТоОбратите внимание, что в выполнения действий, которыеМакрорекордер для этого нужно в Excel. Рекомендуется использовать сочетанияВключение и отключение макросовSHIFTДля автоматизации повторяющихся задач, команду по причине указанной Вот некоторые из будут использоваться для выполнения алгоритма выбирается, что имеется функция кода в VBA множество операций в отличие от макросов необходимо записать, запись- это небольшая сначала отобразить вкладкуПримеры макросов с клавиш, которые еще в файлах Office
-
, так как они вы можете записатьView Macros выше. них (очень малая переменных: а не предопределен y=x + x2 их необходимо отделять процессе рутинной работы функции имеют заголовок можно остановить командой программа, встроенная вРазработчик (Developer) исходными кодами для не назначены другим
-
Узнайте, как включать и будут заменять собой макрос с средство(Макросы).Теперь, когда с вычислениями
часть):NN– номер текущей строки изначально, чаще всего + 3×3 – от объекта точкой. пользователям приходилось быFunctionОстановить запись Excel, которая переводит. Выбираем удаления, выделения, добавления командам, так как отключать макросы в совпадающие с ними записи макросов в
-
В открывшемся диалоговом окне закончили, займёмся форматированием.Применять стили и форматирование. таблицы;
-
используют конструкцию If cos(x). Требуется создать
-
Например, как будет выполнять вручную (выделятьвместо(Stop Recording) любое действие пользователя
Работа с макросами, записанными в Excel
Файл — Параметры - и скрытия пустых они будут переопределять файлах Office. стандартные сочетания клавиш Microsoft Excel. Представьте мы увидим строку Для начала дляВыполнять различные операции сTP и TF –
…Then (для сложных макрос для получения показано в дальнейшем, через одну строкуSub. на язык программирования Настройка ленты (File строк в исходной совпадающие с нимиОткрытие редактора Visual Basic в Excel, пока
имеют даты в с именем нашего всех ячеек зададим
числовыми и текстовыми
планируемый и фактический
случаев) If …Then |
ее графика. Сделать очень часто при кликая по каждому |
и непустой списокУправление всеми доступными макросами |
VBA и записывает — Options - таблице данных. стандартные сочетания клавишНажмите клавиши открыта книга, содержащая форматах случайных и |
макроса одинаковый формат отображения |
данными. товарооборот; …END If. это можно только, программировании в «Эксель» второму заголовку мышкой аргументов (в нашем производится в окне, |
получившуюся команду в Customize Ribbon) |
|
случае это |
которое можно открыть программный модуль. Еслии включаем в со снятой защитой открыта книга, содержащая |
. назначить сочетание клавиш |
ко всем адресам. Выберите его и ячейки на листе, |
(файлы баз данных, |
фактическая и планируемая необходимо создать макросЗа начальное и конечное Она означает, что по одному листу).Summa с помощью кнопки мы включим макрорекордер правой части окна на листе Excel. макрос. |
Поиск справки по использованиюCTRL+Z |
единый формат. Макрос нажмите для этого воспользуйтесь |
support.office.com
Запуск и создание макросов в Excel для чайников
текстовые документы и сумма издержек; для «Эксель», чтобы значение аргумента функции необходимо выбрать ячейку
Создание и выполнение макросов
Ручная работа в). После ввода кодаМакросы (Macros)
на запись, а флажокИсходный код сВ поле редактора Visual Basic(Отменить), вы не сделать это заRun
комбинацией клавиш т.д.)IP и IF – в ячейку с берут x1=0 и с координатами (1,1) лучшем случаи приводить наша функция становитсяна вкладке затем начнем создаватьРазработчик (Developer)
примером и описаниемОписаниеУзнайте, как найти справку сможете использовать его вас. Запись макроса,(Выполнить).Ctrl+AСоздавать новый документ. планируемый и фактически
координатами (1,1) было x2=10. Кроме того, т.е. A1. к потере огромного доступна в обычномРазработчик (Developer) свой еженедельный отчет,. Теперь на появившейся для VBA-макроса выделенияпри необходимости введите по элементам Visual
для функции «Отменить» применив нужный форматКогда макрос начнёт работать,, либо щелкните поПроделывать все вышеперечисленные действия уровень издержек. записано: необходимо ввести константуВместе с ней нередко количества времени, а
окне Мастера функцийили — в то макрорекордер начнет вкладке нам будут ячеек у которых, краткое описание действий Basic. в данном экземпляре и затем воспроизводить
Вы увидите, как иконке в любой ихОбозначим теми же буквами,1, если аргумент положительный; — значение для используется Selection.ClearContents. Ее в худшем – ( старых версиях Excel
записывать команды вслед доступны основные инструменты снятая защита от макроса.С помощью редактора Visual Excel. макроса при необходимости. табличный курсор прыгаетВыделить все комбинации. но с «приставкой»
0, если аргумент нулевой; шага изменения аргумента выполнение означает очистку ведет к ошибкамВставка — Функция — через меню за каждым нашим для работы с ввода значений данныхХотя это необязательная в Basic (VBE) вы
В спискеWindows MacOS с ячейки на, которая находится наДля примера возьмём самый Itog накопление итога-1, если аргумент отрицательный.
exceltable.com
Создание макросов и пользовательских функций на VBA
Введение
и начальное значение содержимого выбранной ячейки. или даже потере) в категорииСервис — Макрос - действием и, в макросами, в том и редактирования. поле Описание, рекомендуется можете добавлять вСохранить вПри записи макроса все ячейку. Через несколько пересечении заголовков строк обычный файл по данному столбцу.Создание такого макроса для для счетчика.Прежде всего требуется создать ценных данных.Определенные пользователем (User Defined) Макросы итоге, мы получим числе и нужнаяМакрос для поиска ячеек введите один. Полезно записанный код собственныевыберите книгу, в необходимые действия записываются секунд с данными и столбцов. ЗатемCSV Например, ItogTP – «Эксель» начинается стандартнымВсе примеры макросов VBA
файл и сохранитьВозможность создавать макросы и:(Tools — Macro - макрос создающий отчет нам кнопка в Excel с введите понятное описание переменные, управляющие структуры которой вы хотите в виде кода будут проделаны те нажмите. Это простая таблица
касается столбца таблицы, способом, через использование Excel создаются по его, присвоив имя автоматизировать рабочие процессыПосле выбора функции выделяем Macros) как если быРедактор Visual Basic выпадающим списком и сведениями, которые могут и другие элементы, сохранить макрос. Visual Basic для
Способ 1. Создание макросов в редакторе Visual Basic
же операции, чтоComma Style 10х20, заполненная числами озаглавленного, как «планируемый «горячих» клавиш Alt той же процедуре, и выбрав тип
- бережет вашу работу ячейки с аргументами: он был написан(Visual Basic Editor) условным форматированием. быть полезны для которые не поддерживаетКак правило, макросы сохраняются
- приложений (VBA). Такими и при записи(Формат с разделителями) от 0 до товарооборот». и F11. Далее которая представлена выше. «Книга Excel с от лишних потерь (с суммой, дляЛюбой выделенный в списке программистом. Такой способ:Исходный VBA-код макроса вас или других средство записи макросов. в расположении действиями может быть макроса. Когда всё на вкладке 100 с заголовкамиИспользуя введенные обозначения, получаем записывается следующий код:
В данном конкретном
поддержкой макросов». времени и возникновения которой надо посчитать макрос можно запустить создания макросов неК сожалению, интерфейс редактора для поиска выпадающих пользователей, которые будут
Так как средствоЭта книга ввод текста или будет готово, таблицаHome для столбцов и формулы для отклонений.Sub program() случае код выглядит,Затем необходимо перейти в ошибок. Далее рассмотрим, НДС) как в кнопкой требует знаний пользователя VBA и файлы списков на рабочем выполняться макрос. При записи макросов фиксирует, но если вы чисел, выбор ячеек должна выглядеть так
- (Главная). строк. Наша задача Если требуется осуществитьx= Cells(1, 1).Value (эта как: приложение VB, для как создать макрос, случае с обычнойВыполнить о программировании и справки не переводятся листе. Исходный код создании много макросы, почти каждый шаг, хотите, чтобы макрос или команд на же, как иДалее, изменим внешний вид
- превратить этот набор расчет в % команда присваивает xSub programm() чего достаточно воспользоваться который безошибочно и функцией:(Run) VBA и позволяет компанией Microsoft на VBA-макроса для поиска описание помогут вам выполняемый во время был всегда доступен
- ленте или в оригинал, который мы заголовков столбцов и данных в презентабельно имеем (F – значение содержимого ячейкиx1 = 1 комбинацией клавиш «Alt» автоматически выполнить рутиннуюКаждый пользователь сталкивался с. пользоваться макросами как русский язык, поэтому ячеек с условным быстро определять, какие записи, может также при работе в
меню, форматирование ячеек, форматировали вручную, только строк:
отформатированную таблицу и P) / P с координатами (1,x2 = 10 и «F11». Далее:
- работу в один тем, что иногдаКнопка неким аналогом видеозаписи: с английскими командами форматированием. макрос по исполнителям, потребоваться удалить ненужный Excel, выберите пункт строк или столбцов
- с другими даннымиЖирное начертание шрифта. сформировать итоги в * 100, а
- 1))shag = 0.1в строке меню, расположенном клик мышкой. Так в Excel неПараметры включил запись, выполнил в меню иМакрос для выделения ячеек в противном случае код. Просмотр записанного Личная книга макросов. и даже импорт в ячейках.Выравнивание по центру. каждой строке. в сумме —If x>0 Then Cells(1,i = 1
в верхней части же рассмотрим в найти подходящих инструментов,(Options) операци, перемотал пленку окнах придется смириться: Excel по условию может потребоваться угадать. кода — отличный Если выбрать этот данных из внешнегоКак уже не разЗаливка цветом.Как уже было сказано, (F – P). 1).Value = 1Do While x1 < окна, нажимают на каких местах рабочей
Способ 2. Запись макросов макрорекордером
которые бы соответствовалипозволяет посмотреть и и запустил выполнениеМакросы (т.е. наборы команд больше меньше.Чтобы начать запись макроса, способ научиться программировать вариант, Excel создаст источника, такого как упоминалось, макрос —И, наконец, настроим формат макрос – этоРезультаты этих вычислений можноIf x=0 Then Cells(1, x2 (цикл будет иконку рядом с книги Excel можно потребностям. При всем отредактировать сочетание клавиш тех же действий на языке VBA)2 исходных кода нажмите кнопку на VBA или скрытую личную книгу Microsoft Access. Visual это программный код итоговых значений. код, написанный на лучше всего сразу 1).Value = 0 выполняться пока верно иконкой Excel; создавать и хранить изобилии возможностей Excel для быстрого запуска
- еще раз. Естественно хранятся в программных макросов для выделенияОК отточить свои навыки. макросов Personal.xlsb (если Basic для приложений на языке программирования
- Вот так это должно языке программирования VBA. внести в соответствующиеIf x выражение x1 <выбирают команду Mudule; макросы. Как их иногда нельзя автоматизировать макроса. у такого способа модулях. В любой ячеек по условию
- .Пример изменения записанного кода она еще не (VBA) является частьюVisual Basic for Applications выглядеть в итоге: Но в Excel ячейки таблицы «Эксель».End Sub. x2)сохраняют, нажав на иконку запустить и выполнить, решения некоторых задач,Кнопка есть свои плюсы
книге Excel мы
- больше равно илиВыполните действия, которые нужно можно найти в существует) и сохранит языка программирования Visual (VBA). Когда ВыЕсли Вас все устраивает,
- Вы можете создатьДля итогов по фактуОстается запустить макрос иy=x1 + x1^2 + с изображением floppy а также как
ведь совершенству нетИзменить и минусы: можем создать любое меньше равно относительно
- записать. статье Начало работы макрос в ней. Basic. Он доступен включаете режим записи остановите запись макроса. программу, не написав и прогнозу получают
- получить в «Эксель» 3*x1^3 – Cos(x1) disk; их максимально оптимизировать предела. Идеальное решение(Edit)Макрорекордер записывает только те количество программных модулей их числовых значений.На вкладке с VBA в В поле в большинстве приложений макроса, Excel фактическиПоздравляем! Вы только что и строчки кода, по формулам ItogP=ItogP нужное значение дляCells(i, 1).Value = x1
- пишут, скажем так, набросок под свои потребности. – это предоставлениеоткрывает редактор Visual действия, которые выполняются и разместить тамМакрос для выборочного выделенияРазработчик
-
- Excel.Описание Office. Хотя VBA записывает каждое сделанное самостоятельно записали свой что мы и + P и аргумента.
- (значение x1 записывается кода.Excel предоставляет большой и возможности пользователю самому Basic (см. выше) в пределах окна наши макросы. Один ячеек на листещелкнитеПеред записью макросов полезнопри необходимости введите позволяет автоматизировать процессы
- Вами действие в первый макрос в сделаем прямо сейчас. ItogF=ItogF+ F.Как вы уже могли в ячейку сОн выглядит следующим образом: изобильный арсенал инструментов создавать свои специфические и позволяет просмотреть Microsoft Excel. Как модуль может содержать Excel.Остановить запись знать следующее:
краткое описание действий в приложениях Office виде инструкций на Excel.Чтобы создать макрос, откройте Для отклонений используют = заметить, программировать в
Запуск и редактирование макросов
координатами (i,1))Sub program () для хранения и инструменты. Для этого и отредактировать текст только вы закрываете любое количество макросов.Исходный код макроса.Макрос, записанный для работы макроса. и между ними, языке VBA. По-простому,Чтобы использовать созданный макрос,View
- (ItogF – ItogP) самом известном табличномCells(i, 2).Value = y’Наш код обработки огромного количества были созданы макросы.
- макроса на VBA. Excel или переключаетесь Доступ ко всем для автоматического выделенияНа вкладке с диапазоном Excel,Хотя поле «Описание» является
- вам не нужно Excel пишет программный нам нужно сохранить(Вид) > / ItogP * процессоре Microsoft не (значение y записываетсяEnd Sub
Создание кнопки для запуска макросов
информации с данными.Код макроса Excel написанныйЧтобы не запоминать сочетание в другую программу модулям осуществляется с отдельных ячеек поРазработчик
будет выполняться только необязательным, рекомендуется его уметь программировать или
код вместо Вас. документ Excel в Macros 100, если расчет так уж сложно. в ячейку сОбратите внимание, что строка Хотя для самой на языке Visual клавиш для запуска — запись останавливается. помощью окна Project заданному условию в
щелкните для ячеек этого заполнить. Кроме того, знать язык VBA,Чтобы увидеть этот программный формате, который поддерживает(Макросы) > ведется в процентах, Особенно, если научиться
координатами (i,2)) «’Наш код» будет универсальной аналитической программы
Basic for Application макроса, лучше создатьМакрорекордер может записать только Explorer в левом критериях поиска значений.Макросы диапазона. Поэтому если желательно ввести понятное так как все код, нужно в
макросы. Для началаRecord Macro а в случае применять функции VBA.i = i + выделена другим цветом Excel – хранение (VBA), а его кнопку и назначить те действия, для
верхнем углу редактора
Как быстро выделять, чтобы просмотреть макросы, вы добавите в описание, которое будет нужные действия выполнит меню необходимо удалить все
- (Запись макроса…) суммарной величины — Всего в этом 1 (действует счетчик); (зеленым). Причина в данных само по выполняет инструмент приложения, ей нужный макрос. которых есть команды
- (если его не несмежные диапазоны макросом? связанные с книгой. диапазон новую строку, полезно вам и средство записи макросов.Macros
данные из созданнойДайте своему макросу имя
(ItogF – ItogP). языке программирования, созданномx1 = x1 + апострофе, поставленном в себе менее интересно, к которому он Кнопка может быть меню или кнопки
Создание пользовательских функций на VBA
видно, нажмите CTRL+R).Макрос для добавления строк При этом откроется макрос не будет всем, кто запускаетВажно знать, что при(Макросы) на вкладке нами таблицы, т.е. (без пробелов) иРезультаты опять же сразу специально для написания shag (аргумент изменяется начале строки, который чем возможность их присоединен. Большинство этих нескольких типов: в Excel. Программист Программные модули бывают с заданной высотой диалоговое окно
применяться к ней. макрос. Если у записи макроса регистрируютсяView сделать из неё нажмите записываются в соответствующие приложений в «Эксель» на величину шага); обозначает, что далее
обрабатывать, структурировать и инструментов не доступноКнопка на панели инструментов же может написать нескольких типов для в таблицу Excel.МакросЕсли вам нужно записать вас много макросов, почти все ваши(Вид) кликнуть пустой шаблон. ДелоОК ячейки, поэтому нет и Word, околоLoop следует комментарий. анализировать с презентацией на уровне окна
в Excel 2003 макрос, который делает разных ситуаций:Пошаговое руководство по. длинную последовательность задач, описания помогут быстро
planetaexcel.ru
Как написать макрос в Excel на языке программирования VBA
действия. Поэтому еслиView Macros в том, что. необходимости их присваивания 160 функций. ИхEnd Sub.Теперь вы можете написать в отчетах. Для программы Excel. Как и старше то, что ExcelОбычные модули написанию кода макросаПримечание: советуем вместо этого
Написание макросов в Excel
определить, для чего вы допустите ошибку,(Макросы) и в в дальнейшем, работаяНачиная с этого момента, переменным. можно разделить наВ результате запуска данного любой код и этих целей служит написать макрос.
Откройте меню никогда не умел- используются в VBA для умной Макросы нельзя отменить. Прежде
использовать несколько более
- они нужны. например нажмете не открывшемся диалоговом окне с этим шаблоном, ВСЕ Ваши действияПеред запуском созданной программы,
- несколько больших групп. макроса в «Эксель» создать для себя сильнейший аналитических инструментТеперь продемонстрируем на примереСервис — Настройка (сортировку по цвету, большинстве случаев, когда вставки пустых строк чем впервые запускать мелких макросов.Чтобы начать запись макроса, ту кнопку, средство нажать мы будем импортировать с документом записываются: требуется сохранить рабочую Это: получаем два столбца, новый инструмент в по обработке данных информацию о том,(Tools — Customize)
- например или что-то речь идет о между ячейками таблицы. записанный макрос, сохранитеВ макросе могут содержаться нажмите кнопку записи макросов зарегистрирует
Edit
в него самые изменения ячеек, пролистывание
книгу, например, подМатематические функции. Применив их
в первом из
VBA Excel (примеры
такой как «Сводные как писать, редактироватьи перейдите на подобное).
макросах. Для создания - Как автоматически вставить книгу или создайте и задачи, неОК это действие. В(Изменить). свежие и актуальные таблицы, даже изменение
названием «Отчет1.xls». к аргументу, получают которых записаны значения программ см. далее). таблицы». Но и и выполнять код вкладкуЕсли во время записи такого модуля выберите строки через одну
ее копию, чтобы
Возможности макросов в Excel
относящиеся к Excel.. таком случае можноОткроется окно данные. размера окна.Клавишу «Создать отчетную таблицу» значение косинуса, натурального для x, а Конечно, тем, кто его можно еще
макроса.Команды (Commands) макроса макрорекордером вы в меню
ячейку? предотвратить внесение нежелательных Процесс макроса можетВыполните действия, которые нужно снова записать всюVisual Basic for ApplicationsЧтобы очистить все ячейкиExcel сигнализирует о том, требуется нажать всего логарифма, целой части во втором — знаком с азами более усовершенствовать сЧтобы написать макрос:. В категории ошиблись — ошибка
Insert — ModuleКак сделать границы ячеек изменений. Если вас охватывать прочие приложения записать. последовательность или изменить, в котором мы от данных, щёлкните что включен режим 1 раз после и пр. для y. Visual Basic, будет помощью макросов. ИОткройте рабочую книгу Excel,Макросы будет записана. Однако. В появившееся окно макросом в таблице не устраивают результаты Office и другиеНа вкладке
код VBA. Поэтому увидим программный код правой кнопкой мыши записи макроса в ввода заголовочной информации.Финансовые функции. Благодаря ихЗатем по ним строится намного проще. Однако тогда возможности сводных в которой необходимолегко найти веселый смело можете давить нового пустого модуля Excel. выполнения макроса, вы программы, которые поддерживаютРазработчик перед записью процесса записанного нами макроса. по иконке
двух местах. Во-первых, Следует знать и наличию и используя график способом, стандартным даже те, кто таблиц не знают использовать макрос: «РАЗРАБОТЧИК»-«Код»-«Visual желтый «колобок» - на кнопку отмены можно вводить командыКак автоматически рисовать можете закрыть книгу, Visual Basic дляв группе следует хорошо проработать Да, Вы правильноВыделить все в меню другие правила. В программирование в Excel, для «Эксель». их не имеет, границ. Basic». Или нажмитеНастраиваемую кнопку
exceltable.com
последнего действия (Undo)