엑셀 시트에 빅 데이터가 있고 열의 일부 데이터를 기반으로 해당 시트를 여러 시트로 배포해야합니까? 이것은 매우 기본적인 작업이지만 시간이 많이 걸립니다.

006

예를 들어,이 데이터가 있습니다. 이 데이터에는 날짜, 작성자 및 제목이라는 열이 있습니다. 작가 열에는 각 제목의 작가 이름이 있습니다. 각 작가의 데이터를 별도의 시트로 가져오고 싶습니다.

007

이 작업을 수동으로 수행하려면 다음을 수행해야합니다.

  1. 하나의 이름을 필터링합니다. 필터링 된 데이터를 복사합니다. 시트를 추가합니다. 데이터를 붙여 넣습니다. 시트의 이름을 바꿉니다. 각각에 대해 위의 5 단계를 모두 반복합니다.

이 예에서는 이름이 세 개뿐입니다. 수백 개의 이름이 있다고 상상해보십시오.

데이터를 다른 시트로 어떻게 분할 하시겠습니까? 그것은 많은 시간이 걸리고 당신도 고갈시킬 것입니다.

시트를 여러 시트로 분할하는 위의 프로세스를 자동화하려면 다음 단계를 따르십시오.

Alt + F11을 누릅니다. 그러면 Excel 용 VB 편집기가 열립니다. 새 모듈 추가 * 모듈의 코드 아래 복사.

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 (uniques As Range, clmNo As Long)이고 하나의 함수는 RemoveDuplicates (uniques As Range) As Range입니다. 첫 번째 절차는 SplitIntoSheets ()입니다. 이것이 주요 절차입니다. 이 절차는 주어진 열에서 고유 한 이름을 가져 오도록 변수와 RemoveDuplicates를 설정 한 다음 시트를 만들기 위해 해당 이름을 CreateSheets로 전달합니다.

RemoveDuplicates는 이름을 포함하는 범위 인 하나의 인수를 사용합니다.

중복 항목을 제거하고 고유 한 이름이 포함 된 범위 개체를 반환합니다.

이제 CreateSheets가 호출됩니다. 두 가지 인수가 필요합니다. 첫 번째는 고유 한 이름이고 두 번째는 열 번호입니다. 우리는 데이터를 더 적합하게 만들 것입니다. 이제 CreateSheets는 고유 항목에서 각 이름을 가져와 각 이름별로 주어진 열 번호를 필터링합니다. 필터링 된 데이터를 복사하고 시트를 추가 한 다음 여기에 데이터를 붙여 넣습니다. 그리고 데이터는 몇 초 만에 다른 시트로 분할됩니다.

여기에서 파일을 다운로드 할 수 있습니다.

시트로 분할

파일 사용 방법 :

  • Sheet1에 데이터를 복사합니다. A1에서 시작해야합니다.

008

버튼을 클릭하여 시트로 분할 * 분할하려는 열 문자를 입력하십시오. 확인을 클릭하십시오.

009

  • 이와 같은 메시지가 표시됩니다. 시트가 분할되었습니다.

0011

0013

데이터를 별도의 시트로 분할하는 방법에 대한 기사가 도움이 되었기를 바랍니다. 이것 또는 Excel의 다른 기능에 대해 의문이 있으시면 아래 댓글 섹션에서 자유롭게 질문하십시오.

파일 다운로드 :