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

006

Например, у меня есть эти данные. У этих данных есть столбцы с именами Date, Writer и Title. В столбце Writer указано имя автора соответствующего заголовка. Я хочу собрать данные каждого писателя на отдельных листах.

007

Чтобы сделать это вручную, мне нужно сделать следующее:

  1. Отфильтруйте одно имя. Скопируйте отфильтрованные данные. Добавьте лист. Вставьте данные. Переименуйте лист. Повторите все выше 5 шагов для каждого.

В этом примере у меня всего три имени. Представьте, что у вас есть сотни имен.

Как бы вы разбили данные на разные листы? Это займет много времени и вас тоже истощит.

Чтобы автоматизировать описанный выше процесс разделения листа на несколько листов, выполните следующие действия.

Нажмите Alt + F11. Это откроет редактор VB для Excel. Добавить новый модуль * Скопировать код ниже в модуле.

Sub SplitIntoSheets()

With Application

.ScreenUpdating = False

.DisplayAlerts = False

End With

ThisWorkbook.Activate

Sheet1.Activate

'clearing filter if any

On Error Resume Next

Sheet1.ShowAllData

On Error GoTo 0

Dim lsrClm As Long

Dim lstRow As Long

'counting last used row

lstRow = Cells(Rows.Count, 1).End(xlUp).Row

Dim uniques As Range

Dim clm As String, clmNo As Long

On Error GoTo handler

clm = Application.InputBox("From which column you want create files" & vbCrLf & "E.g. A,B,C,AB,ZA etc.")

clmNo = Range(clm & "1").Column

Set uniques = Range(clm & "2:" & clm & lstRow)

'Calling Remove Duplicates to Get Unique Names

Set uniques = RemoveDuplicates(uniques)

Call CreateSheets(uniques, clmNo)

With Application

.ScreenUpdating = True

.DisplayAlerts = True

.AlertBeforeOverwriting = True

.Calculation = xlCalculationAutomatic

End With

Sheet1.Activate

MsgBox "Well Done!"

Exit Sub

Data.ShowAllData

handler:

With Application

.ScreenUpdating = True

.DisplayAlerts = True

.AlertBeforeOverwriting = True

.Calculation = xlCalculationAutomatic

End With

End Sub

Function RemoveDuplicates(uniques As Range) As Range

ThisWorkbook.Activate

Sheets.Add

On Error Resume Next

ActiveSheet.Name = "uniques"

Sheets("uniques").Activate

On Error GoTo 0

uniques.Copy

Cells(2, 1).Activate

ActiveCell.PasteSpecial xlPasteValues

Range("A1").Value = "uniques"

Dim lstRow As Long

lstRow = Cells(Rows.Count, 1).End(xlUp).Row

Range("A2:A" & lstRow).Select

ActiveSheet.Range(Selection.Address).RemoveDuplicates Columns:=1, Header:=xlNo

lstRow = Cells(Rows.Count, 1).End(xlUp).Row

Set RemoveDuplicates = Range("A2:A" & lstRow)

End Function

Sub CreateSheets(uniques As Range, clmNo As Long)

Dim lstClm As Long

Dim lstRow As Long



For Each unique In uniques

Sheet1.Activate

lstRow = Cells(Rows.Count, 1).End(xlUp).Row

lstClm = Cells(1, Columns.Count).End(xlToLeft).Column

Dim dataSet As Range

Set dataSet = Range(Cells(1, 1), Cells(lstRow, lstClm))

dataSet.AutoFilter field:=clmNo, Criteria1:=unique.Value

lstRow = Cells(Rows.Count, 1).End(xlUp).Row

lstClm = Cells(1, Columns.Count).End(xlToLeft).Column

Debug.Print lstRow; lstClm

Set dataSet = Range(Cells(1, 1), Cells(lstRow, lstClm))

dataSet.Copy

Sheets.Add

ActiveSheet.Name = unique.Value2

ActiveCell.PasteSpecial xlPasteAll

Next unique

End Sub

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

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

В приведенном выше коде есть две процедуры и одна функция. Две процедуры — это SplitIntoSheets (), CreateSheets (уникальные как диапазон, clmNo As Long) и одна функция — это RemoveDuplicates (уникальные как диапазон) как диапазон. Первая процедура — SplitIntoSheets (). Это основная процедура. Эта процедура устанавливает переменные и RemoveDuplicates для получения уникальных имен из заданного столбца, а затем передает эти имена в CreateSheets для создания листов.

RemoveDuplicates принимает один аргумент — диапазон, содержащий имя.

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

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

Вы можете скачать файл здесь.

Разбить на листы

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

  • Скопируйте свои данные на Sheet1. Убедитесь, что он начинается с A1.

008

Нажмите кнопку «Разбить на листы» * Введите букву столбца, из которой вы хотите разделить. Щелкните ОК.

009

  • Вы увидите подобное сообщение. Ваш лист разделен.

0011

0013

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

Скачать файл: