Полезные макросы в excel для экономиста

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

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

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

Как включить макросы в 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.

Источник

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

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

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

Моя история

Я ещё со школы начал изучать VBA. Читал книжки, пользовался макрорекордером (подсматривал код, изменял под себя).
Когда ты школьник, то верх мастерства сделать калькулятор или игру. Стал студентом — разработал инвестиционный проект строительства свиноводческого комплекса (вводишь пару основных цифр и программа говорит какая мощность комплекса нужна, сколько нужно людей и денег, плюс тонную документов с деталями цикла производства и план-график выхода на проектную мощность).

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

Представьте на минуту, что всю вашу рутину:

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

можно поручить Excel. ОДИН РАЗ прописать логику с помощью VBA и всё! Да, я знаю, что написание макроса иногда может занять неделю, а то и месяц. Но сколько вы каждый день/неделю/месяц тратите время на ерунду?

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

Про сборник

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

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

Если вы считаете, что что-то должно быть в списке, просто оставьте комментарий. Как только добавлю код — удалю комментарий, а про вас напишу в статье.

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

Вы сможете использовать эти коды, даже если до этого не использовали VBA.

Работа с Excel файлами (WorkBook)

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

Назад к списку тем

Работа с листами Excel файла (WorkSheets)

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

Назад к списку тем

Работа с диапазонами (Range)

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

  • Как выбрать и изменить форматирование диапазона
  • Как создать и выбрать именованный диапазон
  • Как сделать перебор диапазона ячеек
  • Как выбрать и форматировать диапазон
  • Как вставить пустые строки в диапазон
  • Как отобразить все скрытые строки и столбцы
  • Как удалить пустые строки
  • Как удалить пустые столбцы
  • Как отобрать и отформатировать все формулы на листе
  • Как найти первую пустую строку или столбец
  • Как применить дополнительный цвет заливки
  • Как отсортировать диапазоны по двойному щелчку
  • Как ограничить диапазон прокрутки в той или иной области
  • Как автоматически задать область печати листа

Назад к списку тем

Макросы для работы с данными

Эта часть посвящена управлению данными: их очистке, форматированию и т. д.

  • Как скопировать и вставить диапазон
  • Как преобразовать все формулы в диапазон с значениями
  • Как преобразовать текстовые значения в числовые
  • Как преобразовать тире в минус
  • Как удалить лишние пробелы из всех ячеек в диапазоне
  • Как отсечь слева 5 знаков в каждой ячейке диапазона
  • Как добавить в ячейку недостающие нули
  • Как заменить пустые ячейки нулём
  • Как добавить текст в начало или конец ячейки
  • Как создать макрос преобразования данных
  • Как очистить данные от непечатаемых символов
  • Как выделить дубликаты в диапазоне данных
  • Как скрыть повторяющиеся строки
  • Как выборочно скрыть стрелки автофильтра
  • Как скопировать отфильтрованные строки в новый Excel файл
  • Как создать новый лист для каждого элемента в автофильтре
  • Как показать отфильтрованные столбцы в строке состояния

Назад к списку тем

Макросы для сводных таблиц

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

Назад к списку тем

Макросы для графиков

  • Как изменить размер диаграмм на рабочем листе
  • Как привязать график к определенному диапазону
  • Как создать набора бессвязных диаграмм
  • Как распечатать всех диаграммы на рабочем листе
  • Как отметить первое и последнее значение на графике
  • Как сопоставить цвет диаграммы и исходных данных
  • Как сопоставить цвет точек графика и исходных данных

Назад к списку тем

Макросы для отправки писем из Excel

  • Как отправить Excel файл почтой (как вложение)
  • Как отправить диапазон значений в качестве вложения
  • Как отправить один листа файла в качестве вложения
  • Как отправить письмо со ссылкой на наши файлы
  • Как разослать письма с добавлением адресов в наш список контактов
  • Как сохранить все вложения в отдельной папке
  • Как сохранить определенные вложения в папку

Назад к списку тем

Макросы для работы с Access

  • Как выполнить запрос Access из Excel
  • Как запустить макрос Access из Excel
  • Как открыть отчет Access из Excel
  • Как открыть форму Access из Excel
  • Как сжать базу данных Access из Excel

Назад к списку тем

Макросы для работы с MS Word

  • Как отправить данные из Excel в Word документ
  • Как сделать слияние с Word документом

Назад к списку тем

Макросы для работы с PowerPoint

  • Как отправить данные Excel в PowerPoint
  • Как отправить график из Excel в PowerPoint
  • Как преобразовать рабочую книгу в презентацию PowerPoint

Назад к списку тем

Уже добавили страницу в закладки? Зря, я же пополняю список)

Источник