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

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

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

Разделить каждый лист на отдельный файл Excel

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

Чтобы разделить эти листы в отдельный файл Excel, вы можете использовать приведенный ниже код VBA:

'Code Created by Sumit Bansal from trumpexcel.com
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

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

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

Как только вы это сделаете, вы можете поместить указанный выше код VBA в файл и запустить его.

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

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

Ниже приведены шаги по размещению этого кода VBA в книге Excel (они будут такими же для всех других методов, показанных в этом руководстве):

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

Ниже приведены шаги по размещению кода в редакторе Visual Basic, где он может быть выполнен:

  • Щелкните вкладку Разработчик.
  • В группе «Код» выберите параметр «Visual Basic». Это откроет редактор VB. [Вы также можете использовать сочетание клавиш — ALT + F11 ]
  • В редакторе VB щелкните правой кнопкой мыши любой объект книги, над которой вы работаете.
  • Наведите курсор на опцию Вставить
  • Щелкните по модулю. Это вставит новый модуль
  • Дважды щелкните объект Module. это откроет окно кода для модуля
  • Скопируйте приведенный выше код VBA и вставьте его в окно кода модуля.
  • Выберите любую строку в коде и нажмите зеленую кнопку воспроизведения на панели инструментов, чтобы запустить код макроса VBA.

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

Имя каждого сохраненного файла совпадает с именем листа в основном файле.

Поскольку вы поместили код VBA в книгу Excel, вам необходимо сохранить его в формате .XLSM (который является форматом с поддержкой макросов). Это гарантирует, что макрос будет сохранен и будет работать, когда вы откроете этот файл в следующий раз.

Обратите внимание, что я использовал в коде строки Application.ScreenUpdating = False и Application.DisplayAlerts = False, чтобы все происходило в серверной части и не видеть, что происходит на вашем экране. Как только код запускается, разделяет листы и сохраняет их, мы возвращаем им значение ИСТИНА.

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

Разделить каждый рабочий лист и сохранить как отдельные PDF-файлы

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

'Code Created by Sumit Bansal from trumpexcel.com
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

Перед использованием этого кода необходимо убедиться в следующем:

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

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

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

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

Например, предположим, что у вас есть файл Excel, содержащий данные за несколько лет, и каждый лист в файле имеет номер года в качестве префикса. Что-то вроде показанного ниже:

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

Это можно сделать с помощью следующего макроса VBA:

'Code Created by Sumit Bansal from trumpexcel.com
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

В приведенном выше коде я использовал переменную TexttoFind, которой изначально было присвоено значение «2020».

Затем код VBA использует цикл For Next в VBA для просмотра каждого рабочего листа, а затем проверяет имя каждой функции INSTR рабочего листа. Эта функция проверяет, есть ли в имени листа слово 2020 или нет. Если это так, он вернет номер позиции, в которой он нашел этот текст (в данном случае это 2020).

И если он не находит искомый текст, он возвращает 0.

Это используется с условием IF Then. Поэтому, если в имени листа есть текстовая строка 2020, оно будет разделено и сохранено как отдельный файл. И если у него нет этой текстовой строки, условие IF не будет выполнено, и ничего не произойдет.

Разделить каждый лист Excel на отдельные файлы (шаг за шагом)