Макрос создания документов excel по данным таблицы excel

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

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

Мы с Вами уже выгружали данные по шаблону через клиент Access из базы MSSql 2008 в Word и Excel вот в этой статье —  Выгрузка данных из Access в шаблон Word и Excel. Но сейчас допустим, у нас данные располагаются в базе, в клиенте которой нельзя или слишком трудоемко реализовать такую задачу, поэтому мы просто выгрузим необходимые данные в Excel и на основе таких данных по шаблону сформируем наши документы.

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

Напомню, что на данном сайте тема VBA Excel уже затрагивалась, например, в материале – Запрет доступа к листу Excel с помощью пароля

И так приступим!

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

Примечание! Программировать будем в Excel 2010.

И для начала приведем исходные данные, т.е. сами данные и шаблон

Данные.

Скриншот 1

Лист, на котором расположены эти данные так и назовем «Данные»

Шаблон.

Скриншот 2

Лист, на котором расположен шаблон, тоже так и назовем «Шаблон»

Далее, нам необходимо присвоить имена полей для вставки, так более удобней к ним обращаться чем, например, по номеру ячейки.

Это делается очень просто, выделяете необходимую ячейку или диапазон, и жмете правой кнопкой мыши и выбираете «Присвоить имя», пишите имя ячейки и жмете «ОК»

Курс по SQL для начинающих

Скриншот 3

Свои поля я назвал следующим образом:

  • ФИО – fio;
  • № — number;
  • Должность – dolgn;
  • Адрес проживания – addres;
  • Тел. № сотрудника – phone;
  • Комментарий – comment.

Код макроса на VBA Excel

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

Примечание! По умолчанию данной вкладке в Excel 2010 может и не быть, чтобы ее отобразить нажмите правой кнопкой по ленте пункт меню «Настройка ленты»

Скриншот 4

затем, в правой области поставьте галочку напротив пункта «Разработчик»

Скриншот 5

После вкладка разработчик станет отображаться на ленте.

Далее, когда Вы откроете вкладку разработчик и нажмете кнопку «Макросы» у Вас отобразится окно создания макроса, Вы пишите название макросы и жмете «создать».

Скриншот 6

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

Sub Карточка()
'Книга
NewBook = ""
' Путь, где будут храниться наши карточки
' Т.е. в той папке, откуда запустился файл с макросом
Path = ThisWorkbook.Path
' Выбираем лист с данными
Sheets("Данные").Select
' Запускаем цикл, скажем на 100000 итераций
' Начиная со второй строки, не учитывая заголовок
For i = 2 To 100000
' Выйдем из него, когда фамилии закончатся, т.е. строки
If Cells(i, 1).Value = "" Then
        i = 100000
    Exit For
End If
' Имя файла карточки, назовем по фамилии
Name_file = Path & "" & Sheets("Данные").Cells(i, 1).Value & ".xls"
‘Выбираем лист с шаблоном
Sheets("Шаблон").Select
' Присваиваем значения нашим ячейкам, по именам которые мы задавали
    Range("fio").Value = Sheets("Данные").Cells(i, 1).Value & " " & _
        Sheets("Данные").Cells(i, 2).Value & " " & Sheets("Данные").Cells(i, 3).Value
    Range("number").Value = Sheets("Данные").Cells(i, 4).Value
    Range("addres").Value = Sheets("Данные").Cells(i, 5).Value
    Range("dolgn").Value = Sheets("Данные").Cells(i, 6).Value
    Range("phone").Value = Sheets("Данные").Cells(i, 7).Value
    Range("comment").Value = Sheets("Данные").Cells(i, 8).Value
    ' Копируем все
    Cells.Select
    Selection.Copy
    ' Создаем новую книгу или делаем ее активной 
    If NewBook = "" Then
        Workbooks.Add
        NewBook = ActiveWorkbook.Name
    Else
        Workbooks(NewBook).Activate
        Cells(1, 1).Select
    End If
    ' Вставляем данные в эту книгу
    Application.DisplayAlerts = False
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ' Сохраняем с нашим новым названием
    ActiveWorkbook.SaveAs Filename:= _
    Name_file, FileFormat:=xlExcel8, _
    Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
    CreateBackup:=False
    NewBook = ActiveWorkbook.Name
    Application.DisplayAlerts = True
    ' Снова активируем файл с макросом и выбираем лист
    Workbooks("Макрос.xls").Activate
    Sheets("Данные").Select
