Макрос в excel таблица в ячейках

Создание таблицы с помощью кода VBA Excel. Создание умной и обычной пользовательской таблицы. Указание стиля умной таблицы, добавление строки итогов. Примеры.

Создание и удаление умной таблицы

Создание умной таблицы

Создается умная таблица Excel с помощью следующего кода:

ActiveSheet.ListObjects.Add(xlSrcRange, Range(«$A$1:$L$15»), , xlNo).Name _

= «МояТаблица1»

В данном примере:

ActiveSheet — лист, на котором создается таблица, может быть любой лист рабочей книги Excel.

Range(«$A$1:$L$15») — диапазон, который преобразуется в таблицу. Можно использовать и такую форму: Range(Cells(1, 1), Cells(15, 12)), где индексы строк и столбцов можно заменить переменными.

xlNo — указывает, что первая строка выбранного диапазона не содержит заголовки столбцов (граф) будущей таблицы, и их необходимо добавить. В этом случае будет добавлена дополнительная строка с наименованиями столбцов по умолчанию: Столбец1, Столбец2, Столбец3 и т.д., которые в дальнейшем можно переименовать (количество строк в таблице, включая строку заголовков, получится на одну больше, чем в указанном диапазоне). Если в диапазоне уже содержатся заголовки столбцов будущей таблицы, то следует указать вместо xlNo значение xlYes. В этом случае первая строка указанного диапазона будет преобразована в строку заголовков, а если она будет не заполнена, то добавятся названия столбцов по умолчанию: Столбец1, Столбец2, Столбец3 и т.д. (количество строк в таблице, включая строку заголовков, будет то же, что и в указанном диапазоне).

МояТаблица1 — имя, присваиваемое создаваемой таблице. Имя должно быть без пробелов: при указании в коде VBA названия таблицы с пробелами, во время его выполнения Excel заменит пробелы знаками подчеркивания (по крайней мере, так происходит в Excel 2016).

Таблица будет создана со стилем по умолчанию (TableStyleMedium2 в Excel 2016).

Стиль умной таблицы

Присвоение стиля таблице (изменение стиля) осуществляется с помощью свойства TableStyle объекта ListObjects:

ActiveSheet.ListObjects(«МояТаблица1»).TableStyle = «TableStyleMedium15»

Свойство TableStyle может принимать следующие значения:

  • TableStyleLight (светлый) с индексом от 1 до 21 (в Excel 2016);
  • TableStyleMedium (средний) с индексом от 1 до 28 (в Excel 2016);
  • TableStyleDark (темный) с индексом от 1 до 11 (в Excel 2016).

Например, TableStyleLight5, TableStyleMedium24, TableStyleDark8.

Чтобы отменить стиль таблицы в коде VBA, необходимо свойству TableStyle присвоить пустую строку:

ActiveSheet.ListObjects(«МояТаблица1»).TableStyle = «»

Этому коду соответствует выбор в разделе «Конструктор» на ленте инструментов Excel самого первого значка стилей в разделе «Светлый».

Добавление строки итогов

Строка итогов умной таблицы добавляется следующим образом:

ActiveSheet.ListObjects(«МояТаблица1»).ShowTotals = True

Удаляется строка итогов умной таблицы так:

ActiveSheet.ListObjects(«МояТаблица1»).ShowTotals = False

Удаление умной таблицы

Удалить умную таблицу очень просто:

ActiveSheet.ListObjects(«МояТаблица1»).Delete

Создание пользовательской таблицы

Мне не приходилось на практике с помощью VBA Excel создавать умные таблицы, в отличие от пользовательских таблиц, которые использовались для улучшения восприятия различных отчетов или сгенерированных документов.

Для создания такой таблицы необходимо:

  • определить диапазон, если он заранее не известен (иногда для этого может понадобиться определить номер последней заполненной строки);
  • добавить границы ячеек;
  • отформатировать строку заголовков;
  • добавить строку итогов, если она необходима.

Подробнее о создании пользовательской таблицы в Примере 2.

Примеры создания таблиц

Задание для примеров

Набор данных для создания таблиц

Набор данных для примеров создания таблиц

Допустим, на лист Excel переданы данные для заполнения табличной части товарного чека со следующими условиями:

  • в табличной части 5 граф: № п/п, Наименование, Количество, Цена и Сумма;
  • сколько наименований добавил пользователь неизвестно.

Нам необходимо:

  • определить количество строк;
  • добавить строку заголовков;
  • отобразить сетку (границы ячеек);
  • добавить строку итогов.

Таблицу будем оформлять двумя способами: путем создания умной и пользовательской таблиц.

Пример 1 — умная таблица

Упаковываем набор данных из задания в умную таблицу:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

Sub test1()

‘Объявляем переменную для присвоения ей количества строк

Dim a As Long

‘Определяем количество строк

a = Cells(1, 1).CurrentRegion.Rows.Count

‘Создаем умную таблицу с добавлением строки заголовков

ActiveSheet.ListObjects.Add(xlSrcRange, Range(Cells(1, 1),Cells(a, 5)), , xlNo).Name _

= «ТоварныйЧек1»

‘Изменяем названия граф

Cells(1, 1) = «№ п/п»

Cells(1, 2) = «Наименование»

Cells(1, 3) = «Количество»

Cells(1, 4) = «Цена»

Cells(1, 5) = «Сумма»

‘Добавляем строку итогов

ActiveSheet.ListObjects(«ТоварныйЧек1»).ShowTotals = True

‘Стиль оставляем по умолчанию

End Sub

Результат выполнения кода Примера 1 получится такой:

Умная таблица из заданного набора данных

Умная таблица из заданного набора данных

Пример 2 — «обычная» таблица

Упаковываем набор данных из задания в пользовательскую таблицу:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

Sub test2()

‘Объявляем переменную для присвоения ей количества строк

Dim a As Long

‘Определяем количество строк

a = Cells(1, 1).CurrentRegion.Rows.Count

‘Добавляем строку заголовков

Cells(1, 1).EntireRow.Insert

‘Указываем названия граф

Cells(1, 1) = «№ п/п»

Cells(1, 2) = «Наименование»

Cells(1, 3) = «Количество»

Cells(1, 4) = «Цена»

Cells(1, 5) = «Сумма»

‘Добавляем сетку

Range(Cells(1, 1), Cells(a + 1, 5)).Borders.LineStyle = True

‘Добавляем строку итогов

Cells(a + 2, 4) = «Итого:»

With Cells(a + 2, 5)

.FormulaR1C1 = «=SUM(R[-« & a & «]C:R[-1]C)»

.Borders.LineStyle = True

.Font.Bold = True

End With

‘Выделяем заголовки жирным шрифтом и

‘применяем автоподстройку ширины столбцов

With Range(Cells(1, 1), Cells(1, 5))

.Font.Bold = True

.EntireColumn.AutoFit

End With

End Sub

Результат выполнения кода Примера 2 получится такой:

Пользовательская таблица из заданного набора данных

Пользовательская таблица из заданного набора данных

Если решите поэкспериментировать с моим кодом, добавьте любые данные в пять колонок на активном листе Excel, количество строк может быть любым, в пятой графе должны быть числа.


О работе с умной таблицей (обращение к ячейкам, строкам и столбцам; добавление и удаление строк и столбцов) рассказано в статье VBA Excel. Работа с умной таблицей


Всё о работе с ячейками в Excel-VBA: обращение, перебор, удаление, вставка, скрытие, смена имени.

Содержание:

Table of Contents:

  • Что такое ячейка Excel?
  • Способы обращения к ячейкам
    • Выбор и активация
    • Получение и изменение значений ячеек
      • Ячейки открытой книги
      • Ячейки закрытой книги 
    • Перебор ячеек
    • Перебор в произвольном диапазоне
  • Свойства и методы ячеек
    • Имя ячейки
    • Адрес ячейки
    • Размеры ячейки
  • Запуск макроса активацией ячейки

2 нюанса:

  1. Я почти везде стараюсь использовать ThisWorkbook (а не, например, ActiveWorkbook) для обращения к текущей книге, в которой написан этот код (считаю это наиболее безопасным для новичков способом обращения к книгам, чтобы случайно не внести изменения в другие книги). Для экспериментов можете вставлять этот код в модули, коды книги, либо листа, и он будет работать только в пределах этой книги. 
  2. Я использую английский эксель и у меня по стандарту листы называются Sheet1, Sheet2 и т.д. Если вы работаете в русском экселе, то замените Thisworkbook.Sheets(«Sheet1») на Thisworkbook.Sheets(«Лист1»). Если этого не сделать, то вы получите ошибку в связи с тем, что пытаетесь обратиться к несуществующему объекту. Можно также заменить на Thisworkbook.Sheets(1), но это менее безопасно.

Что такое ячейка Excel?

В большинстве мест пишут: «элемент, образованный пересечением столбца и строки». Это определение полезно для людей, которые не знакомы с понятием «таблица». Для того, чтобы понять чем на самом деле является ячейка Excel, необходимо заглянуть в объектную модель Excel. При этом определения объектов «ряд», «столбец» и «ячейка» будут отличаться в зависимости от того, как мы работаем с файлом.

