Как разделить файл Excel на отдельные файлы (по листам)

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

И конечно же, можно сделать это руками, но это крайне долго и неэффективно.

Я продемонстрирую вам простой код Visual Basic, который выполнит задачу за вас.

Делим файл Excel на несколько файлов по листам

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

Как разделить файл Excel на отдельные файлы (по листам)

Код Visual Basic, который разделит таблицу на несколько файлов по месяцам:

Sub SplitEachWorksheet() 
Dim FPath As String 
FPath = Application.ActiveWorkbook.Path 
Application.ScreenUpdating = False 
Application.DisplayAlerts = False 
For Each ws In ThisWorkbook.Sheets
     ws.Copy
     Application.ActiveWorkbook.SaveAs Filename:=FPath & "\" & ws.Name & ".xlsx"
     Application.ActiveWorkbook.Close False 
Next 
Application.DisplayAlerts = True 
Application.ScreenUpdating = True 
End Sub  

Перед тем, как запустите этот код, сделайте следущее:

Узнайте Excel как свои пять пальцев на курсе по таблицам от Skillbox

  1. Создайте новую папку, куда поместите результаты работы этого кода;
  2. А также, на всякий случай, сделайте копию оригинального файла.

Теперь создайте функцию в Visual Basic и смело запускайте код.

Этот код сам найдет путь до папки с файлом.

Как он работает?

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

Куда поместить этот код?

Пошаговая инструкция:

  • Щелкните на «Разработчик»;
Как разделить файл Excel на отдельные файлы (по листам)
  • Далее откройте VBA;
Как разделить файл Excel на отдельные файлы (по листам)
  • Правой кнопкой мышки на любой лист;.
Как разделить файл Excel на отдельные файлы (по листам)
  • Щелкните на «Insert» -> «Module»;
Как разделить файл Excel на отдельные файлы (по листам)
  • Поместите наш код в открывшееся окошко;
Как разделить файл Excel на отдельные файлы (по листам)
  • Теперь запустите код.
Как разделить файл Excel на отдельные файлы (по листам)

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

Как я говорил ранее, имя файла такое же, как и имя листа.

Как разделить файл Excel на отдельные файлы (по листам)

Также не забудьте сохранить файл с соответствующим расширением(.XLSM), так как мы используем функции Visual Basic.

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

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

Делим файл Excel на несколько PDF файлов по листам

Вот код для такого случая:

Sub SplitEachWorksheet() 
Dim FPath As String 
FPath = Application.ActiveWorkbook.Path 
Application.ScreenUpdating = False 
Application.DisplayAlerts = False   

For Each ws In ThisWorkbook.Sheets
     ws.Copy
     Application.ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FPath & "\" & ws.Name & ".xlsx"
     Application.ActiveWorkbook.Close False 
Next   

Application.DisplayAlerts = True 
Application.ScreenUpdating = True 
End Sub  

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

Разделите только те рабочие листы, в которых содержится слово/фраза, на отдельные файлы Excel

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

Допустим, у вас есть страницы отчета за разные года, в названии каждого листа указан год и месяц. Но вам нужно сохранить только те листы, которые относятся к 2020 году. Как это сделать?

Рекомендуем курс Excel по анализу данных от Skypro — очень глубокое и яркое погружение в Эксель.

Вот код Visual Basic:

Sub SplitEachWorksheet() 
Dim FPath As String 
Dim TexttoFind As String 
TexttoFind = "2020" 
FPath = Application.ActiveWorkbook.Path 
Application.ScreenUpdating = False 
Application.DisplayAlerts = False   

For Each ws In ThisWorkbook.Sheets
     If InStr(1, ws.Name, TexttoFind, vbBinaryCompare) <> 0 Then
         ws.Copy
         Application.ActiveWorkbook.SaveAs Filename:=FPath & "\" & ws.Name & ".xlsx"
         Application.ActiveWorkbook.Close False
     End If 
Next   

Application.DisplayAlerts = True 
Application.ScreenUpdating = True 
End Sub  

Как вы могли заметить, прямо в коде, мы создали переменную и задали ей значение 2020.

Затем этот код просто проходится по каждой странице и проверяет есть ли в имени нужная нам часть (то есть нужный год). А далее сохраняет отдельно только те листы, в имени которых он нашел совпадения.

Если совпадения не будут найдены — результат будет 0.

В этом коде используется цикл «Если/То». Если он находит нужное текстовое значение в имени листа, то сохраняет его отдельно, если не находит — просто пропускает.

Узнайте Excel как свои пять пальцев на курсе по таблицам от Skillbox

Оцените статью, пожалуйста
Добавить комментарий