' Переходим к следующей строке
Next i
' Закроем книгу
Workbooks(NewBook).Close
' Выведем сообщение об окончании
MsgBox ("Выполнено!")
End Sub

Теперь осталось выполнить этот макрос, для этого откройте вкладку разработчик->макросы->выполнить наш макрос:

Скриншот 7

и после выполнения у Вас в той же папке появится вот такие файлы

Скриншот 8

Вот с таким содержимым:

Скриншот 9

Для удобства можете на листе с данными создать кнопку и задать ей событие выполнить наш только что созданный макрос, и после чего простым нажатием выполнять этот макрос. Вот и все! Удачи!

  • Документы Word
  • Создание файлов
  • Работа с файлами

Таблица Excel с исходными данными для создания документов Word

Макрос предназначен для программного создания документов Word на основе шаблона

(без использования функции слияния в Word)

В прикреплённом к статье архиве находятся 2 файла:

  • шаблон договора в формате Microsoft Word (расширение .dot)
  • файл Excel с макросом

Настройки макроса задаются в коде:

Const ИмяФайлаШаблона = «шаблон.dot»
Const КоличествоОбрабатываемыхСтолбцов = 8
Const РасширениеСоздаваемыхФайлов = «.doc»

При нажатии кнопки запуска макрос на основе шаблона dot создаёт очередной файл, и в этом документе производит замену текста («кода поля») из первой строки файла Excel на значение поля (из очередной строки с данными файла Excel)

Папка для сформированных документов создаётся автоматически, и содержит в имени текущую дату и время
(например, созданная папка будет называться Договоры, сформированные 01-05-2011 в 15-03-24)

Имена создаваемых файлов формируются объединением полей фамилия, имя и отчество, с добавлением расширения doc

PS: Макрос был написан достаточно давно, когда я только начинал изучать VBA, — так что код недостаточно универсален.

Но, в качестве примера, пожалуй, подойдёт (если вам нужен более функциональный макрос, воспользуйтесь универсальной надстройкой (см. ниже))

Ознакомьтесь также с универсальной надстройкой формирования документов по шаблонам,
которая может делать всё тоже самое, что и эта программа,
только в качестве шаблонов могут выступать, помимо документов Word, ещё текстовые файлы, и книги Excel.

В надстройке — много возможностей, и полезных дополнений: склонение ФИО в родительный и дательный падежи, автоматический вывод на печать (с заданным количеством копий), размещение созданных файлов в разных папках, создание и рассылка писем со вложениями, и множество других полезных функций.

По вышеприведённой ссылке программа заполнения документов Word из Excel доступна для бесплатного скачивания.

Внимание: просьбы о доработке макроса, описанного в этой статье, не принимаются.

Есть новая (универсальная) версия, — в которой уже есть практически всё, что может понадобиться.

  • 197090 просмотров

Не получается применить макрос? Не удаётся изменить код под свои нужды?

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

Макрос создания текстовых файлов по таблице Excel

  • Макросы VBA Excel
  • Работа с диапазонами ячеек и листами
  • Текстовые строки
  • Текстовые файлы
  • Обработка таблиц
  • Текстовые файлы
  • Книги Excel
  • Перевод и кодировка
  • текстовые строки
  • Работа с файлами
  • Разное

Макрос предназначен для создания текстовых файлов в кодировке UTF-8.

Исходными данными является таблица Excel из 12 столбцов.

Сначала, макрос создаёт папку для будущих текстовых файлов.
Папка создаётся в том же каталоге, где расположена книга Excel.

Далее, для каждой строки таблицы, макрос формирует подпапку,
используя в качестве её названия текст из 7-го столбца таблицы.