Объекты в Excel-VBA. Пока мы работаем в Excel без углубления в VBA определение ячейки как «пересечения» строк и столбцов нам вполне хватает, но если мы решаем как-то автоматизировать процесс в VBA, то о нём лучше забыть и просто воспринимать лист как «мешок» ячеек, с каждой из которых VBA позволяет работать как минимум тремя способами:

  1. по цифровым координатам (ряд, столбец),
  2. по адресам формата А1, B2 и т.д. (сценарий целесообразности данного способа обращения в VBA мне сложно представить)
  3. по уникальному имени (во втором и третьем вариантах мы будем иметь дело не совсем с ячейкой, а с объектом 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. На это есть две причины:

  1. Это лишь имитация действий пользователя, которая замедляет выполнение программы. Работать с объектами книги можно напрямую без использования методов Select и Activate.
  2. Это усложняет код и может приводить к неожиданным последствиям. Каждый раз перед использованием 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

Перебор ячеек

Перебор в произвольном диапазоне

Скачать файл со всеми примерами

Пройтись по всем ячейкам в нужном диапазоне можно разными способами. Основные:

  1. Цикл 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 по порядку по строкам слева направо и по столбцам — сверху вниз. Данный способ можно использовать для действий, в который вам не важны номера ячеек (закрашивание, изменение форматирования, пересчёт чего-то и т.д.).

  2. Ту же задачу можно решить с помощью двух вложенных циклов — внешний будет перебирать ряды, а вложенный — ячейки в рядах. Этот способ я использую чаще всего, потому что он позволяет получить больше контроля над исполнением: на каждой итерации цикла нам доступны координаты ячеек. Для перебора всех ячеек на листе этим методом потребуется найти последнюю заполненную ячейку. Пример кода:
    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​
  3. Если нужно перебрать все ячейки в выделенном диапазоне на активном листе, то код будет выглядеть так:
    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​

    Данный метод подходит для интерактивных макросов, которые выполняют действия над выбранными пользователем областями.

  4. Перебор ячеек в ряду
    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
  5. Перебор ячеек в столбце
    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

Содержание

  1. Что такое макрос?
  2. Запись макроса в Excel
  3. Первая программа на VBA Excel
  4. Запуск редактора Visual Basic
  5. Альтернативный вариант открытия файла
  6. Создание «умной» таблицы
  7. Стиль «умной» таблицы
  8. Добавление строки итогов
  9. Отображение вкладки “Разработчик” в ленте меню
  10. Знакомство с редактором VBA
  11. Создание сводных таблиц макросом
  12. Примеры макросов для автоматизации работы
  13. Окна редактора Visual Basic

Что такое макрос?

Для начала немного о терминологии.

Макрос – это код, написанный на встроенном в Excel языке VBA (Visual Basic for Application). Макросы могут создаваться как вручную, так и записываться автоматически с помощью так называемого макрорекодера.

Макрорекодер – это инструмент в Excel, который пошагово записывает все что вы выполняете в Excel и преобразует это в код на языке VBA. Макрорекодер создает очень подробный код (как мы увидим позже), который вы сможете при необходимости отредактировать в дальнейшем.

Записанный макрос можно будет запускать неограниченное количество раз и Excel повторит все записанные шаги. Это означает, что даже если вы ничего не знаете о VBA, вы можете автоматизировать некоторые задачи, просто записав свои шаги и затем повторно использовать их позже.

Теперь давайте погрузимся и посмотрим, как записать макрос в Excel.

Теперь давайте запишем очень простой макрос, который выбирает ячейку и вводит в нее текст, например “Excel”.

Вот шаги для записи такого макроса:

  1. Перейдите на вкладку “Разработчик”.
  2. В группе “Код” нажмите кнопку “Запись макроса”. Откроется одноименное диалоговое окно.
  3. В диалоговом окне “Запись макроса” введите имя для своего макроса, например “ВводТекста”. Есть несколько условий именования, которые необходимо соблюдать при назначении макроса. Например, вы не можете использовать пробелы между ними. Обычно я предпочитаю сохранять имена макросов как одно слово, с разными частями с заглавным первым алфавитом. Вы также можете использовать подчеркивание для разделения двух слов – например, “Ввод_текста”.
  4. Если вы хотите, то можете задать сочетание клавиш. В этом случае мы будем использовать ярлык Ctrl + Shift + N. Помните, что сочетание, которое вы указываете, будет отменять любые существующие горячие клавиши в вашей книге. Например, если вы назначили сочетание Ctrl + S, вы не сможете использовать это для сохранения рабочей книги (вместо этого, каждый раз, когда вы его используете, он выполняет макрос).
  5. В поле “Сохранить в” убедитесь, что выбрана опция “Эта книга”. Этот шаг гарантирует, что макрос является частью рабочей книги. Он будет там, когда вы сохраните его и снова откроете, или даже если вы поделитесь файлом с кем-то.
  6. Введите описание при необходимости. Обычно я этого не делаю, но если у вас много макросов, лучше указать, чтобы в будущем не забыть что делает макрос.
  7. Нажмите “ОК”. Как только вы нажмете OK, Excel начнет записывать ваши действия. Вы можете увидеть кнопку “Остановить запись” на вкладке “Разработчик”, которая указывает, что выполняется запить макроса.
  8. Выберите ячейку A2.
  9. Введите текст “Excel” (или вы можете использовать свое имя).
  10. Нажмите клавишу Enter. Вы попадете на ячейку A3.
  11. Нажмите кнопку “Остановить запись” на вкладке “Разработчик”.

Поздравляем! Вы только что записали свой первый макрос в Excel. Хотя макрос не делает ничего полезного, но он поможет нам понять как работает макрорекордер в Excel.

Теперь давайте рассмотрим код который записал макрорекодер. Выполните следующие действия, чтобы открыть редактор кода:

  1. Удалите текст в ячейке A2. Это нужно, чтобы проверить будет ли макрос вставлять текст в ячейку A2 или нет.
  2. Выберите любую ячейку – кроме A2. Это нужно проверить, выбирает ли макрос ячейку A2 или нет.
  3. Перейдите на вкладку “Разработчик”.
  4. В группе “Код” нажмите кнопку “Макросы”.
  5. В диалоговом окне “Макрос” щелкните макрос “ВводТекста”.
  6. Нажмите кнопку “Выполнить”.

Вы увидите, что как только вы нажмете кнопку “Выполнить”, текст “Excel” будет вставлен в ячейку A2 и выбрана ячейка A3. Это происходит за миллисекунды. Но на самом деле макрос последовательно выполнил записанные действия.

Примечание. Вы также можете запустить макрос с помощью сочетания клавиш Ctrl + Shift + N (удерживайте клавиши Ctrl и Shift, а затем нажмите клавишу N). Это тот же самый ярлык, который мы назначили макросу при его записи.

Первая программа на VBA Excel

Добавляем на стандартный модуль шаблон процедуры – строки ее начала и завершения, между которыми мы и будем писать свою первую программу (процедуру, подпрограмму).

  1. Откройте стандартный модуль двойным кликом по его ссылке в проводнике. Поместите в него курсор и нажмите кнопку «Procedure…» во вкладке «Insert» главного меню. Та же ссылка будет доступна при нажатии на вторую кнопку после значка Excel на панели инструментов.

В результате откроется окно добавления шаблона процедуры (Sub).

  1. Наберите в поле «Name» имя процедуры: «Primer1», или скопируйте его отсюда и вставьте в поле «Name». Нажмите кнопку «OK», чтобы добавить в модуль первую и последнюю строки процедуры.

Имя процедуры может быть написано как на латинице, так и на кириллице, может содержать цифры и знак подчеркивания. Оно обязательно должно начинаться с буквы и не содержать пробелы, вместо которых следует использовать знак подчеркивания.

  1. Вставьте внутрь шаблона процедуры следующую строку: MsgBox "Привет".

Функция MsgBox выводит информационное сообщение с указанным текстом. В нашем примере – это «Привет».

  1. Проверьте, что курсор находится внутри процедуры, и запустите ее, нажав клавишу «F5». А также, запустить процедуру на выполнение можно, нажав на треугольник (на изображении под пунктом меню «Debug») или на кнопку «Run Sub/UserForm» во вкладке «Run» главного меню редактора VBA Excel.


Если вы увидели такое сообщение, как на изображении, то, поздравляю – вы написали свою первую программу!

Запуск редактора Visual Basic

Простейший способ запустить редактор Visual Basic в Excel – нажать комбинацию клавиш Alt+F11 (то есть нажать клавишу Alt и, удерживая её, нажать клавишу F11). После этого откроется окно редактора Visual Basic, как показано на картинке ниже. Имейте ввиду, что окно Excel остается открытым и находится позади окна редактора.

Альтернативный вариант открытия файла

 Set objExcel = New Excel.Application Set wb = objExcel.Workbooks wb.Open fname, local:=True Set ws = wb.Item(1).ActiveSheet 

При открытии файла можно использовать доп.параметры (приведу некоторые):

UpdateLinks – обновлять или нет внешние ссылки при открытии файла;
ReadOnly – открытие в режиме только для чтения;
Format – используемый при открытии разделитель (1 – символ tab, 2 – запятые, 3 – пробелы, 4 – точка с запятой, 5 – без разделителя, 6 – пользовательский разделитель, заданный в Delimiter);
Delimiter – пользовательский разделитель (в случае, если Format = 6);
Origin – тип операционной системы (xlMacintosh, xlWindows или xlMSDOS);
Local – использование в Excel языка такого же, как в открываемом файле.

Теперь можно выполнять какие-то действия с открытым файлом, просто обращаясь через wb и ws.

 ws.Cells(1, 1).Value = "Test" ws.Cells(1, 1).Font.Size = 18 ' Поменять размер шрифта ws.Cells(1, 1).HorizontalAlignment = xlCenter ' 

Создание «умной» таблицы

Создается «умная» таблица Excel с помощью следующего кода:

ActiveSheet.ListObjects.Add(xlSrcRange, Range(“$A$1:$L$15”), , xlNo).Name _

= “МояТаблица1”

В данном примере:

ActiveSheet – лист, на котором создается таблица, может быть любой лист рабочей книги Excel.

Range(“$A$1:$L$15”) – диапазон, который преобразуется в таблицу. Можно использовать и такую форму: Range(Cells(1, 1), Cells(15, 12)), где индексы строк и столбцов можно заменить переменными.

xlNo – указывает, что первая строка выбранного диапазона не содержит заголовки столбцов (граф) будущей таблицы, и их необходимо добавить. В этом случае будет добавлена дополнительная строка с наименованиями столбцов по умолчанию: Столбец1, Столбец2, Столбец3 и т.д., которые в дальнейшем можно переименовать (количество строк в таблице, включая строку заголовков, получится на одну больше, чем в указанном диапазоне). Если в диапазоне уже содержатся заголовки столбцов будущей таблицы, то следует указать вместо xlNo значение xlYes. В этом случае первая строка указанного диапазона будет преобразована в строку заголовков, а если она будет не заполнена, то добавятся названия столбцов по умолчанию: Столбец1, Столбец2, Столбец3 и т.д. (количество строк в таблице, включая строку заголовков, будет то же, что и в указанном диапазоне).

МояТаблица1 – имя, присваиваемое создаваемой таблице. Имя должно быть без пробелов: при указании в коде VBA названия таблицы с пробелами, во время его выполнения Excel заменит пробелы знаками подчеркивания (по крайней мере, так происходит в Excel 2016).

Таблица будет создана со стилем по умолчанию (TableStyleMedium2 в Excel 2016).

Стиль «умной» таблицы

Присвоение стиля таблице (изменение стиля) осуществляется с помощью свойства TableStyle объекта ListObjects:

ActiveSheet.ListObjects(“МояТаблица1”).TableStyle = “TableStyleMedium15”

Свойство TableStyle может принимать следующие значения:

  • TableStyleLight (светлый) с индексом от 1 до 21 (в Excel 2016);
  • TableStyleMedium (средний) с индексом от 1 до 28 (в Excel 2016);
  • TableStyleDark (темный) с индексом от 1 до 11 (в Excel 2016).

Например, TableStyleLight5, TableStyleMedium24, TableStyleDark8.

Чтобы отменить стиль таблицы в коде VBA, необходимо свойству TableStyle присвоить пустую строку:

ActiveSheet.ListObjects(“МояТаблица1”).TableStyle = “”

Этому коду соответствует выбор в разделе «Конструктор» на ленте инструментов Excel самого первого значка стилей в разделе «Светлый».

Добавление строки итогов

Строка итогов «умной» таблицы добавляется следующим образом:

ActiveSheet.ListObjects(“МояТаблица1”).ShowTotals = True

Удаляется строка итогов «умной» таблицы так:

ActiveSheet.ListObjects(“МояТаблица1”).ShowTotals = False

Отображение вкладки “Разработчик” в ленте меню

Перед тем как записывать макрос, нужно добавить на ленту меню Excel вкладку “Разработчик”. Для этого выполните следующие шаги:

  1. Щелкните правой кнопкой мыши по любой из существующих вкладок на ленте и нажмите «Настроить ленту». Он откроет диалоговое окно «Параметры Excel».
  2. В диалоговом окне «Параметры Excel» у вас будут параметры «Настроить ленту». Справа на панели «Основные вкладки» установите флажок «Разработчик».
  3. Нажмите «ОК».

В результате на ленте меню появится вкладка “Разработчик”

Знакомство с редактором VBA

  1. Создайте новую книгу Excel и сохраните ее как книгу с поддержкой макросов с расширением .xlsm. В старых версиях Excel по 2003 год – как обычную книгу с расширением .xls.
  2. Нажмите сочетание клавиш «левая_клавиша_Alt+F11», которое откроет редактор VBA. С правой клавишей Alt такой фокус не пройдет. Также, в редактор VBA можно перейти по ссылке «Visual Basic» из панели инструментов «Разработчик» на ленте быстрого доступа. Если вкладки «Разработчик» на ленте нет, ее следует добавить в настройках параметров Excel.

В левой части редактора VBA расположен проводник проекта, в котором отображены все открытые книги Excel. Верхней строки, как на изображении, у вас скорее всего не будет, так как это – личная книга макросов. Справа расположен модуль, в который записываются процедуры (подпрограммы) с кодом VBA. На изображении открыт модуль листа, мы же далее создадим стандартный программный модуль.

  1. Нажмите кнопку «Module» во вкладке «Insert» главного меню. То же подменю откроется при нажатии на вторую кнопку после значка Excel на панели инструментов.

После нажатия кнопки «Module» вы увидите ссылку на него, появившуюся в проводнике слева.

Создание сводных таблиц макросом

Источник информации для сводных таблиц всегда один и тот же – база данных. Набор данных образующих базу для обработки в Excel может быть не только на листах рабочей книги, а также и во внешних источниках.

Для описания способа создания сводных таблиц средствами процедур VBA будет использоваться таблица, которая содержит данные по месяцам о оборотах семи магазинов фирмы за последние несколько лет деятельности.

Тестовая база для примера состоит из сгруппированных данных в 21 строке. Благодаря использованию сводных таблиц можно в читабельный вид презентовать изменение данных и извлечь соответственные результаты анализа.

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

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

В данном примере создание сводной таблицы VBA-макросом будет достаточно простым. Простота решения будет достигнута за счет симуляции использования подобных параметров и действий, которые предоставляет к распоряжению мастер сводных таблиц в Excel. Используя экземпляр объекта PivotCaches запишем настройки своей сводной таблицы присвоив ей определенное имя. Это позволит потом непосредственно ссылаться на сводную таблицу в любой части кода. Для создания сводной таблицы используя макрос будем использовать метод PivotTableWizard. На этом же шаге будем использовать возможности объекта PivotFields, в котором определим структуру сводной таблицы с учетом исходных данных источника.

Написание кода макросов в Excel всегда начинается с открытия VBA-редактора (ALT+F11): «РАЗРАБОТЧИК»-«Код»-«Visual Basic».

Затем создадим модуль где будет храниться исходный код. Для этого выберите инструмент в редакторе VBA: «Insert»-«Module». В появившемся окне модуля введите следующий VBA-код макроса:

SubCreateTableM()
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="Лист1!A1:D21").CreatePivotTable TableDestination:="", TableName:="ТаблицаМ"
WithActiveSheet
.Name ="Анализ"
.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
End With
WithActiveSheet.PivotTables("ТаблицаМ")
.SmallGrid =True
.PivotFields("Оборот").Orientation = xlDataField
.PivotFields("Год").Orientation = xlPageField
.PivotFields("Месяц").Orientation = xlRowField
.PivotFields("Магазины").Orientation = xlColumnField
End With
End Sub

Теперь достаточно лишь запустить макрос выбрав инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«CreateTableM»-«Выполнить»:

В результате будет автоматически сгенерированная сводная таблица с помощью макроса.

Примеры макросов для автоматизации работы

Как выделить повторяющиеся значения в Excel разными цветами?.
Пример удобного макроса для автоматической подсветки добирающихся значений ячеек разными цветами. Как выделить разным цветом дубликаты ячеек?

Макрос для поиска ближайшего значения заданному на всех листах книги Excel.
Готовое решение для поиска на всех листах рабочей книги как точного, так и максимально приближенного исходного значения. VBA код макрос для нахождения и получения числа с любого листа книги.

Макрос для слияния данных при серийной печати рассылок в Excel.
Альтернатива инструменту слияния в Word для печати рассылок прямо из Excel. Исходный код макроса, который выполняет слияние данных для серийной печати рассылок.

Макросы для фильтра сводной таблицы в Excel.
Как автоматизировать фильтр в сводных таблицах с помощью макроса? Исходные коды макросов для фильтрации и скрытия столбцов в сводной таблице.

Макрос позволяет рассчитать процент в сводной таблице Excel.
Как быстро преобразовать значения сводной таблицы на доли в процентном соотношении к общим итогам по строкам и по столбцам? Исходные коды макросов для работы с процентами.

Макрос для настройки полей и форматирования сводной таблицы.
Управление полями сводной таблицы с помощью макроса. Исходный код VBA-макроса для настройки и изменения структуры в сводных таблицах.

Макрос для создания сводной таблицы в Excel.
Как автоматически сгенерировать сводную таблицу с помощью макроса? Исходный код VBA для создания и настройки сводных таблиц на основе исходных данных.

Макросы для изменения формата ячеек в таблице Excel.
Как форматировать ячейки таблицы макросом? Изменение цвета шрифта, заливки и линий границ, выравнивание. Автоматическая настройка ширины столбцов и высоты строк по содержимому с помощью VBA-макроса.

VBA макрос для поиска скрытых строк и столбцов на листе Excel.
Поиск всех скрытых строк и столбцов на рабочем листе с помощью VBA-макроса. Исходные коды макросов для получения сводной информации о скрытых строках и столбцах рабочего листа.

Макрос для копирования и переименования листов Excel.
Как одновременно копировать и переименовывать большое количество листов одним кликом мышкой? Исходный код макроса, который умеет одновременно скопировать и переименовать любое количество листов.

Окна редактора Visual Basic

В процессе работы в редакторе Visual Basic в Excel могут быть открыты различные окна. Управление окнами осуществляется в меню View, которое находится в верхней части окна редактора VBA.

Источники

  • https://micro-solution.ru/excel/vba/first-macros
  • https://vremya-ne-zhdet.ru/vba-excel/nachinayem-programmirovat-s-nulya/
  • https://office-guru.ru/excel/redaktor-visual-basic-v-excel-451.html
  • https://codernotes.ru/articles/vba/rabota-s-excel-fajlom-iz-vba.html
  • https://vremya-ne-zhdet.ru/vba-excel/sozdaniye-tablitsy/
  • https://exceltable.com/vba-macros/makros-svodnoy-tablicy
  • https://exceltable.com/vba-macros/

В данном примере описаны макросы для автоматического форматирования или спроса формата для ячеек таблиц Excel средствами VBA.

VBA-макрос: заливка, шрифт, линии границ, ширина столбцов и высота строк

В процессе запыления данных сотрудниками отдела на некоторых листах были изменены форматы ячеек:

запыления планов работ.

Необходимо сбросить форматирование ячеек и сделать так чтобы на всех таблицах планов выполнения работ были одинаковые форматы отображения данных. Формат ячеек для исходной таблицы должен быть закреплен за шаблоном, чтобы можно было сделать сброс и применять заданный стиль оформления в дальнейшем.

Чтобы выполнять такие задачи вручную можно попытаться облегчить процесс настройки множества опций форматирования для многих диапазонов ячеек на разных листах и рабочих книгах. Плюс к о всему можно ошибиться и применить несколько другие настройки форматирования.

