GigaChat (68)

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

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

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

1. Форматирование данных

Этот макрос автоматически применяет к выделенному диапазону ячеек числовой формат с двумя знаками после запятой, добавляет границы и заливает строки через одну для лучшей читаемости.

Sub FormatReport()
Dim rng As Range
Set rng = Selection ‘ Работа происходит с выделенным диапазоном

With rng
.NumberFormat = “#,##0.00” ‘ Формат числа
.Font.Name = “Calibri”
.Font.Size = 11

‘ Добавление границ
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin

‘ Заливка строк через одну
Dim i As Long
For i = 1 To rng.Rows.Count Step 2
rng.Rows(i).Interior.Color = RGB(245, 245, 245)
Next i
End With
End Sub

Применение: Идеально подходит для приведения отчетов к единому корпоративному стилю перед отправкой руководству.

2. Обработка и очистка данных

Макрос удаляет все пустые строки в используемом диапазоне активного листа. Это часто необходимо при подготовке данных для анализа, чтобы избежать ошибок в формулах.

Sub DeleteEmptyRows()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long

Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, “A”).End(xlUp).Row ‘ Находим последнюю строку в столбце A

Application.ScreenUpdating = False ‘ Ускоряем выполнение макроса

For i = lastRow To 2 Step -1 ‘ Двигаемся снизу вверх
If WorksheetFunction.CountA(ws.Rows(i)) = 0 Then
ws.Rows(i).Delete
End If
Next i

Application.ScreenUpdating = True
End Sub

Применение: Очистка выгрузок из других систем (например, CRM или 1С) от лишних строк.

3. Создание отчетов и сводных таблиц

Этот макрос создает новый лист, вставляет на него сводную таблицу на основе данных с листа “Данные”, настраивает поля и базовое форматирование.

Sub CreateSalesPivot()
Dim ptCache As PivotCache
Dim pt As PivotTable
Dim wsData As Worksheet, wsPT As Worksheet

On Error Resume Next
Set wsData = ThisWorkbook.Sheets(“Данные”)
If wsData Is Nothing Then Exit Sub ‘ Проверяем наличие листа-источника
On Error GoTo 0

‘ Создаем новый лист для сводной таблицы
Set wsPT = Worksheets.Add(After:=wsData)
wsPT.Name = “Отчет_Продажи”

‘ Создаем кэш сводной таблицы
Set ptCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=wsData.Range(“A1”).CurrentRegion)

‘ Создаем саму сводную таблицу
Set pt = ptCache.CreatePivotTable(TableDestination:=wsPT.Range(“A3″), TableName:=”Pivot_Sales”)

‘ Настраиваем поля
With pt
.PivotFields(“Категория товара”).Orientation = xlPageField
.PivotFields(“Регион”).Orientation = xlColumnField
.PivotFields(“Менеджер”).Orientation = xlRowField
.AddDataField .PivotFields(“Сумма продажи”), “Сумма продаж”, xlSum
.PivotFields(“Сумма продажи”).NumberFormat = “#,##0 руб.”
End With

MsgBox “Сводная таблица успешно создана на новом листе!”, vbInformation
End Sub

Применение: Автоматизация еженедельного или ежемесячного процесса создания управленческой отчетности.

4. Взаимодействие с пользователем и файлами

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

Sub SaveCopyWithDate()
Dim filePath As String
Dim userDate As Date

‘ Запрашиваем дату у пользователя
userDate = InputBox(“Введите дату начала периода (в формате дд.мм.гггг):”, “Дата отчета”)
If Not IsDate(userDate) Then
MsgBox “Неверный формат даты.”, vbCritical
Exit Sub
End If

‘ Формируем новое имя файла
filePath = ThisWorkbook.Path & “\Архив\Отчет_” & Format(userDate, “dd_mm_yyyy”) & “.xlsx”

‘ Сохраняем копию
ThisWorkbook.SaveCopyAs Filename:=filePath

MsgBox “Копия отчета сохранена как: ” & filePath, vbInformation
End Sub

Применение: Стандартизация именования файлов и их автоматического архивирования.

Для использования любого из этих макросов необходимо открыть редактор VBA в Excel (Alt + F11), вставить новый модуль (Insert -> Module) и скопировать туда код. После этого макрос можно запустить через Alt + F8.