Уроки макросів Excel VBA для початківців з прикладами

  • Поділитися Цим
Michael Brown

Зміст

У цьому посібнику ви дізнаєтеся, як записати макрос і вставити код VBA в Excel, копіювати макроси з однієї книги в іншу, вмикати і вимикати їх, переглядати код, вносити зміни і багато іншого.

Для новачків в Excel концепція макросів часто виглядає нездоланною. Дійсно, на освоєння VBA можуть піти місяці або навіть роки навчання. Однак це не означає, що ви не можете скористатися можливостями автоматизації за допомогою макросів Excel відразу. Навіть якщо ви повний новачок в програмуванні на VBA, ви можете легко записати макрос для автоматизації деяких ваших повторюваних завдань.

Ця стаття - ваша точка входу в захоплюючий світ макросів Excel. Вона охоплює основні основи, які вам потрібно знати для початку роботи, і містить посилання на відповідні поглиблені навчальні посібники.

    Що таке макроси в Excel?

    Макрос Excel - це набір команд або інструкцій, що зберігаються в робочій книзі у вигляді коду VBA. Його можна розглядати як невелику програму для виконання заздалегідь визначеної послідовності дій. Одного разу створені макроси можна використовувати повторно в будь-який час. Запуск макросу призводить до виконання команд, що містяться в ньому.

    Як правило, макроси використовуються для автоматизації повторюваних завдань і повсякденних рутинних дій. Кваліфіковані розробники VBA можуть писати дійсно складні макроси, які виходять далеко за рамки скорочення кількості натискань клавіш.

    Досить часто можна почути, як люди називають "макрос" "VBA". Технічно є різниця: макрос - це фрагмент коду, а Visual Basic for Applications (VBA) - це мова програмування, створена компанією Microsoft для написання макросів.

    Основне призначення макросів - виконувати більше роботи за менший час. Подібно до того, як ви використовуєте формули для обчислення чисел і маніпулювання текстовими рядками, ви можете використовувати макроси для автоматичного виконання частих завдань.

    Припустимо, вам потрібно створити щотижневий звіт для свого керівника. Для цього ви імпортуєте різні аналітичні дані з декількох зовнішніх ресурсів. Проблема в тому, що ці дані безладні, зайві або не в тому форматі, який розуміє Excel. Це означає, що вам потрібно переформатувати дати і цифри, обрізати зайві пробіли і видалити пропуски, скопіювати і вставити інформацію у відповідні стовпці,будувати графіки для візуалізації тенденцій, і робити ще багато різних речей, щоб зробити ваш звіт зрозумілим і зручним для користувача. А тепер уявіть, що всі ці операції можуть бути виконані за вас миттєво в один клік мишкою!

    Звичайно, створення складного макросу вимагає часу, іноді навіть більше, ніж виконання тих же маніпуляцій вручну. Але створення макросу - це одноразове налаштування. Після написання, налагодження і тестування код на VBA буде виконувати роботу швидко і бездоганно, зводячи до мінімуму людські помилки і помилки, що дорого коштують.

    Як створити макрос в Excel

    Макроси в Excel можна створювати двома способами - за допомогою Реєстратора макросів і редактора Visual Basic.

    Порада. В Excel більшість операцій з макросами виконується за допомогою кнопки Розробник тому обов'язково додайте вкладку "Розробник" до стрічки Excel.

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

    Навіть якщо ви нічого не знаєте про програмування в цілому і VBA зокрема, ви можете легко автоматизувати частину своєї роботи, просто дозволивши Excel записати ваші дії у вигляді макросу. Поки ви виконуєте кроки, Excel уважно спостерігає і записує ваші клацання мишею і натискання клавіш на мові VBA.

    Записник макросів фіксує майже все, що ви робите, і створює дуже детальний (часто надлишковий) код. Після того, як ви зупинили запис і зберегли макрос, ви можете переглянути його код у редакторі Visual Basic Editor і внести невеликі зміни. Коли ви запускаєте макрос, Excel повертається до записаного коду VBA і виконує точно такі ж дії.

    Щоб розпочати запис, натисніть на кнопку Запис макросу кнопку на одній з кнопок Розробник або на вкладці Статус в барі.

    Більш детальну інформацію можна знайти в статті Як записати макрос в Excel.

    Написання макросу в редакторі Visual Basic

    Редактор Visual Basic for Applications (VBA) - це місце, де Microsoft Excel зберігає код всіх макросів, як записаних, так і написаних вручну.

    У редакторі VBA можна не тільки запрограмувати послідовність дій, але і створювати власні функції, виводити власні діалогові вікна, оцінювати різні умови, а головне кодувати логіку! Природно, створення власного макросу вимагає певних знань структури і синтаксису мови VBA, що виходить за рамки даного підручника для початківців. Але немає нічого, що бне дозволяють повторно використовувати чужий код (скажімо, той, що ви знайшли на нашому блозі :) і навіть у повного новачка в Excel VBA з цим не повинно виникнути ніяких труднощів!

    Спочатку натисніть Alt + F11, щоб відкрити редактор Visual Basic, а потім вставте код у ці два швидкі кроки:

    1. У Провіднику проекту зліва клацніть цільову книгу правою кнопкою миші, а потім натисніть Вставка > Модуль .
    2. У вікні Code праворуч вставте код VBA.

    Після цього натисніть F5, щоб запустити макрос.

    Детальні кроки див. у статті Як вставити код VBA в Excel.

    Як запускати макроси в Excel

    Існує кілька способів запуску макросу в Excel:

    • Щоб запустити макрос з робочого аркуша, натисніть кнопку Макроси на кнопці Розробник або натисніть комбінацію клавіш Alt + F8.
    • Щоб запустити макрос з редактора VBA, натисніть або :
      • F5 для запуску всього коду.
      • F8, щоб переглянути код по рядках. Це дуже корисно для тестування та усунення несправностей.

    Крім того, ви можете запустити макрос, натиснувши користувацьку кнопку або натиснувши призначену комбінацію клавіш. Більш детально див. розділ "Запуск макросів в Excel".

    Як включити макроси в Excel

    З міркувань безпеки всі макроси в Excel за замовчуванням відключені. Отже, щоб використовувати магію кодів VBA на свою користь, потрібно знати, як їх включити.

    Найпростіший спосіб включити макроси для конкретної книги - натиснути кнопку Увімкнути вміст у жовтій смузі попереджень безпеки, яка з'являється у верхній частині аркуша при першому відкритті книги з макросами.

    Щоб дізнатися більше про безпеку макросів, див. статтю Як увімкнути та вимкнути макроси в Excel.

    Як змінити налаштування макросів

    Microsoft Excel визначає, дозволити чи заборонити виконання кодів VBA у ваших книгах на основі параметрів макросу, вибраних у полі Центр довіри .

    Нижче наведені кроки для доступу до налаштувань макросів Excel та їх зміни у разі потреби:

    1. Перейдіть на сторінку Файл і виберіть вкладку Опції .
    2. На лівій бічній панелі виберіть Центр довіри , а потім натисніть Налаштування центру довіри... .
    3. В рамках проекту Центр довіри діалогове вікно, натисніть Налаштування макросів зліва оберіть потрібну опцію та натисніть ГАРАЗД. .

    На скріншоті нижче обрано налаштування макросу за замовчуванням:

    Для отримання додаткової інформації, будь ласка, дивіться Пояснення щодо налаштувань макросів Excel.

    Як переглядати, редагувати та налагоджувати VBA-коди в Excel

    Будь-які зміни в коді макросу, незалежно від того, згенерований він автоматично макрорекордсменом Excel або написаний вами, вносяться в редакторі Visual Basic.

    Щоб відкрити редактор VB, натисніть комбінацію клавіш Alt + F11 або клацніть по кнопці Visual Basic на кнопці Розробник рахунок.

    До перегляд та редагування код конкретного макросу, в Project Explorer зліва двічі клацніть по модулю, який його містить, або клацніть по модулю правою кнопкою миші і виберіть Переглянути код Відкриється вікно Код, в якому ви можете редагувати код.

    До тестування та налагодження Це дозволить вам переглянути код макросу рядок за рядком, щоб побачити вплив кожного рядка на робочий аркуш. Рядок, що виконується в даний момент, виділений жовтим кольором. Щоб вийти з режиму налагодження, натисніть кнопку Перезавантаження на панелі інструментів (синій квадрат).

    Як скопіювати макрос в іншу книгу

    Ви створили макрос в одній книзі і тепер хочете використовувати його в інших файлах? Копіювати макрос в Excel можна двома способами:

    Скопіювати модуль, що містить макрос

    Якщо цільовий макрос знаходиться в окремому модулі або всі макроси в модулі є корисними для вас, то має сенс скопіювати весь модуль з однієї робочої книги в іншу:

    1. Відкрийте обидві робочі книги - ту, що містить макрос, і ту, куди ви хочете його скопіювати.
    2. Відкрийте редактор Visual Basic.
    3. В області Провідник проекту знайдіть модуль, що містить макрос, і перетягніть його в робочу книгу призначення.

    На скріншоті нижче ми копіюємо Модуль 1 від Книга 1 до Книга 2 :

    Копіювання вихідного коду макросу

    Якщо модуль містить багато різних макросів, а вам потрібен тільки один, то копіюйте тільки код цього конкретного макросу. Ось як це зробити:

    1. Відкрийте обидві робочі книги.
    2. Відкрийте редактор Visual Basic.
    3. На панелі Project Explorer двічі клацніть модуль, що містить макрос, який ви хочете скопіювати, щоб відкрити його вікно Code.
    4. У вікні Код знайдіть цільовий макрос, виберіть його код (починаючи з Sub і закінчуючи End Sub ) і натисніть Ctrl + C, щоб скопіювати його.
    5. У Провіднику проекту знайдіть робочу книгу призначення, а потім або вставте в неї новий модуль (клацніть правою кнопкою миші по робочій книзі і виберіть Вставка > Модуль ) або двічі клацніть на існуючому модулі, щоб відкрити вікно його коду.
    6. У вікні Code цільового модуля натисніть Ctrl + V, щоб вставити код. Якщо модуль вже містить якийсь код, прокрутіть вниз до останнього рядка коду, а потім вставте скопійований макрос.

    Як видалити макроси в Excel

    Якщо певний VBA-код більше не потрібен, його можна видалити, скориставшись кнопкою Макрос або в редакторі Visual Basic Editor.

    Видалення макросу з робочої книги

    Щоб видалити макрос безпосередньо з книги Excel, виконайте такі дії:

    1. Про це йдеться на Розробник у вкладці Код у групі, натисніть на кнопку Макроси або натисніть комбінацію клавіш Alt + F8.
    2. В рамках проекту Макрос виберіть макрос, який потрібно видалити, і натисніть кнопку Видалити .

    Чайові:

    • Щоб переглянути всі макроси у всіх відкритих файлах, виберіть Всі відкриті робочі книги від Макроси в випадаючий список.
    • Для того, щоб мати можливість видалити макрос у персональній книзі макросів, необхідно спочатку розкрити файл Personal.xlsb.

    Видалення макросу засобами редактора Visual Basic

    Перевагою використання редактора VBA є те, що він дозволяє видалити цілий модуль з усіма макросами, що в ньому містяться, за один раз. Також редактор VBA дозволяє видаляти макроси в персональній книзі макросів, не приховуючи її.

    На постійній основі видалити модуль виконайте такі дії:

    1. В рамках проекту Project Explorer клацніть правою кнопкою миші по модулю і виберіть Видалити з контекстного меню.
    2. На питання, чи потрібно експортувати модуль перед його видаленням, натисніть Ні .

    До видалити певний макрос просто видаліть його вихідний код безпосередньо у вікні Code. Або ви можете видалити макрос за допомогою кнопки Інструменти меню редактора VBA:

    1. Від Інструменти меню, оберіть Макроси "У нас тут є Макроси з'явиться діалогове вікно.
    2. В рамках проекту Макроси В у випадаючому списку виберіть проект, що містить небажаний макрос.
    3. В рамках проекту Назва макросу виберіть макрос.
    4. Натисніть на кнопку Видалити кнопку.

    Як зберегти макроси в Excel

    Щоб зберегти макрос в Excel, як записаний, так і написаний вручну, просто збережіть книгу у форматі з підтримкою макросів (*.xlms). Ось як це зробити:

    1. У файлі, що містить макрос, натисніть кнопку Зберегти або натисніть клавіші Ctrl + S .
    2. На сьогоднішній день, на жаль, це не так. Зберегти як з'явиться діалогове вікно, в якому виберіть Книга Excel з підтримкою макросів (*.xlsm) від Зберегти як тип у випадаючому списку та натисніть Зберегти :

    Як експортувати та імпортувати макроси в Excel

    Якщо ви хочете поділитися своїми кодами VBA з кимось або перенести їх на інший комп'ютер, найшвидший спосіб - експортувати весь модуль як файл .bas.

    Експорт макросів

    Щоб експортувати свої VBA коди, ось що вам потрібно зробити:

    1. Відкрийте робочу книгу, що містить макроси.
    2. Натисніть Alt + F11, щоб відкрити редактор Visual Basic.
    3. У Провіднику проекту клацніть правою кнопкою миші по модулю, що містить макроси, і виберіть Експортний файл .
    4. Перейдіть до папки, в яку ви хочете зберегти експортований файл, назвіть файл і натисніть Зберегти .

    Імпорт макросів

    Щоб імпортувати файл .bas з кодами VBA в Excel, будь ласка, виконайте наступні дії:

    1. Відкрийте книгу, в яку потрібно імпортувати макроси.
    2. Відкрийте редактор Visual Basic.
    3. У Провіднику проектів клацніть правою кнопкою миші по назві проекту і виберіть Імпорт файлу .
    4. Перейдіть до файлу .bas і натисніть Відкрито .

    Приклади макросів Excel

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

    Приховати всі аркуші в книзі

    У цьому прикладі ми використовуємо ActiveWorkbook повернути поточну активну робочу книгу та об'єкт За кожну для перебору всіх аркушів книги по черзі. Для кожного знайденого аркуша встановлюємо значення Видимий власність на xlSheetVisible .

    Sub Unhide_All_Sheets() Dim wks As Worksheet For Each wks In ActiveWorkbook.Worksheets wks.Visible = xlSheetVisible Next wks End Sub

    Приховати активний аркуш або зробити його дуже прихованим

    Для маніпулювання поточним активним аркушем використовуйте кнопку ActiveSheet У цьому прикладі макросу змінюється об'єкт Видимий властивість активного аркуша на xlSheetHidden Щоб зробити аркуш дуже прихованим, встановіть значення Видимий власність на xlSheetVeryHidden .

    Sub Hide_Active_Sheet() ActiveSheet.Visible = xlSheetHidden End Sub

    Роз'єднати всі об'єднані клітинки у виділеному діапазоні

    Якщо потрібно виконати певні операції над діапазоном, а не над усім аркушем, використовуйте клавішу Відбір Наприклад, наведений нижче код одним махом роз'єднає всі об'єднані комірки у виділеному діапазоні.

    Sub Unmerge_Cells() Selection.Cells.UnMerge End Sub

    Показати вікно повідомлення

    Щоб показати якесь повідомлення вашим користувачам, скористайтеся кнопкою MsgBox Наведемо приклад такого макросу в найпростішому вигляді:

    Sub Show_Message() MsgBox ( "Hello World!" ) End Sub

    У реальних макросах вікно повідомлення зазвичай використовується для отримання інформації або підтвердження. Наприклад, перед виконанням дії (у нашому випадку - розкриття комірок) виводиться вікно з повідомленням Так/Ні Якщо користувач натискає кнопку "Так", то виділені комірки роз'єднуються.

    Sub Unmerge_Selected_Cells() Dim Answer As String Answer = MsgBox( "Ви впевнені, що хочете об'єднати ці комірки?" , vbQuestion + vbYesNo, "Об'єднати комірки" ) If Answer = vbYes Then Selection.Cells.UnMerge End If End Sub

    Для перевірки коду виділіть один або декілька діапазонів, що містять об'єднані комірки, і запустіть макрос. На екрані з'явиться наступне повідомлення:

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

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

    Як захистити макроси Excel

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

    Блокування макросу для перегляду

    Щоб захистити свої VBA-коди від несанкціонованого перегляду та редагування, виконайте наступне:

    1. Відкрийте редактор VBA.
    2. У Провіднику проектів клацніть правою кнопкою миші проект, який потрібно заблокувати, і виберіть VBAProject Properties...
    3. В рамках проекту Властивості проекту діалоговому вікні, на вкладці Захист на вкладці "Вкладка" встановіть прапорець напроти пункту Заблокувати проект для перегляду введіть пароль двічі та натисніть ГАРАЗД. .
    4. Збережіть, закрийте та знову відкрийте файл Excel.

    При спробі перегляду коду в редакторі Visual Basic з'явиться наступне діалогове вікно. Введіть пароль і натисніть кнопку ОК.

    До розблокувати макроси просто відкрийте Властивості проекту і знову зніміть галочку з пункту Заблокувати проект для перегляду Ящик.

    Примітка: Цей спосіб захищає код від перегляду та редагування, але не перешкоджає його виконанню.

    Захист макросу від запуску паролем

    Щоб захистити свій макрос від виконання, щоб його могли запустити тільки користувачі, які знають пароль, додайте наступний код, замінивши слово "пароль" на свій справжній пароль:

    Sub Password_Protect() Dim password As Variant password = Application.InputBox( "Please enter Password" , "Password Protected Macro" ) Select Case password Case Is = False 'нічого не робити Case Is = "password" 'ваш код тут Case Else MsgBox "Неправильний пароль" End Select End Sub

    У макросі використовується метод InputBox функція запиту на введення паролю користувачем:

    Якщо введений користувачем пароль збігається з жорстко заданим, виконується Ваш код. Якщо пароль не збігається, виводиться вікно повідомлення "Невірний пароль". Щоб користувач не зміг підглянути пароль в редакторі Visual Basic, не забудьте заблокувати макрос для перегляду, як це описано вище.

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

    Підказки щодо макросів Excel

    Професіонали Excel VBA розробили безліч геніальних трюків, щоб зробити свої макроси більш ефективними. Нижче я поділюся парою своїх улюблених з них.

      Якщо код на VBA активно маніпулює вмістом комірки, можна прискорити його виконання, вимкнувши оновлення екрану і перерахунок формул. Після виконання коду знову увімкніть ці функції.

      На початок коду потрібно додати наступні рядки (після рядків, що починаються з Тьмяний або після того, як Sub лінія):

      Application.ScreenUpdating = False Application.Calculation = xlCalculationManual

      Наступні рядки повинні бути додані в кінець вашого коду (перед End Sub ):

      Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic

      Як розбити код VBA на декілька рядків

      При написанні коду в редакторі VBA іноді можуть створюватися дуже довгі оператори, тому для перегляду кінця рядка доводиться прокручувати його по горизонталі. Це не впливає на виконання коду, але ускладнює вивчення коду.

      Щоб розбити довгий вираз на кілька рядків, введіть a простір за яким слідує підкреслити (_) в точці, в якій потрібно розірвати рядок. У VBA це називається символ продовження рядка .

      Для коректного продовження коду в наступному рядку, будь ласка, дотримуйтесь наступних правил:

      • Не розбивайте код посередині імен аргументів.
      • Не використовуйте підкреслення для розриву коментарів. У багаторядкових коментарях на початку кожного рядка слід ставити апостроф (').
      • Підкреслення повинно бути останнім символом у рядку, за ним не повинно слідувати нічого іншого.

      У наступному прикладі коду показано, як розбити оператор на два рядки:

      Answer = MsgBox( "Ви впевнені, що хочете об'єднати ці комірки?" , _ vbQuestion + vbYesNo, "Об'єднати комірки" )

      Як зробити макрос доступним з будь-якої книги

      Коли ви пишете або записуєте макрос в Excel, зазвичай доступ до нього можна отримати тільки з цієї конкретної книги. Якщо ви хочете повторно використовувати той самий код в інших книгах, збережіть його в особистій книзі макросів. Це зробить макрос доступним для вас, коли ви відкриваєте Excel.

      Єдиною перешкодою є те, що за замовчуванням в Excel не існує персональної книги макросів. Для її створення потрібно записати хоча б один макрос. Всі подробиці викладені в наступному уроці: "Персональна книга макросів в Excel

      Як скасувати макродію

      Після виконання макросу його дію не можна відмінити ні натисканням клавіш Ctrl + Z, ні натисканням кнопки Скасувати кнопку.

      Досвідчені програмісти VBA можуть, звичайно, перевірити вхідні значення та/або початкові умови, перш ніж дозволити макросу вносити будь-які зміни в робочий аркуш, але в більшості випадків це досить складно.

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

      ActiveWorkbook.Save

      За бажанням можна також вивести вікно повідомлення, яке інформує користувача про те, що поточна робоча книга була збережена безпосередньо перед виконанням основного коду макросу.

      Таким чином, якщо ви (або ваші користувачі) не задоволені результатами, ви можете просто закрити, а потім знову відкрити робочу книгу.

      Припинення показу попередження про безпеку в Excel при відсутності макросів у книзі

      Ви коли-небудь стикалися з ситуацією, коли Excel постійно запитує, чи хочете ви включити макроси, в той час як ви точно знаєте, що в даній книзі немає ніяких макросів?

      Найімовірніша причина в тому, що якийсь код VBA був доданий, а потім видалений, залишивши порожній модуль, який і викликає попередження безпеки. Щоб позбутися від нього, просто видаліть модуль, збережіть книгу, закрийте і знову відкрийте її. Якщо це не допомогло, зробіть наступне:

      • За ThisWorkbook і для кожного окремого аркуша відкрити вікно Код, натиснути Ctrl + A, щоб виділити весь код і видалити його (навіть якщо вікно Код виглядає порожнім).
      • Видалити всі UserForms і Class Modules, що містяться в книзі.

      Ось так створюються і використовуються макроси VBA в Excel. Дякую за прочитання і сподіваюся знову побачити вас на нашому блозі наступного тижня!

      Майкл Браун — відданий ентузіаст технологій із пристрастю до спрощення складних процесів за допомогою програмних засобів. Маючи понад десятирічний досвід роботи в технологічній індустрії, він відточив свої навички роботи з Microsoft Excel і Outlook, а також із Google Таблицями та Документами. Блог Майкла присвячений тому, щоб поділитися своїми знаннями та досвідом з іншими, надаючи прості поради та навчальні посібники для підвищення продуктивності та ефективності. Незалежно від того, чи є ви досвідченим професіоналом чи початківцем, блог Майкла пропонує цінну інформацію та практичні поради щодо отримання максимальної користі від цих основних програмних інструментів.