Макросы Excel прекрасно справляются с форматированием ячеек на рабочих листах. Кроме того, делают это быстро и в полностью автоматическом режиме. Воспользуемся этими преимуществами и для решения данной задачи напишем свой код VBA-макроса. Он поможет нам быстро и безопасно сбрасывать форматы на исходный предварительно заданный в шаблоне главной таблицы.

Чтобы написать свой код макроса откройте специальный VBA-редактор в Excel: «РАЗРАБОТЧИК»-«Код»-«Visual Basic» или нажмите комбинацию клавиш ALT+F11:

Код Visual Basic.

В редакторе создайте новый модуль выбрав инструмент «Insert»-«Module» и введите в него такой VBA-код макроса:

Sub SbrosFormat()
If TypeName(Selection) <> "Range" Then Exit Sub
With Selection
.HorizontalAlignment = xlVAlignCenter
.VerticalAlignment = xlVAlignCenter
.WrapText = True
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
.Font.ColorIndex = xlColorIndexAutomatic
.Interior.ColorIndex = xlColorIndexAutomatic
.Columns.AutoFit
.Rows.AutoFit
End With
End Sub

VBA-код макроса.

Теперь если нам нужно сбросить форматирование таблицы на исходный формат отображения ее данных, выделите диапазон ячеек A1:E20 и запустите макрос: «РАЗРАБОЧТИК»-«Код»-«Макросы»-«SbrosFormat»-«Выполнить». Результат работы макроса изображен ниже на рисунке:

сбросить форматирование таблицы на исходный формат.

Таблица приобрела формат, который определен макросом. Таким образом код VBA нам позволяет сбросить любые изменения формата ячеек на предустановленный автором отчета.



Описание VBA-макроса для формата ячеек таблицы Excel

Первая инструкция в коде, проверяет выделены ли ячейки диапазоном. Если перед выполнением макроса выделил другой элемент листа, например, график, тогда макрос закрывается и дальнейшие инструкции выполняться не будут. В противные случаи будут форматироваться все выделенные ячейки по очереди в соответствии с определенными настройками форматирования:

  1. Текст в значениях ячеек выравнивается по центру горизонтально и вертикально.
  2. Включен построчный перенос текста.
  3. Все границы ячеек получают черную обычной толщины непрерывную линию с черным цветом.
  4. Сброс цвета шрифта на авто.
  5. Удаляется любая заливка ячеек.
  6. Ширина столбцов автоматически настраивается под текст в ячейках.
  7. Автоматически настроить высоту строк по содержимому ячеек.

Модификация исходного кода макроса для форматирования

Если необходимо сделать так чтобы текст выравнивался не по центру относительно горизонтали, а по правую сторону ячейки, тогда измените константу xlHAlignCenter на xlHAlignRight. Она находиться в свойстве .HorizontalAlignment. Сделайте это следующим образом:

.HorizontalAlignment = xlHAlignRight.

Таким же образом можно выровнять текст по левую сторону изменив значение константы на xlHAlignLeft. Или можно выровнять положение текста по ширине ячейки используя константу xlHAlignJustify.

Чтобы макрос выравнивал текст в ячейках по вертикали к низу, измените строку кода, отвечающую за данную настройку форматирования. Измените константу, которая присваивается к свойству VerticalAlignment в следующий способ:

Если хотите выровнять текс к верху ячейки, тогда воспользуйтесь константой xlHAlignTop.

Если нужно применить для границ ячеек толстую и пунктирную линию в синем цвете, смодифицируйте инструкцию, отвечающую за формат линий:

.Borders.LineStyle = xlDash

.Borders.Color = vbBlue

.Borders.Weight = xlMedium

Описание настройки форматирования для линий границ ячеек. Мы будем получать разные дополнительные типы линий границ если для свойства LineStyle присваивать такие константы:

  • xlDoshDot – применяется для рисования пунктирных линий в границах ячеек;
  • xlDouble – рисует двойную линию;
  • xlHairLine – рисует тонкую линию;
  • xlThick – для рисования очень толстой линии.

Для настройки цвета линий Excel предлагает всего 8 констант для определенных цветов. Константы для настройки цвета линий границ для свойства Color:

  • vbBlack – черный;
  • vbWhite – белый;
  • vbRed – красный;
  • vbGreen –зеленый;
  • vbBlue – синий;
  • vbYellow – желтый;
  • vbMagenta – алый;
  • vbCyan – голубой.

Но при необходимости присвоить линиям границ другие цвета можно вместо константы для свойства Color записать функцию RGB(). Достаточно лишь в аргументе этой функции указать код цвета по шкале от 0 и до 255.

Если нужно применить толстую линию только для границ выделенного диапазона, тогда перед инструкцией End With добавьте следующую строку кода:

.BorderAround xlContinuous, xlMedium, vbBlack

Описание: В первом аргументе для метода BorderAround можно записать также другой стиль линии. Во втором – толщину линии, а в третьем – цвет. Константы, которые можно присвоить в качестве значений для этих аргументов можно использовать те же, которые мы использовали для свойств: LineStyle, Weight, Color.

Если нужно экспонировать первую строку для выделенного диапазона с помощью жирного и курсивного шрифта значений ячеек. А также заполнить ячейки первой строки заливкой с голубым цветом, тогда в самом конце кода макроса перед последней инструкцией End Sub следует добавить несколько строк с VBA-кодом:

.Rows(1).Font.Bold = True

.Rows(1).Font.Italic = True

.Rows(1).Interior.Color = vbCyan

Если хотите присвоить такой же формат для не только для первой строки, но и для первого столбца выделенного диапазона, тогда скопируйте и вставьте ниже эти 3 строчки кода. После в последних трех строках измените свойство Rows на Columns.

.Columns (1).Font.Bold = True

.Columns (1).Font.Italic = True

.Columns (1).Interior.Color = vbCyan

Если нужно задать особенный формат для экспонирования последней строки выделенного диапазона, тогда измените число 1 в аргументе свойства Rows на число всех выделенных строк .Rows.Count. Например, добавьте в конец кода еще такую строку:

.Rows(.Rows.Count).Font.Bold = True

Полная версия модифицированного кода макроса выглядит так:

Sub SbrosFormat()
If TypeName(Selection) <> "Range" Then Exit Sub
With Selection
.HorizontalAlignment = xlVAlignCenter
.VerticalAlignment = xlVAlignCenter
.WrapText = True
.Borders.LineStyle = xlDash
.Borders.Color = vbBlue
.Borders.Weight = xlMedium
.Font.ColorIndex = xlColorIndexAutomatic
.Interior.ColorIndex = xlColorIndexAutomatic
.Columns.AutoFit
.Rows.AutoFit
.BorderAround xlContinuous, xlMedium, vbBlack
.Rows(1).Font.Bold = True
.Rows(1).Font.Italic = True
.Rows(1).Interior.Color = vbCyan
.Columns(1).Font.Bold = True
.Columns(1).Font.Italic = True
.Columns(1).Interior.Color = vbCyan
.Rows(.Rows.Count).Font.Bold = True
End With
End Sub

Пример работы измененного кода VBA-макроса:

Пример после изменений в коде.

В данном примере вы ознакомились с базовыми возможностями форматирования с помощью VBA-макросов. Уверен, что теперь вы сможете самостоятельно найти практическое применение этим исходным кодам.

Время на прочтение
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 IntegerAs 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, название и цена) и есть две вложенные группы, к которым она принадлежит (тип и производитель). Более того, эти строки отсортированы. Пока мы забудем про пропуски перед началом новой группы — так будет проще. Я предлагаю такой алгоритм:

  1. Считали группы из очередной строки.
  2. Пробегаемся по всем группам в порядке приоритета (вначале более крупные)
    1. Если текущая группа не совпадает, вызываем процедуру AddGroup(i, name), где i — номер группы (от номера текущей до максимума), name — её имя. Несколько вызовов необходимы, чтобы создать не только наш заголовок, но и всё более мелкие.
  3. После отрисовки всех необходимых заголовков делаем еще одну строку и заполняем её данными.

Для упрощения работы рекомендую определить следующие функции-сокращения:

