반응형
설정된 행 수를 사용하여 스프레드시트를 여러 스프레드시트로 분할하는 방법은 무엇입니까?
Excel(2007) 스프레드시트에는 433개의 행(맨 위에 있는 헤더 행)이 있습니다.저는 이것을 각각 10개의 행이 있는 43개의 스프레드시트 파일과 나머지 3개의 행이 있는 하나의 파일로 분할해야 합니다.
헤더 행은 각 스프레드시트의 맨 위에도 있는 것이 좋습니다.어떻게 하면 이 일을 해낼 수 있을까요?
매크로는 첫 번째 행의 헤더 행을 포함하여 선택한 범위의 모든 행을 분할합니다(첫 번째 파일에 한 번만 표시됨).당신이 요청하는 내용에 맞게 매크로를 수정했습니다. 제가 작성한 의견을 검토하여 어떤 기능을 하는지 확인하는 것은 간단합니다.
Sub Test()
Dim wb As Workbook
Dim ThisSheet As Worksheet
Dim NumOfColumns As Integer
Dim RangeToCopy As Range
Dim RangeOfHeader As Range 'data (range) of header row
Dim WorkbookCounter As Integer
Dim RowsInFile 'how many rows (incl. header) in new files?
Application.ScreenUpdating = False
'Initialize data
Set ThisSheet = ThisWorkbook.ActiveSheet
NumOfColumns = ThisSheet.UsedRange.Columns.Count
WorkbookCounter = 1
RowsInFile = 10 'as your example, just 10 rows per file
'Copy the data of the first row (header)
Set RangeOfHeader = ThisSheet.Range(ThisSheet.Cells(1, 1), ThisSheet.Cells(1, NumOfColumns))
For p = 2 To ThisSheet.UsedRange.Rows.Count Step RowsInFile - 1
Set wb = Workbooks.Add
'Paste the header row in new file
RangeOfHeader.Copy wb.Sheets(1).Range("A1")
'Paste the chunk of rows for this file
Set RangeToCopy = ThisSheet.Range(ThisSheet.Cells(p, 1), ThisSheet.Cells(p + RowsInFile - 2, NumOfColumns))
RangeToCopy.Copy wb.Sheets(1).Range("A2")
'Save the new workbook, and close it
wb.SaveAs ThisWorkbook.Path & "\test" & WorkbookCounter
wb.Close
'Increment file counter
WorkbookCounter = WorkbookCounter + 1
Next p
Application.ScreenUpdating = True
Set wb = Nothing
End Sub
이게 도움이 되길 바랍니다.
@Fer Garcia to Mac users ;), 파일 저장 방법만 변경하여 코드를 업데이트했습니다.
Sub Test()
Dim wb As Workbook
Dim ThisSheet As Worksheet
Dim NumOfColumns As Integer
Dim RangeToCopy As Range
Dim RangeOfHeader As Range 'data (range) of header row
Dim WorkbookCounter As Integer
Dim RowsInFile 'how many rows (incl. header) in new files?
Application.ScreenUpdating = False
'Initialize data
Set ThisSheet = ThisWorkbook.ActiveSheet
NumOfColumns = ThisSheet.UsedRange.Columns.Count
WorkbookCounter = 1
RowsInFile = 150 'as your example, just 10 rows per file
'Copy the data of the first row (header)
Set RangeOfHeader = ThisSheet.Range(ThisSheet.Cells(1, 1), ThisSheet.Cells(1, NumOfColumns))
For p = 2 To ThisSheet.UsedRange.Rows.Count Step RowsInFile - 1
Set wb = Workbooks.Add
'Paste the header row in new file
RangeOfHeader.Copy wb.Sheets(1).Range("A1")
'Paste the chunk of rows for this file
Set RangeToCopy = ThisSheet.Range(ThisSheet.Cells(p, 1), ThisSheet.Cells(p + RowsInFile - 2, NumOfColumns))
RangeToCopy.Copy wb.Sheets(1).Range("A2")
'Save the new workbook, and close it
wb.SaveAs "Test" & WorkbookCounter & ".xls", FileFormat:=57
wb.Close
'Increment file counter
WorkbookCounter = WorkbookCounter + 1
Next p
Application.ScreenUpdating = True
Set wb = Nothing
End Sub
.xlsx 파일 형식으로 @Mohamed Sami로 코드를 업데이트했습니다.
Sub Test()
Dim wb As Workbook
Dim ThisSheet As Worksheet
Dim NumOfColumns As Integer
Dim RangeToCopy As Range
Dim RangeOfHeader As Range 'data (range) of header row
Dim WorkbookCounter As Integer
Dim RowsInFile 'how many rows (incl. header) in new files?
Application.ScreenUpdating = False
'Initialize data
Set ThisSheet = ThisWorkbook.ActiveSheet
NumOfColumns = ThisSheet.UsedRange.Columns.Count
WorkbookCounter = 1
RowsInFile = 11 '10 rows and 1 header
'Copy the data of the first row (header)
Set RangeOfHeader = ThisSheet.Range(ThisSheet.Cells(1, 1), ThisSheet.Cells(1, NumOfColumns))
For p = 2 To ThisSheet.UsedRange.Rows.Count Step RowsInFile - 1
Set wb = Workbooks.Add
'Paste the header row in new file
RangeOfHeader.Copy wb.Sheets(1).Range("A1")
'Paste the chunk of rows for this file
Set RangeToCopy = ThisSheet.Range(ThisSheet.Cells(p, 1), ThisSheet.Cells(p + RowsInFile - 2, NumOfColumns))
RangeToCopy.Copy wb.Sheets(1).Range("A2")
'Save the new workbook, and close it
wb.SaveAs "MyTest" & WorkbookCounter & ".xlsx", FileFormat:=51
wb.Close
'Increment file counter
WorkbookCounter = WorkbookCounter + 1
Next p
Application.ScreenUpdating = True
Set wb = Nothing
End Sub
이 코드를 실행하는 방법
- 시트 열기
- alt+f11을 누릅니다(창).
- 시트에서 마우스 오른쪽 버튼 클릭
- 삽입 모듈 선택
- 위 코드를 붙여넣습니다.
- 코드에서 원하는 행을 클릭합니다.
- 녹색(재생) 버튼을 클릭하여 코드를 실행합니다.
파일이 문서 폴더에 저장됩니다.
언급URL : https://stackoverflow.com/questions/17997851/how-to-split-spreadsheet-into-multiple-spreadsheets-with-set-number-of-rows
반응형
'programing' 카테고리의 다른 글
WPF에서 x:Key와 x:Name의 차이점은 무엇입니까? (0) | 2023.05.01 |
---|---|
C#을 사용하여 Excel 파일 읽기/쓰기(.xls/.xlsx) (0) | 2023.05.01 |
SQL Server의 동적 SELECT TOP @var (0) | 2023.05.01 |
Eclipse에서 전체 프로젝트를 찾거나 바꿀 수 있는 방법이 있습니까? (0) | 2023.05.01 |
mongo:csv 파일로 Aggregate 내보내기 (0) | 2023.05.01 |