Це трапляється досить часто: складаєш річний звіт, і в ньому міститься 12 місяців, отже, 12 аркушів. Необхідно розділити цей документ так, щоб кожен аркуш перетворився на окремий файл.
Звичайно, це можна виконати власноруч, проте цей процес займає багато часу і не є ефективним.
Я покажу вам простий код на Visual Basic, який допоможе вам виконати цю задачу самостійно.
Розподіл файлу Excel на окремі файли для кожного аркуша
Наприклад, ми маємо річний звіт, в якому в деталях викладені показники компанії за кожен місяць. Як ви можете побачити на ілюстрації нижче:
Ось перероблений текст з тим же змістом:
Код на Visual Basic, який дозволяє розділити таблицю на кілька файлів по місяцях:
Sub РозділитиКожнийЛист()
Dim Шлях As String
Шлях = Application.ActiveWorkbook.Path
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each лист In ThisWorkbook.Sheets
лист.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Шлях & “” & лист.Name & “.pdf”
Application.ActiveWorkbook.Close False
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub Перед тим як виконати цей код, виконайте такі дії: 1. Створіть нову директорію, в яку помістіть результати виконання цього коду.
2. Також, для перестороги, зробіть резервну копію оригінального файлу.
Тепер напишіть функцію на Visual Basic і сміливо виконуйте код.
Цей код допоможе знайти маршрут до директорії, де розташований файл.
Яким чином він функціонує?
Дуже легко, він відкриває кожен документ і зберігає його в якості окремого файлу, використовуючи таку ж назву.
Де слід вставити цей код?
Інструкція по виконанню крок за кроком:
- Натисніть на вкладку “Розробник”;
- Потім запустіть VBA;
Ось перероблений текст з тим же змістом:
- Клацніть правою кнопкою миші на будь-якому аркуші;
- Натисніть на “Вставка” -> “Модуль”;
- Вставте наш код у відкритому вікні;
- Тепер виконайте код.
Звичайно! Ось переписаний текст з збереженням первинного змісту:
Отже, після запуску коду ваш файл буде автоматично поділено на кілька окремих файлів, кожен з яких відповідатиме одному листу. Це дуже практично, тому рекомендую зберегти цей код. Навіть якщо на даний момент він не вимагається, у майбутньому його використання буде обов’язково корисним.
Як я зазначав раніше, назва файлу відповідає назві аркуша.
Не забудьте зберегти файл з правильним розширенням (. XLSM), оскільки ми використовуємо функції Visual Basic.
У програмному забезпеченні я свідомо налаштував все так, щоб ви не помічали всі процеси, які відбуваються, і це не створювало вам незручностей. Якщо вам потрібен доступ до цих даних, ви можете змінити це налаштування.
Проте я знову наголошую, що перед використанням цієї функції важливо зробити резервну копію вашого файлу! Адже в разі, якщо Excel зупинить свою роботу через якусь помилку або виникне якась непередбачувана ситуація, ви ризикуєте втратити всі свої дані!
Розподіл файлу Excel на декілька PDF файлів за окремими аркушами
Ось код, який можна використати в такій ситуації:
vba
Sub РозділитиКоженЛист()
Dim Шлях As String
Шлях = Application.ActiveWorkbook.Path
Application.ScreenUpdating = False
Application.DisplayAlerts = FalseFor Each лист In ThisWorkbook.Sheets
лист.Copy Шлях & “” & лист.Name & “.xlsx”
Application.ActiveWorkbook.Close False
Next листApplication.DisplayAlerts = True
Application.ScreenUpdating = True
End SubНе забувайте спочатку створити папку та обов’язково скопіювати оригінальний файл. Код розбиватиме вашу таблицю на сторінки і для кожної з них буде створено окремий PDF-документ.
Виділіть тільки ті робочі аркуші, що містять слово або фразу, і збережіть їх як окремі файли Excel
Існують ситуації, коли необхідно сформувати окремий файл, що міститиме лише ті сторінки, у заголовках яких присутні визначені слова.
Припустимо, у вас є звітні сторінки за кілька років, і в назвах кожного аркуша вказано рік і місяць. Але вам необхідно залишити лише ті аркуші, що стосуються 2020 року. Яким чином це можна реалізувати?
Ось унікальний варіант вашого тексту:
Нижче наведено код на Visual Basic:
Sub РозділитиКоженЛист()
Dim Шлях As String
Dim ТекстДляПошуку As String
ТекстДляПошуку = “2020”
Шлях = Application.ActiveWorkbook.Path
Application.ScreenUpdating = False
Application.DisplayAlerts = FalseДля кожного листа In ThisWorkbook.Sheets
If InStr(1, листа.Name, ТекстДляПошуку, vbBinaryCompare) <> 0 Then
листа.Copy
Application.ActiveWorkbook.SaveAs Filename:=Шлях & “” & листа.Name & “.xlsx”
Application.ActiveWorkbook.Close False
End If
NextApplication.DisplayAlerts = True
Application.ScreenUpdating = True
End SubЯк вам, мабуть, вдалося зауважити, ми безпосередньо в коді ініціювали змінну та присвоїли їй значення 2020.
Далі цей код проходить через усі сторінки та перевіряє, чи містить назва необхідний нам фрагмент (тобто потрібний рік). Після цього він зберігає тільки ті листи, в іменах яких знайдено відповідності.
У разі, якщо не буде виявлено жодних збігів, результатом буде 0.
В даному коді застосовується цикл “Якщо/То”. Якщо він виявляє необхідне текстове значення в назві аркуша, то зберігає його окремо, а в разі відсутності – просто ігнорує.