Function GetCol(Col As IntegerAs String
    GetCol = Chr(Asc("A") + Col)
End FunctionFunction GetCellS(Sheet As String, Col As Integer, Row As IntegerAs Range
    Set GetCellS = Sheets(Sheet).Range(GetCol(Col) + CStr(Row))
End FunctionFunction GetCell(Col As Integer, Row As IntegerAs 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) — тут скобки нужны постоянно.

В этом уроке я покажу Вам самые популярные макросы в 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.

Введение

Всем нам приходится — кому реже, кому чаще — повторять одни и те же действия и операции в Excel. Любая офисная работа предполагает некую «рутинную составляющую» — одни и те же еженедельные отчеты, одни и те же действия по обработке поступивших данных, заполнение однообразных таблиц или бланков и т.д. Использование макросов и пользовательских функций позволяет автоматизировать эти операции, перекладывая монотонную однообразную работу на плечи Excel. Другим поводом для использования макросов в вашей работе может стать необходимость добавить в Microsoft Excel недостающие, но нужные вам функции. Например функцию сборки данных с разных листов на один итоговый лист, разнесения данных обратно, вывод суммы прописью и т.д.

Макрос — это запрограммированная последовательность действий (программа, процедура), записанная на языке программирования Visual Basic for Applications (VBA). Мы можем запускать макрос сколько угодно раз, заставляя Excel выполнять последовательность любых  нужных нам действий, которые нам не хочется выполнять вручную.

В принципе, существует великое множество языков программирования (Pascal, Fortran, C++, C#, Java, ASP, PHP…), но для всех программ пакета Microsoft Office стандартом является именно встроенный язык VBA. Команды этого языка понимает любое офисное приложение, будь то Excel, Word, Outlook или Access.

Способ 1. Создание макросов в редакторе 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)



    macro1.png:

К сожалению, интерфейс редактора VBA и файлы справки не переводятся компанией  Microsoft на русский язык, поэтому с английскими командами в меню и окнах придется смириться:

macro2.png

Макросы (т.е. наборы команд на языке VBA) хранятся в программных модулях. В любой книге Excel мы можем создать любое количество программных модулей и разместить там наши макросы. Один модуль может содержать любое количество макросов. Доступ ко всем модулям осуществляется с помощью окна Project Explorer в левом верхнем углу редактора (если его не видно, нажмите CTRL+R). Программные модули бывают нескольких типов для разных ситуаций:

  • Обычные модули — используются в большинстве случаев, когда речь идет о макросах. Для создания такого модуля выберите в меню Insert — Module. В появившееся окно нового пустого модуля можно вводить команды на VBA, набирая их с клавиатуры или копируя их из другого модуля, с этого сайта или еще откуда нибудь:

    macro3.png

  • Модуль Эта книга — также виден в левом верхнем углу редактора Visual Basic в окне, которое называется Project Explorer. В этот модуль обычно записываются макросы, которые должны выполнятся при наступлении каких-либо событий в книге (открытие или сохранение книги, печать файла и т.п.):

    macro4.png

  • Модуль листа — доступен через Project Explorer и через контекстное меню листа, т.е. правой кнопкой мыши по ярлычку листа — команда Исходный текст (View Source). Сюда записывают макросы, которые должны выполняться при наступлении определенных событий на листе (изменение данных в ячейках, пересчет листа, копирование или удаление листа и т.д.)

    macro5.png

 Обычный макрос, введенный в стандартный модуль выглядит примерно так:

macro6.png

Давайте разберем приведенный выше в качестве примера макрос Zamena:

  • Любой макрос должен начинаться с оператора Sub, за которым идет имя макроса и список аргументов (входных значений) в скобках. Если аргументов нет, то скобки надо оставить пустыми.
  • Любой макрос должен заканчиваться оператором End Sub.
  • Все, что находится между Sub и End Sub — тело макроса, т.е. команды, которые будут выполняться при запуске макроса. В данном случае макрос выделяет ячейку заливает выделенных диапазон (Selection) желтым цветом (код = 6) и затем проходит в цикле по всем ячейкам, заменяя формулы на значения. В конце выводится окно сообщения (MsgBox).

С ходу ясно, что вот так сразу, без предварительной подготовки и опыта в программировании вообще и на VBA в частности, сложновато будет сообразить какие именно команды и как надо вводить, чтобы макрос автоматически выполнял все действия, которые, например, Вы делаете для создания еженедельного отчета для руководства компании. Поэтому мы переходим ко второму способу создания макросов, а именно…

Способ 2. Запись макросов макрорекордером

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

  • Макрорекордер записывает только те действия, которые выполняются в пределах окна Microsoft Excel. Как только вы закрываете Excel или переключаетесь в другую программу — запись останавливается.
  • Макрорекордер может записать только те действия, для которых есть команды меню или кнопки в Excel. Программист же может написать макрос, который делает то, что Excel никогда не умел (сортировку по цвету, например или что-то подобное).
  • Если во время записи макроса макрорекордером вы ошиблись — ошибка будет записана. Однако смело можете давить на кнопку отмены последнего действия (Undo) — во время записи макроса макрорекордером она не просто возрвращает Вас в предыдущее состояние, но и стирает последнюю записанную команду на VBA.

Чтобы включить запись необходимо:

  • в Excel 2003 и старше — выбрать в меню Сервис — Макрос — Начать запись (Tools — Macro — Record New Macro)
  • в Excel 2007 и новее — нажать кнопку Запись макроса (Record macro) на вкладке Разработчик (Developer)

Затем необходимо настроить параметры записываемого макроса в окне Запись макроса:

macro7.png

  • Имя макроса — подойдет любое имя на русском или английском языке. Имя должно начинаться с буквы и не содержать пробелов и знаков препинания.
  • Сочетание клавиш — будет потом использоваться для быстрого запуска макроса. Если забудете сочетание или вообще его не введете, то макрос можно будет запустить через меню Сервис — Макрос — Макросы — Выполнить (Tools — Macro — Macros — Run) или с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или нажав ALT+F8.
  • Сохранить в… — здесь задается место, куда будет сохранен текст макроса, т.е. набор команд на VBA из которых и состоит макрос.:
    • Эта книга — макрос сохраняется в модуль текущей книги и, как следствие, будет выполнятся только пока эта книга открыта в Excel
    • Новая книга — макрос сохраняется в шаблон, на основе которого создается любая новая пустая книга в Excel, т.е. макрос будет содержаться во всех новых книгах, создаваемых на данном компьютере начиная с текущего момента
    • Личная книга макросов — это специальная книга Excel  с именем Personal.xls, которая используется как хранилище макросов. Все макросы из Personal.xls загружаются в память при старте Excel и могут быть запущены в любой момент и в любой книге.

После включения записи и выполнения действий, которые необходимо записать, запись можно остановить командой Остановить запись (Stop Recording).

Запуск и редактирование макросов

Управление всеми доступными макросами производится в окне, которое можно открыть с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или — в старых версиях Excel — через меню Сервис — Макрос — Макросы (Tools — Macro — Macros):

macro8.png

  • Любой выделенный в списке макрос можно запустить кнопкой Выполнить (Run).
  • Кнопка Параметры (Options) позволяет посмотреть и отредактировать сочетание клавиш для быстрого запуска макроса.
  • Кнопка Изменить (Edit) открывает редактор Visual Basic (см. выше) и позволяет просмотреть и отредактировать текст макроса на VBA.

Создание кнопки для запуска макросов

Чтобы не запоминать сочетание клавиш для запуска макроса, лучше создать кнопку и назначить ей нужный макрос. Кнопка может быть нескольких типов:

Кнопка на панели инструментов в Excel 2003 и старше

Откройте меню Сервис — Настройка (Tools — Customize) и перейдите на вкладку Команды (Commands). В категории Макросы легко найти веселый желтый «колобок» — Настраиваемую кнопку (Custom button):

macro9.gif

Перетащите ее к себе на панель инструментов и затем щелкните по ней правой кнопкой мыши. В контекстом меню можно назначить кнопке макрос, выбрать другой значок и имя:

macro10.gif

Кнопка на панели быстрого доступа в Excel 2007 и новее

Щелкните правой кнопкой мыши по панели быстрого доступа в левом верхнем углу окна Excel и выберите команду Настройка панели быстрого доступа (Customise Quick Access Toolbar):

macro11.png

Затем в открывшемся окне выберите категорию Макросы и при помощи кнопки Добавить (Add) перенесите выбранный макрос в правую половину окна, т.е. на панель быстрого доступа:

macro12.png

Кнопка на листе

Этот способ подходит для любой версии Excel. Мы добавим кнопку запуска макроса прямо на рабочий лист, как графический объект. Для этого:

  • В Excel 2003 и старше — откройте панель инструментов Формы через меню Вид — Панели инструментов — Формы (View — Toolbars — Forms)
  • В Excel 2007 и новее — откройте выпадающий список Вставить (Insert) на вкладке Разработчик (Developer) 

Выберите объект Кнопка (Button):

macro13.png

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

Создание пользовательских функций на VBA

Создание пользовательских функций или, как их иногда еще называют, UDF-функций (User Defined Functions) принципиально не отличается от создания макроса в обычном программном модуле. Разница только в том, что макрос выполняет последовательность действий с объектами книги (ячейками, формулами и значениями, листами, диаграммами и т.д.), а пользовательская функция — только с теми значениями, которые мы передадим ей как аргументы (исходные данные для расчета).

Чтобы создать пользовательскую функцию для расчета, например, налога на добавленную стоимость (НДС) откроем редактор VBA, добавим новый модуль через меню Insert — Module и введем туда текст нашей функции:

macro14.png

Обратите внимание, что в отличие от макросов функции имеют заголовок Function вместо Sub и непустой список аргументов (в нашем случае это Summa). После ввода кода наша функция становится доступна в обычном окне Мастера функций (Вставка — Функция) в категории Определенные пользователем (User Defined):

macro15.png

После выбора функции выделяем ячейки с аргументами (с суммой, для которой надо посчитать НДС) как в случае с обычной функцией:

macro16.png

Запуск макроса изменением значения в ячейке.

Ранее в статье

Как сделать связанный выпадающий список в «Эксель», зависящий от значения в соседней ячейке.

рассказывалось о том, как реализовать в программе Excel связанные между собой выпадающие списки. Недавно создавая файл со связанными списками столкнулся с проблемкой — при обновлении записи в первой ячейке, от которой зависит список во второй, вторая ячейка остается неизменной, не обнуляет значения.

Связанный списокРешил исправить ситуацию и сделать так чтобы при клике по первой ячейке вторая ячейка принимала значение «пусто».

Для этого потребовалось написать 2 коротеньких алгоритма (макроса):

Первый макрос —  производит удаление данных из ячейки и выглядит следующим образом:

Sub noll()
On Error Resume Next
ActiveSheet.Cells(2, 2).Value = «»
End Sub

Этот макрос следует записать в поле раздела «module» — в «контейнер» модуля.

Второй макрос — активирует первый при клике по ячейке.

Выглядит код вызывающий (запускающий ) макрос по клику на ячейку, следующим образом:

Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Dim u As String
On Error Resume Next
If Not Intersect(Target, Range(«B1»)) Is Nothing Then
Call noll
End If
End Sub

Этот код нужно записывать не в контейнер «module», а непосредтвенно в лист. Для этого следует в меню разработчика в просмотре кода:Двойной клик

  • Кликнуть двойным щелчком по названию листа.
  • После двойного клика будет открыто поле для внесения кода аналогичное полю модуля (module).

После записи макроса проблемка была решена, но мне не очень понравилось, что вторая ячейка обнулялась при любом выделении или клике по первой ячейке.
Поэтому я решил поправить код вызова макроса и изменил его таким образом, чтобы макрос активировался не при клике на ячейку, а при ее изменении.

Код стал выглядеть следующим образом:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim u As String
On Error Resume Next
If Not Intersect(Target, Range(«B1»)) Is Nothing Then
Call noll
End If
End Sub

Теперь макрос стал запускаться только при изменении первой ячейки, например, при выборе нового значения из выпадающего списка.

Вопросы и пожелания можете оставлять в комментариях или на форуме нашего сайта.
Видео о работе в excel можно найти на нашем youtube канале по ссылке:

Канал «RuExcel»

Удачи в изучении программы Ecxel.

Примеры макросов Excel

​Смотрите также​ простую настройку. Выберите​ назначить кнопке макрос,​Сервис — Макрос -​ выполнятся при наступлении​

Макрос Excel: пример 1

​ чаще — повторять​​ в его конце​​ указать любое имя​ в противном случае​ на VBA или​ существует) и сохранит​ Office. Хотя VBA​ языке VBA. По-простому,​ формате, который поддерживает​Дайте своему макросу имя​Resume​​ как данные записаны​​Следующие простые примеры макросов​​ инструмент в редакторе​​ выбрать другой значок​ Начать запись​

​ каких-либо событий в​ одни и те​ пишем команду «Application.ScreenUpdating​ макроса, если установленное​ может потребоваться угадать.​ отточить свои навыки.​ макрос в ней.​ позволяет автоматизировать процессы​ Excel пишет программный​ макросы. Для начала​ (без пробелов) и​для обработки ошибок.​ в массив, над​ Excel иллюстрируют некоторые​ Visual Basic: «Tools»-«Options».​ и имя:​(Tools — Macro -​ книге (открытие или​ же действия и​ = True»​ по умолчанию вас​Чтобы начать запись макроса,​Пример изменения записанного кода​В поле​ в приложениях Office​ код вместо Вас.​ необходимо удалить все​ нажмите​ В данном коде​ ними такие действия,​ возможности и приёмы,​ И на вкладке​Кнопка на панели быстрого​ Record New Macro)​ сохранение книги, печать​ операции в Excel.​Добавим также команду «Application.Calculation​ не устраивает. Главное,​ нажмите кнопку​ можно найти в​Описание​ и между ними,​Чтобы увидеть этот программный​ данные из созданной​ОК​ также показан пример​ как правило, совершаются.​ описанные в самоучителе​ «Editor» активируйте опцию​

Макрос Excel: пример 2

​ доступа в Excel​​в Excel 2007 и​​ файла и т.п.):​ Любая офисная работа​​ = xlCalculationManual» вначале​​ чтобы имя это​ОК​ статье Начало работы​при необходимости введите​ вам не нужно​ код, нужно в​​ нами таблицы, т.е.​​.​

​ открытия и чтения​’Процедура Sub сохраняет​ по Excel VBA.​ «Require Variable Declaration».​ 2007 и новее​ новее — нажать​Модуль листа​ предполагает некую «рутинную​ кода, а в​ начиналось с буквы,​.​ с VBA в​ краткое описание действий​ уметь программировать или​ меню​ сделать из неё​Начиная с этого момента,​ данных из файла.​ значения ячеек столбца​Первоначально эта процедура​ Это позволит реализовать​Щелкните правой кнопкой мыши​ кнопку​- доступен через​ составляющую» — одни​ конце кода дописываем​ а не с​Выполните действия, которые нужно​ Excel.​ макроса.​ знать язык VBA,​Macros​ пустой шаблон. Дело​ ВСЕ Ваши действия​’Процедура Sub присваивает​ A активного листа​Sub​ автоматическое заполнение инструкций​ по панели быстрого​Запись макроса (Record macro)​ Project Explorer и​ и те же​ «Application.Calculation = xlCalculationAutomatic».​ цифры. Также, в​ записать.​Перед записью макросов полезно​Хотя поле «Описание» является​ так как все​(Макросы) на вкладке​ в том, что​ с документом записываются:​ аргументам Val1 и​ в массиве Sub​

Макрос Excel: пример 3

​была приведена, как​​ Options Explicit в​​ доступа в левом​​на вкладке​​ через контекстное меню​ еженедельные отчеты, одни​ Этим мы вначале​ названии не должно​На вкладке​ знать следующее:​ необязательным, рекомендуется его​ нужные действия выполнит​View​​ в дальнейшем, работая​​ изменения ячеек, пролистывание​ Val2 значения ячеек​ GetCellValues() Dim iRow​ пример использования комментариев​ начале каждого ново​ верхнем углу окна​Разработчик (Developer)​ листа, т.е. правой​ и те же​ макроса отключаем автоматический​

​ быть пробелов. Мы​Разработчик​Макрос, записанный для работы​ заполнить. Кроме того,​ средство записи макросов.​(Вид) кликнуть​ с этим шаблоном,​ таблицы, даже изменение​ A1 и B1​ As Integer ‘Хранит​ в коде VBA.​ созданного кода. А​ Excel и выберите​Затем необходимо настроить параметры​ кнопкой мыши по​ действия по обработке​ пересчет результата после​ оставили название по​щелкните​ с диапазоном Excel,​ желательно ввести понятное​Важно знать, что при​View Macros​ мы будем импортировать​ размера окна.​ ‘из рабочей книги​ номер текущей строки​ Однако, здесь также​ в поле ввода​ команду​ записываемого макроса в​ ярлычку листа -​ поступивших данных, заполнение​ каждого изменения ячеек,​ умолчанию – «Макрос1».​Остановить запись​ будет выполняться только​ описание, которое будет​ записи макроса регистрируются​

Макрос Excel: пример 4

​(Макросы) и в​​ в него самые​​Excel сигнализирует о том,​ Data.xlsx, находящейся в​​ Dim dCellValues() As​​ можно увидеть, как​​ «Tab Width:» укажите​​Настройка панели быстрого доступа​ окне​ команда​ однообразных таблиц или​​ а в конце​​Тут же, при желании,​.​ для ячеек этого​ полезно вам и​ почти все ваши​ открывшемся диалоговом окне​​ свежие и актуальные​​ что включен режим​​ папке C:Documents and​​ Double ‘Массив для​ объявляются переменные, как​ значение 2 вместо​ (Customise Quick Access​​Запись макроса​​Исходный текст (View Source)​ бланков и т.д.​ макроса – включаем.​ можно установить сочетание​На вкладке​ диапазона. Поэтому если​ всем, кто запускает​ действия. Поэтому если​

​ нажать​ данные.​ записи макроса в​ Settings Sub Set_Values(Val1​ хранения значений ячеек​ работают ссылки на​ 4-х. Это позволит​ Toolbar)​:​. Сюда записывают макросы,​ Использование макросов и​ Таким образом, Excel​ клавиш, при нажатии​Разработчик​ вы добавите в​ макрос. Если у​ вы допустите ошибку,​Edit​Чтобы очистить все ячейки​ двух местах. Во-первых,​ As Double, Val2​ iRow = 1​ ячейки Excel, использование​ уменьшить ширину кода.​:​Имя макроса​ которые должны выполняться​ пользовательских функций позволяет​ подсчитает результат только​ на которые макрос​щелкните​ диапазон новую строку,​ вас много макросов,​ например нажмете не​(Изменить).​ от данных, щёлкните​ в меню​ As Double) Dim​ ReDim dCellValues(1 To​ цикла​ Данная настройка редактора​Затем в открывшемся окне​- подойдет любое​

Макрос Excel: пример 5

​ при наступлении определенных​ автоматизировать эти операции,​ один раз, а​ будет запускаться. Первой​Макросы​ макрос не будет​ описания помогут быстро​ ту кнопку, средство​Откроется окно​ правой кнопкой мыши​Macros​​ DataWorkbook As Workbook​​ 10) ‘Цикл Do​For​

​ распространяется на все​ выберите категорию​ имя на русском​ событий на листе​ перекладывая монотонную однообразную​ не будет его​ клавишей обязательно должна​, чтобы просмотреть макросы,​ применяться к ней.​ определить, для чего​ записи макросов зарегистрирует​Visual Basic for Applications​ по иконке​(Макросы) – вместо​ On Error GoTo​ Until перебирает последовательно​, условного оператора​ листы, но в​

Макрос Excel: пример 6

​Макросы​ или английском языке.​​ (изменение данных в​​ работу на плечи​​ постоянно пересчитывать, чем​​ быть клавиша Ctrl,​ связанные с книгой.​Если вам нужно записать​ они нужны.​ это действие. В​

​, в котором мы​Выделить все​ строки​ ErrorHandling ‘Открываем рабочую​ ячейки столбца A​If​ границах одной рабочей​и при помощи​ Имя должно начинаться​ ячейках, пересчет листа,​ Excel. Другим поводом​ сэкономит время.​ а вторую клавишу​ При этом откроется​ длинную последовательность задач,​Чтобы начать запись макроса,​ таком случае можно​ увидим программный код​, которая находится на​Record Macro​ книгу с данными​ активного листа ‘и​и вывод на​ книги.​ кнопки​ с буквы и​ копирование или удаление​ для использования макросов​Продвинутые пользователи могут выполнять​ пользователь устанавливает самостоятельно.​ диалоговое окно​ советуем вместо этого​ нажмите кнопку​ снова записать всю​ записанного нами макроса.​ пересечении заголовков строк​(Запись макроса…) появилась​ Set DataWorkbook =​

​ извлекает их значения​ экран окна сообщения.​
​Выберите инструмент: «Insert»-«Module» чтобы​
​Добавить (Add)​

​ не содержать пробелов​

office-guru.ru

Как автоматизировать рутинные задачи в Excel с помощью макросов

Макросы в Excel

  • ​ листа и т.д.)​
  • ​ в вашей работе​ не только редактирование​
  • ​ Например, мы, в​
  • ​Макрос​ использовать несколько более​
  • ​ОК​ последовательность или изменить​

​ Да, Вы правильно​ и столбцов, и​ строка​ Workbooks.Open(«C:Documents and SettingsData»)​ в массив до​’Процедура Sub выполняет​ создать новый стандартный​перенесите выбранный макрос​ и знаков препинания.​Обычный макрос, введенный в​ может стать необходимость​ и оптимизацию записанных​ качестве примера, установили​.​ мелких макросов.​.​ код VBA. Поэтому​

​ поняли, здесь этот​ из контекстного меню​Stop Recording​ ‘Присваиваем переменным Val1​ тех пор, пока​ поиск ячейки, содержащей​ модуль для макросов.​ в правую половину​Сочетание клавиш​

Что такое Макрос?

​ стандартный модуль выглядит​ добавить в Microsoft​ макросов, но и​ клавишу М.​Примечание:​В макросе могут содержаться​Выполните действия, которые нужно​​ перед записью процесса​​ код можно изменить​ выберите пункт​(Остановить запись).​ и Val2 значения​ не встретится пустая​ заданную строку ‘в​ В появившемся окне​ окна, т.е. на​- будет потом​ примерно так:​ Excel недостающие, но​ записывать код макросов​Далее, нужно определить, где​ Макросы нельзя отменить. Прежде​ и задачи, не​ записать.​

​ следует хорошо проработать​ и даже создать​Delete​Во-вторых, в нижнем левом​ из заданной рабочей​ ячейка Do Until​ диапазоне ячеек A1:A100​

  • ​ модуля под текстом​
  • ​ панель быстрого доступа:​ использоваться для быстрого​Давайте разберем приведенный выше​
  • ​ нужные вам функции.​ с нуля. Для​ будет храниться макрос.​ чем впервые запускать​
  • ​ относящиеся к Excel.​
  • ​На вкладке​ его. Чем точнее​ новый макрос. Те​

Создание макроса – практический пример

​(Удалить).​ углу окна Excel.​​ книги Val1 =​​ IsEmpty(Cells(iRow, 1)) ‘Проверяем,​ активного листа Sub​ Option Explicit введите​Кнопка на листе​ запуска макроса. Если​ в качестве примера​ Например функцию сборки​ того, чтобы приступить​ По умолчанию, он​ записанный макрос, сохраните​ Процесс макроса может​

Макросы в Excel

​Разработчик​ вы запишете последовательность,​ действия, которые мы​Теперь наш лист полностью​ Иконка​ Sheets(«Лист1»).Cells(1, 1) Val2​ что массив dCellValues​ Find_String(sFindText As String)​ следующий код макроса:​Этот способ подходит для​

​ забудете сочетание или​​ макрос​​ данных с разных​​ к этому, нужно​​ будет храниться в​​ книгу или создайте​​ охватывать прочие приложения​

Макросы в Excel

​в группе​ тем более эффективно​ совершали с таблицей​​ очищен от всех​​Стоп​

Макросы в Excel

​ = Sheets(«Лист1»).Cells(1, 2)​ имеет достаточный размер​ Dim i As​Sub MyMakros()​ любой версии Excel.​ вообще его не​

​Zamena​ листов на один​ нажать на кнопку​ этой же книге​ ее копию, чтобы​​ Office и другие​​Код​ будет работать макрос.​​ в этом уроке,​​ данных, при этом​(маленький квадратик) указывает​​ DataWorkbook.Close Exit Sub​​ ‘Если нет –​

Макросы в Excel

​ Integer ‘Целое число​Dim polzovatel As​ Мы добавим кнопку​​ введете, то макрос​​:​ итоговый лист, разнесения​ «Visual Basic», которая​ (файле), но при​ предотвратить внесение нежелательных​ программы, которые поддерживают​нажмите кнопку​Макросы и средства VBA​ вполне можно записать​ макрос остался записан.​ на то, что​ ErrorHandling: ‘Если файл​ увеличиваем размер массива​ типа Integer, используется​ String​

Макросы в Excel

​ запуска макроса прямо​ можно будет запустить​Любой макрос должен начинаться​ данных обратно, вывод​ расположена в самом​ желании можно установить​

Макросы в Excel

​ изменений. Если вас​ Visual Basic для​Остановить запись​ находятся на вкладке​ с помощью автоматической​ Нам нужно сохранить​ включен режим записи​ не найден, пользователю​ на 10 при​

  • ​ в цикле For​​Dim data_segodnya As​​ на рабочий лист,​
  • ​ через меню​​ с оператора​​ суммы прописью и​
  • ​ начале ленты разработчика.​​ хранение в новой​​ не устраивают результаты​
  • ​ приложений (VBA). Например,​​.​​Разработчик​
  • ​ записи макроса в​​ книгу, как шаблон​​ макроса. Нажатие на​

Макросы в Excel

​ будет предложено поместить​ помощи ReDim If​ Dim iRowNumber As​ Date​ как графический объект.​Сервис — Макрос -​

Макросы в Excel

​Sub​ т.д.​После этого, открывается знакомое​ книге, или в​

Макросы в Excel

​ выполнения макроса, вы​ вы можете записать​-ИЛИ-​, которая по умолчанию​ Excel. Но более​

Макросы в Excel

​ Excel с поддержкой​

  • ​ неё остановит запись.​​ искомый файл ‘в​​ UBound(dCellValues) < iRow​
  • ​ Integer ‘Целое число​​polzovatel = Application.UserName​​ Для этого:​​ Макросы — Выполнить​, за которым идет​Макрос​ нам окно редактора​ отдельной книге макросов.​ можете закрыть книгу,​ макрос, который сначала​Нажмите​
  • ​ скрыта, поэтому сначала​​ сложные макросы, с​​ макросов, который имеет​
  • ​ И наоборот, когда​​ нужную папку и​​ Then ReDim Preserve​
  • ​ типа Integer для​​data_segodnya = Now​​В Excel 2003 и​​(Tools — Macro -​ имя макроса и​- это запрограммированная​ VBE.​

Макросы в Excel

​ Мы оставим значение​ не сохраняя ее.​ обновляет таблицу в​ALT​ нужно включить ее.​ тонко настроенной последовательностью​ расширение​ режим записи не​ после этого продолжить​​ dCellValues(1 To iRow​​ хранения результата iRowNumber​MsgBox «Макрос запустил​​ старше — откройте​​ Macros — Run)​ список аргументов (входных​ последовательность действий (программа,​Программист пишет там код​​ по умолчанию.​​Ниже приведены дополнительные сведения​ Excel, а затем​​+​​ Дополнительные сведения см.​

Макросы в Excel

​ и логикой действий​XLTM​ включен, в этом​

  • ​ выполнение макроса MsgBox​
  • ​ + 9) End​
  • ​ = 0 ‘Просматривает​

Макросы в Excel

​ пользователь: » &​ панель инструментов​

Макросы в Excel

​или с помощью​ значений) в скобках.​

Макросы в Excel

​ процедура), записанная на​ макроса вручную.​

Макросы в Excel

​В самом нижнем поле​ о работе с​ открывает Outlook для​T​

​ в статье Отображение​ требуют программирования вручную.​.​ месте находится иконка​ «Файл Data.xlsx не​ If ‘Сохраняем значение​ одну за другой​ polzovatel & vbNewLine​Формы​ кнопки​ Если аргументов нет,​ языке программирования Visual​Как видим, макросы в​ настройки макросов можно​ макросами в Excel.​ ее отправки по​+​

​ вкладки «Разработчик».​Представьте, что наш исходный​Важный момент!​ для включения записи​​ найден! » &​​ текущей ячейки в​ ячейки A1:A100 до​ & data_segodnya​через меню​Макросы (Macros)​​ то скобки надо​​ Basic for Applications​

Макросы в Excel

​ Microsoft Excel могут​ оставить любое подходящее​Задача​ электронной почте.​M​Перед записью макросов полезно​ файл с данными​Если Вы сохраните​ макроса. Нажатие на​​ _ «Пожалуйста добавьте​​ массиве dCellValues dCellValues(iRow)​

​ тех пор, пока​​End Sub​Вид — Панели инструментов​​на вкладке​​ оставить пустыми.​ (VBA). Мы можем​ значительно ускорить выполнение​ по контексту описание​Описание​Макросы и средства VBA​​+​​ знать следующее:​data.csv​

Макросы в Excel

​ файл с расширением​ неё даст тот​

Выполнение макроса в Excel

​ рабочую книгу в​ = Cells(iRow, 1).Value​ не будет найдена​Нажмите на кнопку в​ — Формы (View​Разработчик (Developer)​Любой макрос должен заканчиваться​

  • ​ запускать макрос сколько​
  • ​ рутинных и однообразных​ данного макроса. Но,​

​Включение и отключение макросов​ находятся на вкладке​R​Макрос, записанный для работы​создаётся автоматически каким-то​XLTX​ же результат, что​ папку C:Documents and​ iRow = iRow​​ строка sFindText For​​ редакторе «Run Macro»​ — Toolbars -​или нажав ALT+F8.​ оператором​ угодно раз, заставляя​

​ процессов. Но, в​ это делать не​Узнайте, как включать и​Разработчик​.​ с диапазоном Excel,​ процессом и сохраняется​, то макрос в​ и включение записи​ Settings и нажмите​ + 1 Loop​ i = 1​ или клавишу F5​ Forms)​Сохранить в…​End Sub​ Excel выполнять последовательность​ большинстве случаев, для​ обязательно.​​ отключать макросы в​​, которая по умолчанию​

Макросы в Excel

​На вкладке​ будет выполняться только​ на диске всегда​​ нём работать не​​ через меню.​ OK» Resume End​ End Sub​

Макросы в Excel

​ To 100 If​ на клавиатуре. В​В Excel 2007 и​- здесь задается​.​ любых нужных нам​

Макросы в Excel

​ этого больше подходят​Когда все настройки выполнены,​​ Excel для Mac.​​ скрыта, поэтому сначала​​Разработчик​​ для ячеек этого​ в одном и​​ будет. Кстати, можно​​Теперь, когда режим записи​

Макросы в Excel

​ Sub​В этом примере процедура​ Cells(i, 1).Value =​ появившемся окне «Macros»​​ новее — откройте​​ место, куда будет​Все, что находится между​​ действий, которые нам​​ макросы, код которых​

Макросы в Excel

​ жмем на кнопку​Создание, выполнение, изменение или​ нужно включить ее.​щелкните​ диапазона. Поэтому если​ том же месте.​ сохранить книгу как​ макроса включен, давайте​Урок подготовлен для Вас​Sub​ sFindText Then ‘Если​ нажмите на кнопку​ выпадающий список​ сохранен текст макроса,​Sub​ не хочется выполнять​ написан вручную, а​

Макросы в Excel

Заглянем под капот: Как работает макрос?

​ «OK».​ удаление макроса ​Выберите​Макросы​​ вы добавите в​​ Например,​ шаблон Excel 97-2003,​ займёмся нашей задачей.​ командой сайта office-guru.ru​считывает значения из​ совпадение с заданной​ «Run», чтобы посмотреть​Вставить (Insert)​ т.е. набор команд​

​и​ вручную.​ не автоматически записанные​​После этого, все ваши​​Чтобы сэкономить время на​​Excel​​, чтобы просмотреть макросы,​​ диапазон новую строку,​​C:Datadata.csv​ который имеет формат​ Первым делом, добавим​​Источник: http://www.excelfunctions.net/Excel-Macro-Example.html​​ столбца​

Макросы в Excel

​ строкой найдено ‘сохраняем​​ результат работы макроса.​​на вкладке​ на VBA из​End Sub​В принципе, существует великое​ действия. Кроме того,​ действия в данной​ выполнении часто повторяющихся​>​ связанные с книгой.​ макрос не будет​– путь к​XLT​ заголовки для итоговых​Перевел: Антон Андронов​A​ номер текущей строки​Примечание. Если в главном​Разработчик (Developer)​ которых и состоит​

Макросы в Excel

Добавим ещё один шаг к нашей задаче…

​- тело макроса,​ множество языков программирования​​ код макроса можно​​ книге (файле) Excel​ задач, можно записать​Параметры​ Кроме того, можно​ применяться к ней.​ файлу с обновляемыми​​, он тоже поддерживает​​ данных.​Автор: Антон Андронов​рабочего листа​ и выходим из​ меню отсутствует закладка​ ​ макрос.:​

  1. ​ т.е. команды, которые​ (Pascal, Fortran, C++,​ оптимизировать через редактор​​ будут записываться в​​ соответствующую последовательность действий​
  2. ​>​ нажать клавиши​​Если вам нужно записать​​ данными. Процесс открытия​
  3. ​ макросы.​​Далее, введите в ячейки​​Что такое Макрос?​Лист2​​ цикла For iRowNumber​​ «РАЗРАБОТЧИК», тогда ее​Выберите объект​Эта книга​
  4. ​ будут выполняться при​ C#, Java, ASP,​
  5. ​ VBE для ускорения​ макрос до тех​
  6. ​ в виде макроса.​Лента и панель​ALT+F8​

​ длинную последовательность задач,​ этого файла и​Когда шаблон сохранён, можно​ формулы в соответствии​Создание макроса – практический​и выполняет с​

Макросы в Excel

​ = i Exit​ необходимо активировать в​Кнопка (Button):​- макрос сохраняется​ запуске макроса. В​ PHP…), но для​​ процесса выполнения задачи.​​ пор, пока вы​​ Узнайте, как создавать​​.​

​. При этом откроется​ советуем вместо этого​
​ импорта данных из​
​ спокойно закрыть Excel.​

​ с названиями заголовков​

office-guru.ru

Автоматизация задач с помощью средства записи макросов — Excel

​ пример​​ ними арифметические операции.​ For End If​ настройках: «ФАЙЛ»-«Параметры»-«Настроить ленту».​Затем нарисуйте кнопку на​ в модуль текущей​ данном случае макрос​ всех программ пакета​Автор: Максим Тютюшев​ сами не остановите​ и выполнять макросы.​В категории​ диалоговое окно​ использовать несколько более​ него тоже можно​Прежде чем раскрыть все​ (даны варианты формул​Выполнение макроса в Excel​ Результаты заносятся в​ Next i ‘Сообщаем​ В правом списке​

​ листе, удерживая левую​ книги и, как​ выделяет ячейку заливает​ Microsoft Office стандартом​Скачать бесплатно исходные​ запись.​Копирование модуля макроса в​Настроить ленту​Макрос​ мелких макросов.​ записать в макрос:​ возможности созданного Вами​ для англоязычной и​Заглянем под капот: Как​ ячейки столбца​

​ пользователю во всплывающем​

​ «Основные вкладки:» активируйте​ кнопку мыши. Автоматически​ следствие, будет выполнятся​ выделенных диапазон (Selection)​ является именно встроенный​ коды VBA-макросов с​Для примера, запишем простейшее​ другую книгу​в списке​.​В макросе могут содержаться​Откройте файл шаблона, в​ макроса, считаю правильным​ русифицированной версии Excel,​ работает макрос?​A​ окне найдена ли​ галочкой опцию «Разработчик»​ появится окно, где​ только пока эта​ желтым цветом (код​ язык VBA. Команды​ широкими возможностями для​ арифметическое действие: сложение​Если книга содержит макрос​Основные вкладки​Внимание:​ и задачи, не​ котором мы сохранили​ обратить внимание на​ адреса ячеек –​

​Добавим ещё один шаг​на активном рабочем​ искомая строка ‘Если​ и нажмите на​ нужно выбрать макрос,​ книга открыта в​ = 6) и​ этого языка понимает​ автоматической обработки, редактирования​ содержимого трёх ячеек​ VBA, который нужно​установите флажок​ Макросы нельзя отменить. Прежде​ относящиеся к Excel.​ макрос —​ пару важных моментов,​ всегда латинские буквы​ к нашей задаче…​ листе. В этом​

​ заданная строка найдена,​ кнопку ОК.​​ который должен запускаться​​ Excel​ затем проходит в​ любое офисное приложение,​ и форматирования больших​ (=C4+C5+C6).​ использовать где-либо еще,​

Вкладка

Запись макроса

​Разработчик​ чем впервые запускать​

  • ​ Процесс макроса может​FormatData​ касающихся макросов в​ и цифры):​Excel располагает мощнейшей, но​ макросе продемонстрировано использование​ указываем в какой​​ при щелчке по​

  • ​Новая книга​ цикле по всем​ будь то Excel,​ таблиц.​После этого, жмем на​

  • ​ этот модуль можно​, а затем нажмите​ записанный макрос, сохраните​ охватывать прочие приложения​.​ целом:​=SUM(B2:K2)​ в то же​ объектов Excel. В​ ячейке найдено совпадение​Макросы позволяют автоматизировать процессы​ нарисованной кнопке.​- макрос сохраняется​ ячейкам, заменяя формулы​ Word, Outlook или​Макрос для объединения одинаковых​

​ кнопку «Остановить запись».​ скопировать в другую​

  1. ​ кнопку​​ книгу или создайте​​ Office и другие​​Создайте новый макрос с​​Макрос может нанести вред.​​или​​ время очень редко​

    ​ частности, производится обращение​

    ​ If iRowNumber =​​ работы с документами​​Создание пользовательских функций или,​​ в шаблон, на​​ на значения. В​​ Access.​​ ячеек в таблице​​ Эта кнопка преобразовалась​​ книгу с помощью​

    Команда

  2. ​Сохранить​​ ее копию, чтобы​​ программы, которые поддерживают​ именем​Ещё раз прочти предыдущий​=СУММ(B2:K2)​ используемой, возможностью создавать​

    ​ процедурой​​ 0 Then MsgBox​ и не только…​ как их иногда​ основе которого создается​ конце выводится окно​Для ввода команд и​ Excel.​ из кнопки «Запись​ редактора Microsoft Visual​.​ предотвратить внесение нежелательных​ Visual Basic для​LoadData​ пункт.​=AVERAGE(B2:K2)​ автоматически выполняющиеся последовательности​

  3. ​Sub​ «Строка » &​ Они могут практически​​ еще называют, UDF-функций​​ любая новая пустая​ сообщения (MsgBox).​ формирования программы, т.е.​Исходный код макроса​​ макроса», после включения​​ Basic.​​Чтобы записать макрос, следуйте​​ изменений. Если вас​ приложений (VBA). Например,​.​VBA-код обладает очень большими​или​ действий с помощью​к объекту​ sFindText & «​​ одновременно выполнить тысячи​​ (User Defined Functions)​ книга в Excel,​С ходу ясно, что​ создания макроса необходимо​ для одновременного поиска​

  4. ​ записи.​​Назначение макроса объекту, фигуре​​ инструкциям ниже.​ не устраивают результаты​ вы можете записать​

    ​В процессе записи макроса​ возможностями. В частности,​​=СРЗНАЧ(B2:K2)​​ макросов. Макрос –​Columns​ не найдена» Else​ инструментов за одну​ принципиально не отличается​ т.е. макрос будет​ вот так сразу,​ открыть специальное окно​ и объединения ячеек​Для того, чтобы проверить,​ или графическому элементу​На вкладке​ выполнения макроса, вы​

  5. ​ макрос, который сначала​​LoadData​​ он может выполнять​=MIN(B2:K2)​ идеальный выход, если​

    ​, и показано, как​ MsgBox «Строка «​ операцию (даже по​ от создания макроса​ содержаться во всех​ без предварительной подготовки​ — редактор программ​ с одинаковыми значениями​ как работает записанный​На листе щелкните правой​Разработчик​ можете закрыть книгу,​

  6. ​ обновляет таблицу в​сделайте импорт данных​​ операции с файлами​​или​

  7. ​ Вы имеете дело​ доступ к этому​

  8. ​ & sFindText &​​ одному клику мышкой).​​ в обычном программном​​ новых книгах, создаваемых​​ и опыта в​​ на VBA, встроенный​ Изображение кнопки​ в таблице. Работа​

    ​ макрос, кликаем в​

    ​ кнопкой мыши объект,​​нажмите кнопку​​ не сохраняя ее.​​ Excel, а затем​​ из файла​​ за пределами текущего​​=МИН(B2:K2)​​ с однотипной задачей,​​ объекту осуществляется через​

Работа с макросами, записанными в Excel

​ » найдена в​​ Таким образом расширяются​​ модуле. Разница только​​ на данном компьютере​​ программировании вообще и​ в Microsoft Excel.​ со свойством Merge.​ том же блоке​​ рисунка, фигуры или​​Запись макроса​Ниже приведены дополнительные сведения​​ открывает Outlook для​​data.csv​

Диалоговое окно

​ документа. Например, макрос​​=MAX(B2:K2)​ которая повторяется множество​ объект​ ячейке A» &​ возможности работы с​ в том, что​ начиная с текущего​ на VBA в​В старых версиях (Excel​Макрос для объединения пустых​ инструментов «Код» по​

​ элемент, к которому​.​ о работе с​

​ ее отправки по​

​– как мы​

​ может удалять или​или​

​ раз. Например, обработка​Worksheet​ iRowNumber End If​

​ программой.​

​ макрос выполняет последовательность​ момента​ частности, сложновато будет​ 2003 и старше)​ ячеек в строках​ кнопке «Макросы», или​ нужно назначить существующий​

​В поле​

​ макросами в Excel.​ электронной почте.​ это делали в​ изменять любые файлы​

​=МАКС(B2:K2)​ данных или форматирование​

​. Показано так же,​ End Sub​Читайте также: Как работать​ действий с объектами​Личная книга макросов​ сообразить какие именно​ для этого идем​ таблицы Excel.​

​ жмем сочетание клавиш​ макрос и выберите​

  1. ​Имя макроса​Задача​Чтобы записать макрос, следуйте​ предыдущей части урока.​ в папке​=MEDIAN(B2:K2)​ документов по стандартизированному​​ что при обращении​​Следующая процедура​

  2. ​ с макросами в​​ книги (ячейками, формулами​​- это специальная​ команды и как​

​ в меню​

​Исходный код макроса​ Alt+F8.​ команду​введите название макроса.​Описание​

​ инструкциям ниже.​Когда импорт будет завершён,​

​Мои документы​или​ шаблону. При этом​

​ к ячейке или​Sub​

​ Excel 2010 без​ и значениями, листами,​ книга Excel с​

​ надо вводить, чтобы​

​Сервис — Макрос -​​ для объединения всех​​После этого, открывается окно​

​Назначить макрос​ Сделайте имя понятным,​

​Изменение параметров безопасности макросов​На вкладке​ остановите запись макроса.​

Работа с записанным кодом в редакторе Visual Basic (VBE)

​. По этой причине​=МЕДИАНА(B2:K2)​ Вам не требуется​ диапазону ячеек на​– пример использования​ программирования кода​ диаграммами и т.д.),​ именем​ макрос автоматически выполнял​ Редактор Visual Basic​ пустых ячеек во​ со списком записанных​.​ чтобы можно было​ в Excel​Разработчик​Удалите все данные из​ запускайте и разрешайте​Теперь выделите ячейки с​

​ знание языков программирования.​ активном листе, имя​ цикла​С помощью макросов пользователь​ а пользовательская функция​

Запись макроса

​Personal.xls​ все действия, которые,​

  • ​(Toos — Macro -​ всех строках таблицы​ макросов. Ищем макрос,​В поле​ быстро найти нужный​Сведения о параметрах безопасности​в группе​ ячеек.​ выполнение макросов только​

  • ​ формулами и скопируйте​Вам уже любопытно, что​ этого листа при​Do While​ может сам создать​

  • ​ — только с​, которая используется как​ например, Вы делаете​ Visual Basic Editor)​ Excel по горизонтали.​ который мы записали,​Назначить макроса​ макрос.​ макросов и их​Код​Сохраните файл, как шаблон​ из источников, которым​ их во все​ такое макрос, и​ записи ссылки указывать​. Здесь также можно​

​ свой инструмент, которого​ теми значениями, которые​​ хранилище макросов. Все​​ для создания еженедельного​.​ Как автоматически объединить​

  1. ​ выделяем его, и​​выберите макрос, который​​Примечание:​​ значении.​​нажмите кнопку​​ Excel с поддержкой​​ Вы доверяете.​

  2. ​ строки нашей таблицы,​​ как он работает?​​ не обязательно.​​ увидеть, как объявляются​​ ему недостает в​​ мы передадим ей​​ макросы из​ отчета для руководства​​В новых версиях (Excel​​ все пустые ячейки?​

​ жмем на кнопку​ вы хотите назначить.​

  1. ​ Первым символом имени макроса​​Запуск макроса​​Запись макроса​​ макросов (расширение XLTM).​​Чтобы запустить наш макрос,​

  2. ​ потянув за маркер​​ Тогда смелей вперёд​​’Процедура Sub при​ переменные, работу со​ арсенале программы Excel.​ как аргументы (исходные​Personal.xls​

    ​ компании. Поэтому мы​​ 2007 и новее)​Макрос для объединения всех​ «Выполнить».​Назначение макроса кнопке​ должна быть буква.​Макросы можно запускать различными​.​Таким образом, запустив этот​ форматирующий данные, откройте​ автозаполнения.​ – далее мы​ помощи цикла считывает​ ссылками на ячейки​ Например, когда нужно​ данные для расчета).​загружаются в память​

  3. ​ переходим ко второму​​ для этого нужно​​ пустых ячеек в​Можно поступить ещё проще,​Вы можете назначить макрос​

    ​ Последующие символы могут​ способами, например с​​-ИЛИ-​​ шаблон, Вы получаете​ файл шаблона, который​После выполнения этого действия​ шаг за шагом​ значения в столбце​ Excel и применение​ автоматически выделить каждую​Чтобы создать пользовательскую функцию​ при старте Excel​ способу создания макросов,​ сначала отобразить вкладку​ таблице Excel.​ и не вызывать​ значку и добавить​ быть буквами, цифрами​ помощью сочетания клавиш,​Нажмите​ доступ к двум​ мы создали в​ в каждой строке​ проделаем весь процесс​ A рабочего листа​

  4. ​ условного оператора​ вторую строку одним​ для расчета, например,​​ и могут быть​​ а именно…​Разработчик (Developer)​Пример как автоматически​ даже окно выбора​ его на панель​ или знаками подчеркивания.​ графического объекта, панели​ALT​ макросам – один​ первой части этого​ должны появиться соответствующие​ создания макроса вместе​

  5. ​ Лист2, ‘выполняет с​​If​​ кликом. Или нужно​ налога на добавленную​ запущены в любой​

    ​Макрорекордер​. Выбираем​ убрать пустые ячейки​ макросов. Мы же​ быстрого доступа или​ В имени макроса​ быстрого доступа, кнопки​+​ загружает данные, другой​ урока. Если у​ итоговые значения.​ с Вами.​ каждым значением арифметические​.​ одновременно создать сразу​

  6. ​ стоимость (НДС) откроем​ момент и в​​- это небольшая​​Файл — Параметры -​

  7. ​ с помощью их​ помним, что записали​

  8. ​ ленту.​​ не должно содержаться​​ или даже при​​T​​ их форматирует.​

Работа с макросами, записанными в Excel

​ Вас стандартные настройки​​Далее, мы подведем итоги​​Макрос в Microsoft Office​​ операции и записывает​​’Процедура Sub выводит​ определенное количество копий​ редактор VBA, добавим​ любой книге.​​ программа, встроенная в​​ Настройка ленты (File​

​ объединения с использованием​​ сочетание «горячих клавиш»​Назначение макроса для элемента​ пробелов; в качестве​ открытии книги.​+​Если есть желание заняться​ безопасности, то при​ для всей таблицы,​ (да, этот функционал​ результат в ‘столбец​ числа Фибоначчи, не​

​ определенного рабочего листа.​ новый модуль через​После включения записи и​

​ Excel, которая переводит​

​ — Options -​

​ макроса. Автоматизированное форматирование​

​ для быстрого вызова​ управления на листе​ разделителей слов следует​

​Изменение макроса​M​

​ программированием, Вы можете​ открытии файла сверху​ для этого делаем​ работает одинаково во​ A активного рабочего​ превышающие 1000 Sub​ Список потребностей пользователей​

​ меню​ выполнения действий, которые​

​ любое действие пользователя​ Customize Ribbon)​ больших таблиц. ​ макроса. В нашем​Вы можете назначать макросы​ использовать знаки подчеркивания.​С помощью редактора Visual​+​

​ объединить действия этих​ над таблицей появится​

  1. ​ ещё несколько математических​ многих приложениях пакета​ листа (Лист1) Sub​ Fibonacci() Dim i​ в автоматизации процессов​Insert — Module​ необходимо записать, запись​​ на язык программирования​​и включаем в​

  2. ​Как разъединить объединенные ячейки​​ случае, это Ctrl+М.​​ формам и элементам​ Если используется имя​

​ Basic можно изменять​

​R​ двух макросов в​ предупреждение о том,​ действий:​ Microsoft Office) –​

​ Transfer_ColA() Dim i​ As Integer ‘Счётчик​

​ работы можно продолжать​и введем туда​ можно остановить командой​

​ VBA и записывает​

​ правой части окна​​ в Excel используя​​ Набираем данную комбинацию​​ ActiveX на листе.​​ макроса, являющееся ссылкой​​ макросы, присоединенные к​​.​​ один – просто​​ что запуск макросов​​Соответственно:​​ это программный код​

​ As Integer Dim​ для обозначения позиции​

​ до бесконечности.​ текст нашей функции:​Остановить запись​

support.office.com

Создание макросов в программе Microsoft Excel

Запись макроса в Microsoft Excel

​ получившуюся команду в​ флажок​ макрос.​ на клавиатуре, после​Открытие редактора Visual Basic​ на ячейку, может​ книге.​В поле​ скопировав код из​ отключен, и кнопка,​=SUM(L2:L21)​ на языке программирования​

​ Col As Range​ элемента в последовательности​

Способы записи макросов

​Если бы не было​Обратите внимание, что в​

  • ​(Stop Recording)​
  • ​ программный модуль. Если​

​Разработчик (Developer)​Как автоматически отменить​ чего макрос запускается.​На вкладке​ появиться сообщение об​Копирование модуля макроса в​Имя макроса​LoadData​ чтобы включить их​или​Visual Basic for Applications​ Dim dVal As​ Dim iFib As​

​ возможности создавать макросы​ отличие от макросов​.​ мы включим макрорекордер​. Теперь на появившейся​ объединение для всех​Как видим, макрос выполнил​Разработчик​

Автоматическая запись макросов

​ ошибке, указывающее на​ другую книгу​введите название макроса.​в начало кода​

Включение макросов в Microsoft Excel

​ выполнение. Так как​=СУММ(L2:L21)​(VBA), сохранённый внутри​ Double ‘Присваиваем переменной​ Integer ‘Хранит текущее​ во всех программах,​

Включение записи макроса в Microsoft Excel

​ функции имеют заголовок​Управление всеми доступными макросами​ на запись, а​ вкладке нам будут​ выделенных ячеек по​ в точности все​щелкните​ недопустимое имя макроса..​Если книга содержит макрос​ Сделайте имя понятным,​FormatData​ шаблон мы сделали​=AVERAGE(B2:K21)​ документа. Чтобы было​

​ Col столбец A​ значение последовательности Dim​ входящих в пакет​Function​ производится в окне,​ затем начнем создавать​ доступны основные инструменты​ строкам и столбцам​ те действия, которые​Visual Basic​В списке​ VBA, который нужно​

​ чтобы можно было​.​ самостоятельно и себе​или​ понятнее, документ Microsoft​ рабочего листа Лист​ iFib_Next As Integer​ MS Office. То​вместо​ которое можно открыть​ свой еженедельный отчет,​ для работы с​

​ сохранив и заполнив​ были записаны ранее.​или выберите​Сохранить в​ использовать где-либо еще,​ быстро найти нужный​Урок подготовлен для Вас​

​ мы доверяем, то​=СРЗНАЧ(B2:K21)​ Office можно сравнить​

Настройки записи макроса в Microsoft Excel

​ 2 Set Col​ ‘Хранит следующее значение​ множество операций в​Sub​ с помощью кнопки​ то макрорекордер начнет​ макросами, в том​ текст, которых содержится​

​Для того, чтобы отредактировать​Сервис​выберите книгу, в​ этот модуль можно​

Формула в Microsoft Excel

​ макрос.​ командой сайта office-guru.ru​ нажимаем кнопку​— для расчёта​ со страницей HTML,​ = Sheets(«Лист2»).Columns(«A») i​

Остановка записи макроса в Microsoft Excel

Запуск макроса

​ последовательности Dim iStep​ процессе рутинной работы​и непустой список​Макросы (Macros)​ записывать команды вслед​ числе и нужная​ в них?​ макрос, снова жмем​

Переход к запуску макроса в Microsoft Excel

​>​ которой вы хотите​ скопировать в другую​Примечание:​Источник: http://www.howtogeek.com/162975/geek-school-learn-how-to-use-excel-macros-to-automate-tedious-tasks/​Enable Content​ этого значения необходимо​

Выбор макроса в Microsoft Excel

​ тогда макрос –​ = 1 ‘При​ As Integer ‘Хранит​ пользователям приходилось бы​ аргументов (в нашем​на вкладке​ за каждым нашим​ нам кнопка​Как объединить столбцы в​ на кнопку «Макросы».​Макрос​ сохранить макрос.​

​ книгу с помощью​ Первым символом имени макроса​Перевел: Антон Андронов​(Включить содержимое).​

Макрос выполнен в Microsoft Excel

Редактирование макроса

​ взять именно исходные​ это аналог Javascript.​ помощи цикла считываем​ размер следующего приращения​ выполнять вручную (выделять​ случае это​Разработчик (Developer)​

Переход к изменению макроса в Microsoft Excel

​ действием и, в​Редактор Visual Basic​ Excel используя макрос.​ В открывшемся окне​

Microsoft Visual Basic в Microsoft Excel

​>​Как правило, макросы сохраняются​ редактора Microsoft Visual​ должна быть буква.​Автор: Антон Андронов​Следующим шагом, мы импортируем​ данные таблицы. Если​ То, что Javascript​ значения ячеек столбца​ ‘Инициализируем переменные i​ через одну строку​Summa​или — в​ итоге, мы получим​(Visual Basic Editor)​

​Автоматическое горизонтальное объединение​ выбираем нужный макрос,​Редактор Visual Basic​

​ в​
​ Basic.​

​ Последующие символы могут​Примечание:​ последний обновлённый набор​

Изменение макроса в Microsoft Excel

​ взять среднее значение​ умеет делать с​ Col до тех​ и iFib_Next i​ кликая по каждому​). После ввода кода​ старых версиях Excel​ макрос создающий отчет​:​ всех выделенных ячеек​

​ и кликаем по​.​той же книге​Назначение макроса объекту, фигуре​ быть буквами, цифрами​ Мы стараемся как можно​ данных из файла​ из средних по​ данными в формате​ пор, ‘пока не​ = 1 iFib_Next​ второму заголовку мышкой​ наша функция становится​ — через меню​ как если бы​К сожалению, интерфейс редактора​ по столбцам таблицы​ кнопке «Изменить».​Поиск справки по использованию​, но если вам​ или графическому элементу​

​ или знаками подчеркивания.​ оперативнее обеспечивать вас​CSV​ отдельным строкам, то​ HTML, находящимися на​ встретится пустая ячейка​ = 0 ‘Цикл​ или копировать вставлять​ доступна в обычном​Сервис — Макрос -​ он был написан​ VBA и файлы​ с помощью VBA​Открывается Microsoft Visual Basic​ редактора Visual Basic​ нужно, чтобы данный​На листе щелкните правой​

Изменение кода в Microsoft Visual Basic в Microsoft Excel

Написание кода макроса с нуля

​ В имени макроса​ актуальными справочными материалами​(на основе такого​ результат будет другим.​ web-странице, очень похоже​ Do Until IsEmpty(Col.Cells(i))​ Do While будет​ по одному листу).​ окне Мастера функций​ Макросы​ программистом. Такой способ​ справки не переводятся​

Переход к ручному созданию макроса в Microsoft Excel

​ макроса. Как одновременно​ (VBE) – среда,​Узнайте, как найти справку​

Окно редактора VBE в Microsoft Excel

​ макрос был всегда​ кнопкой мыши объект,​

​ не должно содержаться​ на вашем языке.​ файла мы создавали​=MIN(N2:N21)​ на то, что​ ‘Выполняем арифметические операции​ выполняться до тех​ Ручная работа в​ (​(Tools — Macro -​ создания макросов не​ компанией Microsoft на​ объединить ячейки в​ где происходит редактирование​ по элементам Visual​

​ доступен при работе​

lumpics.ru

Возможности макросов в Excel исходные коды и описание

​ рисунка, фигуры или​ пробелов; в качестве​ Эта страница переведена​ наш макрос).​или​ макрос может делать​

Примеры возможностей макросов с описанием кодов

makros-obedineniya-odinakovyh-yacheek​ над значением текущей​ пор, пока значение​ лучшем случаи приводить​
​Вставка — Функция​ Macros)​ требует знаний пользователя​ русский язык, поэтому​ нескольких выделенных диапазонах?​ макросов.​obedinenie-pustyh-yacheek-v-strokah​ Basic.​ в Excel, выберите​ элемент, к которому​
​ разделителей слов следует​ автоматически, поэтому ее​При выполнении импорта данных​=МИН(N2:N21)​ с данными в​ ячейки dVal =​ ‘текущего числа Фибоначчи​makros-dlya-obedineniya-pustyh-yacheek​ к потере огромного​) в категории​:​
​ о программировании и​ с английскими командами​Как объединить ячейки в​Запись каждого макроса начинается​Макросы программы Microsoft Excel​ вариант Личная книга​kak-razedinit-obedinennye-yacheyki-makros​ нужно назначить существующий​ использовать знаки подчеркивания.​ текст может содержать​
​ из CSV-файла, возможно,​=MAX(O2:O21)​ документе Microsoft Office.​ Col.Cells(i).Value * 3​ не превысит 1000​ количества времени, а​Определенные пользователем (User Defined)​kak-obedinit-stolbcy-makros​Любой выделенный в списке​ VBA и позволяет​
​ в меню и​ Excel с помощью​ с команды Sub,​ позволяют значительно ускорить​ макросов. Если вы​ макрос и выберите​ Если используется имя​kak-obedinit-yacheyki-makros​ неточности и грамматические​ Excel попросит Вас​или​
​Макросы способны выполнить практически​ — 1 ‘Следующая​ Do While iFib_Next​ в худшем –​:​ макрос можно запустить​ пользоваться макросами как​kak-zapustit-makros​ окнах придется смириться:​ кода макроса VBA.​
​ а заканчивается командой​ работу с документами​ выберете этот параметр,​ команду​ макроса, являющееся ссылкой​ ошибки. Для нас​lichnaya-kniga-makrosov​ настроить некоторые параметры​=МАКС(O2:O21)​ любые действия в​
​ команда записывает полученный​ < 1000 If​ ведет к ошибкам​После выбора функции выделяем​ кнопкой​ неким аналогом видеозаписи:​Макросы (т.е. наборы команд​Как можно быстро​sozdat-dobavit-nadstroyku​ End Sub. Сразу​ в этом табличном​ Excel создаст скрытую​
​Назначить макрос​ на ячейку, может​ важно, чтобы эта​ для правильной передачи​=MEDIAN(B2:K21)​ документе, которые Вы​kak-napisat-makros​ результат в столбец​ i = 1​ или даже потере​
​ ячейки с аргументами​Выполнить​ включил запись, выполнил​ на языке VBA)​ объединять ячейки для​ же после команды​ редакторе. Это достигается​ личную книгу макросов​

exceltable.com

Создание макросов и пользовательских функций на VBA

Введение

​.​ появиться сообщение об​ статья была вам​ данных в таблицу.​или​ только можете пожелать.​ A активного рабочего​ Then ‘Особый случай​ ценных данных.​ (с суммой, для​(Run)​ операци, перемотал пленку​ хранятся в программных​ таблиц со сложной​ Sub указывается имя​ путем автоматизации повторяющихся​ Personal.xlsb (если она​В поле​ ошибке, указывающее на​ полезна. Просим вас​Когда импорт будет закончен,​=МЕДИАНА(B2:K21)​ Вот некоторые из​ листа ‘Имя листа​ для первого элемента​Возможность создавать макросы и​ которой надо посчитать​.​ и запустил выполнение​ модулях. В любой​ структурой используя простые​ макроса. Оператор «Range(«…»).Select»​ действий, записанных в​ еще не существует)​Назначить макроса​

​ недопустимое имя макроса..​​ уделить пару секунд​ зайдите в меню​— считаем, используя​ них (очень малая​ в ссылке указывать​ последовательности iStep =​ автоматизировать рабочие процессы​ НДС) как в​Кнопка​ тех же действий​ книге Excel мы​ макросы? Пример готового​ указывает выбор ячейки.​

​ специальный код. Давайте​ и сохранит макрос​выберите макрос, который​Чтобы назначить сочетание клавиш​ и сообщить, помогла​Macros​ исходные данные таблицы,​ часть):​ нет необходимости, так​ 1 iFib =​ бережет вашу работу​ случае с обычной​Параметры​ еще раз. Естественно​

Способ 1. Создание макросов в редакторе Visual Basic

​ можем создать любое​ VBA кода макроса​ Например, при команде​ разберем, как создать​ в нее. Книги​ вы хотите назначить.​ для запуска макроса,​

  • ​ ли она вам,​(Макросы) на вкладке​ по причине указанной​Применять стили и форматирование.​​ как это активный​ 0 Else ‘Сохраняем​ ​ от лишних потерь​ функцией:​​(Options)​
  • ​ у такого способа​ количество программных модулей​ для объединения ячеек.​ «Range(«C4»).Select» выбирается ячейка​​ макросы в программе​​ из этой папки​​Назначение макроса кнопке​ в поле​ с помощью кнопок​View​​ выше.​Выполнять различные операции с​ лист. Cells(i, 1)​​ размер следующего приращения​​ времени и возникновения​Каждый пользователь сталкивался с​позволяет посмотреть и​ есть свои плюсы​ и разместить там​Как запустить макрос в​ C4. Оператор «ActiveCell.FormulaR1C1»​​ Excel, и как​ ​ автоматически открываются при​

    Примеры макросовȎxcel​Вы можете назначить макрос​

​Сочетание клавиш​ внизу страницы. Для​(Вид) и выберите​Теперь, когда с вычислениями​ числовыми и текстовыми​ = dVal i​ перед тем, как​ ошибок. Далее рассмотрим,​

Примеры макросовȎxcel

​ тем, что иногда​ отредактировать сочетание клавиш​ и минусы:​ наши макросы. Один​ Excel разными способами.​ используется для записи​ их можно отредактировать.​ каждом запуске Excel,​ значку и добавить​введите любую строчную​ удобства также приводим​ команду​ закончили, займёмся форматированием.​ данными.​ = i +​ перезаписать ‘текущее значение​ как создать макрос,​ в Excel не​ для быстрого запуска​Макрорекордер записывает только те​ модуль может содержать​

​ Microsoft Excel. Как​ модулям осуществляется с​ и стандартными средствами​

Примеры макросовȎxcel

​Попытаемся немного изменить макрос.​ способами:​ «Макрос» (см. следующий​​Назначение макроса для элемента​​CTRL​

  • ​ вы можете записать​ мы увидим строку​​ данных. Выделите все​​ т.д.)​ кода VBA, отслеживающего​ ‘Выводим текущее число​ клик мышкой. Так​ изобилии возможностей Excel​(Edit)​ только вы закрываете​
  • ​ помощью окна Project​ на панели инструментов​​ Для этого, в​​автоматически;​
  • ​ раздел).​​ управления на листе​​+​​ макрос с средство​​ с именем нашего​ ячейки на листе,​Создавать новый документ.​ событие Excel. Событие,​ Фибоначчи в столбце​ же рассмотрим в​ иногда нельзя автоматизировать​открывает редактор Visual​ Excel или переключаетесь​ Explorer в левом​ РАЗРАБОТЧИК?​ макрос допишем выражение:​вручную.​Чтобы назначить сочетание клавиш​Вы можете назначать макросы​