И потом, когда папка для файла создана, макрос создаёт текстовый файл с содержимым из 10 столбца таблицы,
и сохраняет его под именем, взятым из второго столбца той же таблицы Excel.
После создания файла, у него меняется кодировка на UTF-8 (изначально, при создании, файлы имеют кодировку Unicode)

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

Пример макроса смотрите в прикреплённом файле.


Код макроса, создающего папки, подпапки, и текстовые файлы по данным из таблицы Excel:

Sub СозданиеТекстовыхФайлов()
    On Error Resume Next
    Dim cell As Range, ra As Range
    Set ra = Range([A2], Range("A" & Rows.Count).End(xlUp)).Resize(, 11)
    arr = ra.Value    ' считываем данные в массив

    Set FSO = CreateObject("scripting.filesystemobject")
    ' создаём главную папку
    BaseFolder$ = ThisWorkbook.Path & "Товар по группам": MkDir BaseFolder$
 
    ' перебираем все строки
    For i = LBound(arr) To UBound(arr)
        ' создаём папку для очередной строки (если папки ещё нет)
        Folder$ = BaseFolder$ & arr(i, 7) & ""    ' имя папки - в столбце G
        MkDir Folder$
 
        ' формируем имя создаваемого текстового файла
        Filename$ = Folder$ & Trim(arr(i, 2)) & ".txt"
 
        ' создаём файл в кодировке Unicode
        Set ts = FSO.CreateTextFile(Filename$, True, True)
        ts.Write Trim(arr(i, 10))    ' данные в файл - из ячейки 10-го столбца
        ts.Close
 
        ' если текстовый файл нужен в другой кодировке
        ChangeFileCharset Filename$, "utf-8"
    Next i
 
    Set ts = Nothing: Set FSO = Nothing
    MsgBox "Файлы созданы, и помещены в папку" & vbNewLine & BaseFolder$, vbInformation, "Готово"
 
    ' открываем папку с файлами
    CreateObject("wscript.shell").Run "explorer.exe /e, """ & BaseFolder$ & """"
End Sub

Вложение

Размер

Загрузки

Последняя загрузка

prays.xls

38.5 КБ

170

8 часов 11 минут назад

  • 35605 просмотров

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

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

Создание документа или отчета из шаблона

Допустим, у нас есть реестр документов или база данных Excel с какой-либо информацией. Чтобы создать документ или отчет и заполнить его данными, необходим его шаблон (печатная форма).

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

  • В коде VBA. Такой способ возможен для несложных печатных форм.
  • В рабочей книге Excel с реестром или базой данных на скрытом листе.
  • В отдельном файле, который не обязательно сохранять как шаблон Excel (*.xlt*).

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

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

Назовем лист с шаблоном документа или отчета — «Shablon». Для создания новой печатной формы скрытый лист с шаблоном необходимо скопировать:

With Worksheets(«Shablon»)

  .Visible = True

  .Copy After:=Worksheets(Worksheets.Count)

  .Visible = False

End With

Данный код вставит новый лист с шаблоном в ту же книгу после всех имеющихся листов. Чтобы шаблон скопировать в новую книгу, заменяем строку .Copy After:=Worksheets(Worksheets.Count) на .Copy. Печатная форма откроется в новом файле.

Сразу после создания, обращаться к новому листу можно как к активному (ActiveSheet), даже в том случае, если он скопирован в новую книгу. Чтобы воспользоваться этой возможностью, порядок действий в программе должен быть следующим:

  1. Копирование информации в переменную массива из реестра или базы данных.
  2. Создание нового документа или отчета из шаблона.
  3. Заполнение документа или отчета, обращаясь к нему как к ActiveSheet.

Копирование информации и заполнение формы

Копирование информации

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

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

Допустим, что лист называется «Reestr», а необходимая информация расположена в десяти первых ячейках каждой строки:

Dim nomer As Long, massiv() As Variant

nomer = ActiveCell.Row

massiv = Range(Cells(nomer, 1), Cells(nomer, 10))

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

Dim nomer1 As Long, nomer2 As Long, massiv() As Variant

nomer1 = Selection.Cells(1).Row

nomer2 = Selection.Cells(Selection.Cells.Count).Row

massiv = Range(Cells(nomer1, 1), Cells(nomer2, 10))

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

Если требуется обработка данных для отчета, проводим ее в массиве. Для результатов обработки можно объявить еще одну переменную массива.

Создание и заполнение формы

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

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

Чтобы не наблюдать за мерцаниями экрана во время выполнения процедуры VBA Excel, можно временно отключить его обновления:

Sub GeneratsiyaDokumenta()

Application.ScreenUpdating = False

операторы

Application.ScreenUpdating = True

End Sub

Удаление печатной формы

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

Для этого необходимо на лист шаблона правее печатной формы вставить кнопку из коллекции «Элементы управления ActiveX». Дважды кликнуть по ней и в открывшемся модуле листа внутрь автоматически сгенерированного объявления процедуры вставить строку Call UdaleniyeLista:

Sub CommandButton1_Click()

  Call UdaleniyeLista

End Sub

Затем в модуль текущей книги добавляем процедуру:

Sub UdaleniyeLista()

  Application.DisplayAlerts = False

    ActiveSheet.Delete

  Application.DisplayAlerts = True

End Sub

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

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

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

Процесс заполнения бланков документов в Excel можно автоматизировать. Одним из способов автоматизации является использование надстройки для заполнения подготовленных бланков документов.

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

kak zapolnit rabochie knigi dannymi aktivnogo lista

CompleteSolutionнадстройка для заполнения бланков и шаблонов в Excel

Заполнение бланков Excel исходными данными по списку

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

 Надстройка также позволяет выбирать сразу несколько шаблонов для заполнения.

avtomaticheskoe zapolnenie blankov excel po spisku

CompleteSolution

надстройка для заполнения бланков и шаблонов в Excel по списку

Другие материалы по теме:

На чтение 3 мин. Просмотров 11.1k.

Что делает макрос: Следующий макрос копирует диапазон ячеек из активного листа и вставляет данные в новую книгу.

Содержание

  1. Код макроса
  2. Как работает этот код
  3. Как использовать

Код макроса

Sub SozdatFajl()
'Шаг 1 - копируем данные с листа
Sheets("Продажи").Range("B4:C15").Copy

'Шаг 2 - создаем новую книгу
Workbooks.Add

'Шаг 3 - вставляем данные
ActiveSheet.Paste Destination:=Range("A1")

'Шаг 4 - отключаем системные сообщения
Application.DisplayAlerts = False

'Шаг 5 - сохраняем по нужному адресу
ActiveWorkbook.SaveAs _
Filename:="C:ОтчетыПродажиМесяц.xlsx"

'Шаг 6 - включаем системные сообщения
Application.DisplayAlerts = True
End Sub

Как работает этот код

  1. Копируем данные из ячеек B4:С15. Обратите внимание, что мы указываем полный адрес с именем листа и диапазона. Это позволит не допустить ошибки, если у Вас открыто несколько файлов Excel одновременно.
  2. Используем метод Add объекта Workbook, чтобы создать новую рабочую книгу. Это тоже самое, если бы мы вручную нажали Файл➜Создать➜Новый документ
  3. На этом этапе используется метод Paste, чтобы отправить данные, которые вы скопировали в ячейку А1 новой книги. Обратите внимание на то, что код ссылается на объект  ActiveSheet. При создании новой книги она тут же становится активной. Если быть точнее, то становится активный лист в новой (только что созданной) книге.
  4. Далее используем метод DisplayAlerts. Используя свойство False — отключаем системные предупреждения Excel. Можно этого не делать, но мы можем запустить этот макрос несколько раз, и в этом случае Excel будет пытаться сохранить один и тот же файл несколько раз. Что происходит, когда вы пытаетесь сохранить книгу несколько раз? Правильно — Excel предупреждает, что в папке уже есть файл с таким же именем и спрашивает: «Хотите ли вы переписать ранее существующий файл?». Если мы не хотим, чтобы Excel при каждом сохранении спрашивал нас — подавляем это предупреждение.
  5. Сохраняем файл с помощью метода SaveAs. Обратите внимание, что мы пишем полный адрес, включая имя файла с расширением (при сохранении на рабочий стол
    ActiveWorkbook.SaveAs CreateObject(«WScript.Shell»). SpecialFolders(«Desktop») & «Отчет на 2016.xlsx»).
  6. Поскольку мы запретили показывать системные сообщения в пункте 4, мы должны включить их обратно. Если этого не сделать Excel будет подавлять все предупреждения, что не
    допустимо.

Как использовать

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код во вновь созданном модуле.
  5. Измените имя листа, диапазон ячеек, и место сохранения файла.

  1. Что делает макрос
  2. Код макроса
  3. Как работает макрос
  4. Как использовать
  5. Скачать файл

Ссылка на это место страницы:
#zadacha

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

Ссылка на это место страницы:
#formula

  1. Sub SozdatFajl()
  2. Sheets("Продажи").Range("B4:C15").Copy  
  3. Workbooks.Add 
  4. ActiveSheet.Paste Destination:=Range("A1")  
  5. Application.DisplayAlerts = False 
  6. ActiveWorkbook.SaveAs _ Filename:="C:ОтчетыПродажиМесяц.xlsx"  
  7. Application.DisplayAlerts = True
  8. End Sub

Ссылка на это место страницы:
#kak

1. Копируем данные из ячеек B4:С15. Обратите внимание, что мы указываем полный адрес с именем листа и диапазона. Это позволит не допустить ошибки, если у Вас открыто несколько файлов Excel одновременно.

2. Используем метод Add объекта Workbook, чтобы создать новую рабочую книгу. Это тоже самое, если бы мы вручную нажали Файл➜Создать➜Новый документ 

3. На этом этапе используется метод Paste, чтобы отправить данные, которые вы скопировали в ячейку А1 новой книги. Обратите внимание на то, что код ссылается на объект ActiveSheet. При создании новой книги она тут же становится активной. Если быть точнее, то становится активный лист в новой (только что созданной) книге. 

4. Далее используем метод DisplayAlerts. Используя свойство False — отключаем системные предупреждения Excel. Можно этого не делать, но мы можем запустить этот макрос несколько раз, и в этом случае Excel будет пытаться сохранить один и тот же файл несколько раз. Что происходит, когда вы пытаетесь сохранить книгу несколько раз? Правильно — Excel предупреждает, что в папке уже есть файл с таким же именем и спрашивает: «Хотите ли вы переписать ранее существующий файл?». Если мы не хотим, чтобы Excel при каждом сохранении спрашивал нас — подавляем это предупреждение. 

5. Сохраняем файл с помощью метода SaveAs. Обратите внимание, что мы пишем полный адрес, включая имя файла с расширением (при сохранении на рабочий стол ActiveWorkbook.SaveAs CreateObject(«WScript.Shell»). SpecialFolders(«Desktop») & «Отчет на 2016.xlsx»). 

6. Поскольку мы запретили показывать системные сообщения в пункте 4, мы должны включить их обратно. Если этого не сделать Excel будет подавлять все предупреждения, что не допустимо. 

Ссылка на это место страницы:
#touse

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль: 

1. Активируйте редактор Visual Basic, нажав ALT + F11
2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта. Выберите Insert➜Module
3. Введите или вставьте код во вновь созданном модуле. 
4. Измените имя листа, диапазон ячеек, и место сохранения файла.

Ссылка на это место страницы:
#file

Файлы статей доступны только зарегистрированным пользователям.

1. Введите свою почту

2. Нажмите Зарегистрироваться

3. Обновите страницу
Вместо этого блока появится ссылка для скачивания материалов.

Привет! Меня зовут Дмитрий. С 2014 года Microsoft Cretified Trainer. Вместе с командой управляем этим сайтом. Наша цель — помочь вам эффективнее работать в Excel. 

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

Подписывайтесь на нас в соц.сетях:

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

Предположим, что у нас есть следующие данные о продажах по регионам (рис. 3.31).

Внимание!

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

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

Рис. 3.31. Данные о продажах

Листинг 3.85. Создание документов Word на основе таблицы Excel

Sub ReportToWord()

Dim intReportCount As Integer ‘ Количество сообщений

Dim strForWho As String ‘ Получатель сообщения

Dim strSum As String ‘ Сумма за товар

Dim strProduct As String ‘ Название товара

Dim strOutFileName As String ‘ Имя файла для сохранения

сообщения

Dim strMessage As String ‘ Текст дополнительного сообщения

Dim rgData As Range ‘ Обрабатываемые ячейки

Dim objWord As Object

Dim i As Integer

‘ Создание объекта Word

Set objWord = CreateObject(«Word.Application»)

‘ Информация с рабочего листа

Set rgData = Range(«A1»)

strMessage = Range(«E6»)

‘ Просмотр записей на листе Лист1

intReportCount = Application.CountA(Range(«A:A»))

For i = 1 To intReportCount

‘ Динамические сообщения в строке состояния

Application.StatusBar = «Создание сообщения » & i

‘ Назначение данных переменным

strForWho = rgData.Cells(i, 1).Value

strProduct = rgData.Cells(i, 2).Value

strSum = Format(rgData.Cells(i, 3).Value, «#,000»)

‘ Имя файла для сохранения отчета

strOutFileName = ThisWorkbook.path & «» & strForWho &

«.doc»

‘ Передача команд в Word

With objWord

.Documents.Add

With .Selection

‘ Заголовок сообщения

.Font.Size = 14

.Font.Bold = True

.ParagraphFormat.Alignment = 1

.TypeText Text:=»О Т Ч Е Т»

‘ Дата

.TypeParagraph

.TypeParagraph

.Font.Size = 12

.ParagraphFormat.Alignment = 0

.Font.Bold = False

.TypeText Text:=»Дата:» & vbTab & _

Format(Date, «mmmm d, yyyy»)

‘ Получатель сообщения

.TypeParagraph

.TypeText Text:=»Кому: менеджеру » & vbTab &

strForWho

‘ Отправитель

.TypeParagraph

.TypeText Text:=»От:» & vbTab &

Application.UserName

‘ Сообщение

.TypeParagraph

.TypeParagraph

.TypeText strMessage

.TypeParagraph

.TypeParagraph

‘ Название товара

.TypeText Text:=»Продано товара:» & vbTab &

strProduct

.TypeParagraph

‘ Сумма за товар

.TypeText Text:=»На сумму:» & vbTab & _

Format(strSum, «$#,##0»)

End With

‘ Сохранение документа

.ActiveDocument.SaveAs FileName:=strOutFileName

End With

Next i

‘ Удаление объекта Word

objWord.Quit

Set objWord = Nothing

‘ Обновление строки состояния

Application.StatusBar = False

‘ Вывод на экран информационного сообщения

MsgBox intReportCount & » заметки создано и сохранено в папке » _

& ThisWorkbook.path

End Sub

В результате написания кода в окне выбора макросов станет доступным макрос ReportToWord. После его запуска начнется формирование отчетов (информация о состоянии процесса будет отображаться в строке состояния). По окончании процесса на экране отобразится окно с сообщением о том, что документы сформированы и помещены в ту папку, в которой хранится текущая рабочая книга. В рассматриваемом примере будут созданы три документа с именами Магазин 1.doc, Магазин 2.doc и Магазин 3.doc. Содержимое документа Магазин 1. doc показано на рис. 3.32 (другие документы выглядят аналогичным образом).

В рассматриваемом примере Lesha – это имя пользователя, который создал документ. Очевидно, что в результате внесения соответствующих изменений в код макроса форму создаваемого отчета можно корректировать по своему усмотрению.

Рис. 3.32. Документ Word, созданный на основе данных таблицы Excel

#Руководства

  • 23 май 2022

  • 0

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

Иллюстрация: Meery Mary для Skillbox Media

Ксеня Шестак

Рассказывает просто о сложных вещах из мира бизнеса и управления. До редактуры — пять лет в банке и три — в оценке имущества. Разбирается в Excel, финансах и корпоративной жизни.

Макрос (или макрокоманда) в Excel — алгоритм действий в программе, который объединён в одну команду. С помощью макроса можно выполнить несколько шагов в Excel, нажав на одну кнопку в меню или на сочетание клавиш.

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

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

В статье разберёмся:

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

Общий принцип работы макросов такой:

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

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

  • Автоматизировать повторяющиеся процедуры.

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

  • Объединять работу нескольких программ Microsoft Office.

    Например, с помощью одного макроса можно создать таблицу в Excel, вставить и сохранить её в документе Word и затем отправить в письме по Outlook.

  • Искать ячейки с данными и переносить их в другие файлы.

    Этот макрос пригодится, когда нужно найти информацию в нескольких объёмных документах. Макрос самостоятельно отыщет её и принесёт в заданный файл за несколько секунд.

  • Форматировать таблицы и заполнять их текстом.

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

  • Создавать шаблоны для ввода данных.

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

  • Создавать новые функции Excel.

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

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

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

Есть два способа создания макроса в Excel:

  • Написать макрос вручную.

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

  • Записать макрос с помощью кнопки меню Excel.

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

Разберёмся на примере, как создать макрос с помощью второго способа.

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

Так выглядят таблицы с продажами автосалона в первоначальном виде
Скриншот: Skillbox Media

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


Готовимся к записи макроса

Кнопки для работы с макросами в Excel находятся во вкладке «Разработчик». Эта вкладка по умолчанию скрыта, поэтому для начала разблокируем её.

В операционной системе Windows это делается так: переходим во вкладку «Файл» и выбираем пункты «Параметры» → «Настройка ленты». В открывшемся окне в разделе «Основные вкладки» находим пункт «Разработчик», отмечаем его галочкой и нажимаем кнопку «ОК» → в основном меню Excel появляется новая вкладка «Разработчик».

В операционной системе macOS это нужно делать по-другому. В самом верхнем меню нажимаем на вкладку «Excel» и выбираем пункт «Параметры…».

Нажимаем сюда, чтобы вызвать панель с дополнительными параметрами Excel в macOS
Скриншот: Skillbox Media

В появившемся окне нажимаем кнопку «Лента и панель».

Выбираем параметр «Лента и панель»
Скриншот: Skillbox Media

Затем в правой панели «Настроить ленту» ищем пункт «Разработчик» и отмечаем его галочкой. Нажимаем «Сохранить».

Отмечаем пункт «Разработчик» и сохраняем изменения
Скриншот: Skillbox Media

Готово — вкладка «Разработчик» появилась на основной панели Excel.

Теперь можно работать с макросами
Скриншот: Skillbox Media

Чтобы Excel смог сохранить и в дальнейшем использовать макрос, нужно пересохранить документ в формате, который поддерживает макросы. Это делается через команду «Сохранить как» на главной панели. В появившемся меню нужно выбрать формат «Книга Excel с поддержкой макросов».

Перед записью макросов нужно сохранить документ в формате с их поддержкой
Скриншот: Skillbox Media

Перед началом записи макроса важно знать об особенностях его работы:

  • Макрос записывает все действия пользователя.

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

  • Работу макроса нельзя отменить.

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

  • Макрос выполняет свой алгоритм только для записанного диапазона таблиц.

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

Для начала записи макроса перейдём на вкладку «Разработчик» и нажмём кнопку «Записать макрос».

Нажимаем сюда, чтобы начать запись макроса
Скриншот: Skillbox Media

Появляется окно для заполнения параметров макроса. Нужно заполнить поля: «Имя макроса», «Сохранить в», «Сочетание клавиш», «Описание».

Так выглядит окно с параметрами макроса
Скриншот: Skillbox Media

«Имя макроса» — здесь нужно придумать и ввести название для макроса. Лучше сделать его логически понятным, чтобы в дальнейшем можно было быстро его найти.

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

«Сохранить в» — здесь нужно выбрать книгу, в которую макрос сохранится после записи.

Если выбрать параметр «Эта книга», макрос будет доступен при работе только в этом файле Excel. Чтобы макрос был доступен всегда, нужно выбрать параметр «Личная книга макросов» — Excel создаст личную книгу макросов и сохранит новый макрос в неё.

«Сочетание клавиш» — здесь к уже выбранным двум клавишам (Ctrl + Shift в системе Windows и Option + Cmd в системе macOS) нужно добавить третью клавишу. Это должна быть строчная или прописная буква, которую ещё не используют в других быстрых командах компьютера или программы Excel.

В дальнейшем при нажатии этих трёх клавиш записанный макрос будет запускаться автоматически.

«Описание» — необязательное поле, но лучше его заполнять. Например, можно ввести туда последовательность действий, которые планируется записать в этом макросе. Так не придётся вспоминать, какие именно команды выполнит этот макрос, если нужно будет запустить его позже. Плюс будет проще ориентироваться среди других макросов.

В нашем случае с форматированием таблицы заполним поля записи макроса следующим образом и нажмём «ОК».

Заполняем поля и жмём «ОК», чтобы начать запись
Скриншот: Skillbox Media

После этого начнётся запись макроса — в нижнем левом углу окна Excel появится значок записи.

Началась запись макроса — теперь в него попадут все клики мышки и нажатия клавиш
Скриншот: Skillbox Media

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

Важно: в нашем случае у таблиц продаж за январь, февраль и март одинаковое количество столбцов, но разное количество строк. Чтобы в случае со второй и третьей таблицей макрос сработал корректно, при форматировании выделим диапазон так, чтобы в него попали не только строки самой таблицы, но и строки ниже неё. Для этого нужно выделить столбцы в строке с их буквенным обозначением A–G, как на рисунке ниже.

Так макрос будет работать и для таблиц с большим количеством строк
Скриншот: Skillbox Media

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

Так макрос отформатирует только выбранные строки: если в других таблицах строк окажется больше, они останутся в первоначальном виде
Скриншот: Skillbox Media

После всех манипуляций с оформлением таблица примет такой вид:

Так выглядит таблица после форматирования
Скриншот: Skillbox Media

Проверяем, все ли действия с таблицей мы выполнили, и останавливаем запись макроса. Сделать это можно двумя способами:

  • Нажать на кнопку записи в нижнем левом углу.
  • Перейти во вкладку «Разработчик» и нажать кнопку «Остановить запись».

Нажимаем сюда, чтобы остановить запись макроса
Скриншот: Skillbox Media

Готово — мы создали макрос для форматирования таблиц в границах столбцов A–G. Теперь его можно применить к другим таблицам.


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

Перейдём в лист со второй таблицей «Февраль_2022». В первоначальном виде она такая же нечитаемая, как и первая таблица до форматирования.

Так выглядит таблица до запуска макроса
Скриншот: Skillbox Media

Отформатируем её с помощью записанного макроса. Запустить макрос можно двумя способами:

  • Нажать комбинацию клавиш, которую выбрали при заполнении параметров макроса — в нашем случае Option + Cmd + Ф.
  • Перейти во вкладку «Разработчик» и нажать кнопку «Макросы».

Нажимаем сюда, чтобы вызвать панель для выбора макроса
Скриншот: Skillbox Media

Появляется окно — там выбираем макрос, который нужно запустить. В нашем случае он один — «Форматирование_таблицы». Под ним отображается описание того, какие действия он включает. Нажимаем «Выполнить».

Нажимаем сюда, чтобы запустить макрос для форматирования таблицы
Скриншот: Skillbox Media

Готово — вторая таблица с помощью макроса форматируется так же, как и первая.

За пару секунд с помощью макроса исходная таблица принимает такой вид
Скриншот: Skillbox Media

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

Научитесь: Excel + Google Таблицы с нуля до PRO
Узнать больше

Понравилась статья? Поделить с друзьями:
  • Макрос создает файл в excel
  • Макрос создает документ word
  • Макрос снять фильтр excel
  • Макрос следующая строка excel
  • Макрос скрытия ячеек excel