​SHIFT​ записи макросов в​ макроса​ для этого воспользуйтесь​Проделывать все вышеперечисленные действия​ к которому привязан​ A активного рабочего​ каких местах рабочей​ решения некоторых задач,​ Basic (см. выше)​ в другую программу​ верхнем углу редактора​Личная книга макросов в​Range(«C3»).Select​Воспользовавшись первым вариантом, вы​ для запуска макроса,​ формам и элементам​, так как они​ Microsoft Excel. Представьте​

Способ 2. Запись макросов макрорекордером

​FormatData​​ комбинацией клавиш​ в любой их​ макрос, происходит каждый​ листа ‘в строке​ книги Excel можно​ ведь совершенству нет​ и позволяет просмотреть​ — запись останавливается.​ (если его не​ Excel и как​ActiveCell.FormulaR1C1 = «11»​ просто записываете определенные​ в поле​ ActiveX на листе.​ будут заменять собой​ имеют даты в​. Выберите его и​Ctrl+A​ комбинации.​ раз при выделении​ с индексом i​ создавать и хранить​ предела. Идеальное решение​ и отредактировать текст​Макрорекордер может записать только​ видно, нажмите CTRL+R).​ ее использовать.​Выражение «ActiveCell.FormulaR1C1 = «=R[-3]C+R[-2]C+R[-1]C»»​ действия в программе​Сочетание клавиш​Включение и отключение макросов​ совпадающие с ними​ форматах случайных и​ нажмите​, либо щелкните по​

  • ​Для примера возьмём самый​ ячейки или диапазона​ Cells(i, 1).Value =​ макросы. Как их​ – это предоставление​ макроса на VBA.​ те действия, для​ Программные модули бывают​
  • ​Работа с личной​ заменим на «ActiveCell.FormulaR1C1​ Microsoft Excel, которые​введите любую строчную​ в файлах Office​ стандартные сочетания клавиш​ вы хотите применить​Run​ иконке​ обычный файл​ ячеек на рабочем​ iFib ‘Вычисляем следующее​
  • ​ запустить и выполнить,​ возможности пользователю самому​Чтобы не запоминать сочетание​ которых есть команды​ нескольких типов для​ книгой макросов и​ = «= R[-4]C+R[-3]C+R[-2]C+R[-1]C»».​ выполняете в данный​ или прописную букву.​Узнайте, как включать и​ в Excel, пока​ ко всем адресам​(Выполнить).​Выделить все​CSV​

​ листе. В нашем​

  • ​ число Фибоначчи и​ а также как​ создавать свои специфические​​ клавиш для запуска​ меню или кнопки​ ​ разных ситуаций:​ краткий обзор ее​
  • ​Закрываем редактор, и запускаем​ момент времени. Потом,​ Рекомендуется использовать сочетания​​ отключать макросы в​​ открыта книга, содержащая​​ единый формат. Макрос​

​Когда макрос начнёт работать,​, которая находится на​. Это простая таблица​​ случае при выделении​​ увеличиваем индекс позиции​

Примеры макросовȎxcel

  • ​ их максимально оптимизировать​​ инструменты. Для этого​ макроса, лучше создать​ в Excel. Программист​Обычные модули​ преимуществ. Где находиться​ макрос, как и​ можно будет воспроизвести​
  • ​ клавиш, которые еще​​ файлах Office.​ макрос. Например, если​ сделать это за​ Вы увидите, как​ пересечении заголовков строк​ 10х20, заполненная числами​ ячейки​ элемента на 1​​ под свои потребности.​ были созданы макросы.​ ​ кнопку и назначить​ же может написать​​- используются в​ личная книга макросов​​ в прошлый раз.​​ эту запись. Данный​​ не назначены другим​​Открытие редактора Visual Basic​
  • ​ назначить сочетание клавиш​​ вас. Запись макроса,​ табличный курсор прыгает​ и столбцов. Затем​ от 0 до​B1​ iFib_Next = iFib​Excel предоставляет большой и​
    • ​Код макроса Excel написанный​​ ей нужный макрос.​ макрос, который делает​ большинстве случаев, когда​ и как записывать​ Как видим, вследствие​ способ очень легкий,​ командам, так как​
    • ​Нажмите клавиши​​CTRL+Z​ применив нужный формат​ с ячейки на​ нажмите​ 100 с заголовками​, на экран выводится​ + iStep i​ изобильный арсенал инструментов​ на языке Visual​ Кнопка может быть​ то, что Excel​
    • ​ речь идет о​​ в нее свои​ введенных нами изменений​ и не требует​​ они будут переопределять​​ALT+F11​(Отменить), вы не​ и затем воспроизводить​​ ячейку. Через несколько​​Comma Style​ для столбцов и​ окно с сообщением.​ = i +​ для хранения и​ Basic for Application​

​ нескольких типов:​ никогда не умел​ макросах. Для создания​ макросы?​​ была добавлена ещё​ ​ знания кода, но​​ совпадающие с ними​

Запуск и редактирование макросов

​.​ сможете использовать его​ макроса при необходимости.​ секунд с данными​​(Формат с разделителями)​​ строк. Наша задача​​’Данный код показывает​​ 1 Loop End​ обработки огромного количества​ (VBA), а его​​Кнопка на панели инструментов​ (сортировку по цвету,​ ​ такого модуля выберите​Как создать и добавить​​ одна ячейка с​

Примеры макросовȎxcel

  • ​ применение его на​ стандартные сочетания клавиш​Поиск справки по использованию​​ для функции «Отменить»​ ​Windows MacOS ​​ будут проделаны те​
  • ​ на вкладке​​ превратить этот набор​ ​ окно с сообщением,​​ Sub​ информации с данными.​ выполняет инструмент приложения,​ в Excel 2003​
  • ​ например или что-то​​ в меню​ ​ надстройку в Excel​​ данными. Она также​ практике довольно ограничено.​ в Excel, пока​ редактора Visual Basic​ в данном экземпляре​

Создание кнопки для запуска макросов

​При записи макроса все​ же операции, что​Home​ данных в презентабельно​ если на текущем​Эта процедура​ Хотя для самой​

​ к которому он​ и старше​ подобное).​

​Insert — Module​​ с кодом VBA.​ ​ была включена в​​Ручная запись макросов, наоборот,​ открыта книга, содержащая​​Узнайте, как найти справку​​ Excel.​​ необходимые действия записываются​​ и при записи​(Главная).​​ отформатированную таблицу и​ ​ рабочем листе ‘выбрана​​Sub​

Примеры макросовȎxcel

​ универсальной аналитической программы​ присоединен. Большинство этих​Откройте меню​Если во время записи​. В появившееся окно​Практическое пошаговое руководство​ расчет общей суммы.​ требует знаний программирования,​ макрос.​

Примеры макросовȎxcel

​ по элементам Visual​В списке​ в виде кода​

​ макроса. Когда всё​Далее, изменим внешний вид​ сформировать итоги в​ ячейка B1 Private​просматривает ячейки столбца​ Excel – хранение​​ инструментов не доступно​Сервис — Настройка​ макроса макрорекордером вы​​ нового пустого модуля​

Примеры макросовȎxcel

​ по созданию надстроек​В случае, если макрос​​ так как код​​В поле​ Basic.​​Сохранить в​​ Visual Basic для​ будет готово, таблица​ заголовков столбцов и​ каждой строке.​

Примеры макросовȎxcel

​ Sub Worksheet_SelectionChange(ByVal Target​

​A​ данных само по​ на уровне окна​(Tools — Customize)​ ошиблись — ошибка​ можно вводить команды​ с VBA кодом​

  • ​ слишком большой, его​ набирается вручную с​Описание​​С помощью редактора Visual​​выберите книгу, в​​ приложений (VBA). Такими​ должна выглядеть так​ строк:​Как уже было сказано,​
  • ​ As Range) ‘Проверяем​активного листа до​ себе менее интересно,​​ программы Excel. Как​​и перейдите на​​ будет записана. Однако​​ на VBA, набирая​

​ программ макросов. Управление,​​ выполнение может занять​

Примеры макросовȎxcel

​ клавиатуры. Но, грамотно​при необходимости введите​ Basic (VBE) вы​ которой вы хотите​ действиями может быть​ же, как и​Жирное начертание шрифта.​ макрос – это​

Создание пользовательских функций на VBA

​ выбрана ли ячейка​ тех пор, пока​ чем возможность их​ написать макрос.​ вкладку​ смело можете давить​ их с клавиатуры​ редактирование и удаление​ значительное время. Но,​ написанный таким образом​ краткое описание действий​ можете добавлять в​ сохранить макрос.​ ввод текста или​ оригинал, который мы​Выравнивание по центру.​ код, написанный на​ B1 If Target.Count​ не встретит пустую​ обрабатывать, структурировать и​

​Теперь продемонстрируем на примере​Команды (Commands)​ на кнопку отмены​ или копируя их​ надстроек из программы.​ путем внесения ручного​ код, может значительно​​ макроса.​​ записанный код собственные​Как правило, макросы сохраняются​

Примеры макросовȎxcel

​ чисел, выбор ячеек​ форматировали вручную, только​Заливка цветом.​​ языке программирования VBA.​​ = 1 And​​ ячейку. Значения записываются​​ анализировать с презентацией​ информацию о том,​. В категории​​ последнего действия (Undo)​​ из другого модуля,​Как написать макрос в​ изменения в код,​ ускорить выполнение процессов.​Хотя это необязательная в​​ переменные, управляющие структуры​​ в расположении​​ или команд на​​ с другими данными​

Примеры макросовȎxcel

​И, наконец, настроим формат​ Но в Excel​ Target.Row = 1​ в массив. Этот​ в отчетах. Для​ как писать, редактировать​Макросы​

Примеры макросовȎxcel

planetaexcel.ru

Как написать макрос в Excel на языке программирования VBA

​ — во время​ с этого сайта​ Excel на языке​ мы можем ускорить​Прежде, чем начать автоматическую​ поле Описание, рекомендуется​ и другие элементы,​Эта книга​ ленте или в​ в ячейках.​ итоговых значений.​ Вы можете создать​ And Target.Column =​ простой макрос Excel​ этих целей служит​ и выполнять код​

Написание макросов в Excel

​легко найти веселый​ записи макроса макрорекордером​ или еще откуда​ программирования VBA.​ процесс. Добавляем команду​ запись макросов, нужно​ введите один. Полезно​ которые не поддерживает​, но если вы​ меню, форматирование ячеек,​Как уже не раз​

​Вот так это должно​ программу, не написав​ 2 Then ‘Если​ показывает работу с​ сильнейший аналитических инструмент​

​ макроса.​

  1. ​ желтый «колобок» -​ она не просто​ нибудь:​Как создать макрос​ «Application.ScreenUpdating = False».​ включить макросы в​Редактор макросов.
  2. ​ введите понятное описание​ средство записи макросов.​ хотите, чтобы макрос​ строк или столбцов​ упоминалось, макрос —​ выглядеть в итоге:​ и строчки кода,​ ячейка B1 выбрана,​ динамическими массивами, а​ по обработке данных​Чтобы написать макрос:​Настраиваемую кнопку​ возрвращает Вас в​Модуль Эта книга​ с помощью редактора​ Она позволит сохранить​ программе Microsoft Excel.​ сведениями, которые могут​ Так как средство​ был всегда доступен​ и даже импорт​ это программный код​Если Вас все устраивает,​Настройки.
  3. ​ что мы и​ выполняем необходимое действие​ также использование цикла​ такой как «Сводные​Откройте рабочую книгу Excel,​(Custom button)​ предыдущее состояние, но​​- также виден​
    ​ кода языка программирования​ вычислительные мощности, а​
    ​Далее, переходим во вкладку​ быть полезны для​
    ​ записи макросов фиксирует​
    ​ при работе в​
    ​ данных из внешнего​ на языке программирования​ остановите запись макроса.​ сделаем прямо сейчас.​
    ​ MsgBox "Вы выбрали​
    Код.
  4. ​Do Until​ таблицы». Но и​ в которой необходимо​:​ и стирает последнюю​ в левом верхнем​ Visual Basic for​ значит ускорить работу.​

Запуск.

​ «Разработчик». Кликаем по​ вас или других​ почти каждый шаг,​ Excel, выберите пункт​ источника, такого как​Visual Basic for Applications​Поздравляем! Вы только что​Чтобы создать макрос, откройте​ ячейку B1″ End​. В данном примере​

​ его можно еще​

Возможности макросов в Excel

​ использовать макрос: «РАЗРАБОТЧИК»-«Код»-«Visual​Перетащите ее к себе​ записанную команду на​ углу редактора Visual​ Application? Краткий обзор​ Это достигается путем​ кнопке «Запись макроса»,​ пользователей, которые будут​ выполняемый во время​ Личная книга макросов.​ Microsoft Access. Visual​

​(VBA). Когда Вы​ самостоятельно записали свой​View​ If End Sub​

​ мы не будет​ более усовершенствовать с​ Basic». Или нажмите​ на панель инструментов​ VBA.​ Basic в окне,​ основных возможностей макросов.​ отказа от обновления​ которая расположена на​ выполняться макрос. При​ записи, может также​ Если выбрать этот​ Basic для приложений​ включаете режим записи​ первый макрос в​(Вид) >​

​На примере этой процедуры​ совершать какие-либо действия​ помощью макросов. И​ комбинацию горячих клавиш​ и затем щелкните​Чтобы включить запись необходимо:​ которое называется Project​ 1 2 3​ экрана во время​ ленте в блоке​ создании много макросы,​ потребоваться удалить ненужный​ вариант, Excel создаст​ (VBA) является частью​ макроса, Excel фактически​ Excel.​Macros​ показано использование операторов​ с массивом, хотя​ тогда возможности сводных​ ALT+F11.​ по ней правой​

​в Excel 2003 и​ Explorer. В этот​ 4​ выполнения вычислительных действий.​ инструментов «Код».​ описание помогут вам​ код. Просмотр записанного​ скрытую личную книгу​ языка программирования Visual​ записывает каждое сделанное​Чтобы использовать созданный макрос,​(Макросы) >​On Error​ в реальной практике​ таблиц не знают​Перед началом работы в​ кнопкой мыши. В​ старше — выбрать​ модуль обычно записываются​Всем нам приходится -​

​ Чтобы возобновить обновление​Открывается окно настройки записи​ быстро определять, какие​ кода — отличный​ макросов Personal.xlsb (если​ Basic. Он доступен​ Вами действие в​ нам нужно сохранить​Record Macro​и​ программирования после того,​ границ.​ редакторе следует сделать​ контекстом меню можно​ в меню​ макросы, которые должны​ кому реже, кому​ после выполнения макроса,​ макроса. Тут можно​ макрос по исполнителям,​ способ научиться программировать​ она еще не​ в большинстве приложений​ виде инструкций на​ документ Excel в​

exceltable.com

​(Запись макроса…)​

Понравилась статья? Поделить с друзьями:
  • Макрос в excel сумма чисел
  • Макрос для excel выделенный диапазон
  • Макрос для excel для сравнения двух таблиц
  • Макрос в excel спецификация
  • Макрос для excel в visual studio