请问大家,Excel 利用vba怎样做可以每两百行分割成一份新的Excel
你可以使用以下VBA代码将每两百行分割成一份新的Excel文件:
vba
Sub SplitExcel()
Dim i As Integer
Dim lastRow As Long
Dim currentRow As Long
Dim newWorkbook As Workbook
Dim currentWorkbook As Workbook
Set currentWorkbook = ActiveWorkbook '设置当前工作簿
lastRow = currentWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row '获取当前工作表的最后一行
For i = 2 To lastRow Step 200 '循环分割每200行
Set newWorkbook = Workbooks.Add '新建一个工作簿
currentWorkbook.Sheets(1).Range("A" & i & ":A" & i + 199).Copy '复制当前工作表中的200行数据
newWorkbook.Sheets(1).Range("A1").PasteSpecial xlPasteValues '粘贴到新工作表中,只保留值
newWorkbook.SaveAs "C:\example\newworkbook" & i & ".xlsx", FileFormat:=xlOpenXMLWorkbook '保存为新文件
newWorkbook.Close SaveChanges:=False '关闭新工作簿
Next i
MsgBox "分割完成!" '提示分割完成
End Sub
请确保修改代码中的“C:\example\newworkbook”为您想要保存新文件的路径。此外,您可以根据需要更改文件名和路径。运行此代码后,它将创建一系列新文件,每个文件包含200行数据。
菩薩慈悲:試試看我以下的程式碼吧。感恩感恩 南無阿彌陀佛
Sub SplitData_Excel_vba_how_to_do_can_every_two_hundred_rows_split_into_a_new_Excel()
Dim fso As Object 'New FileSystemObject
Dim wb As Workbook, ws As Worksheet, newFileName As String, extension As String, wbName As String
Dim path As String, lastColumn As Long, i As Long
Dim sheetCounter As Long
Set fso = CreateObject("scripting.FileSystemObject")
Set wb = ActiveWorkbook: Set ws = wb.ActiveSheet
path = wb.path
path = fso.CreateFolder(path + "\" + "SplitData_Excel_vba_how_to_do_can_every_two_hundred_rows_split_into_a_new_Excel").path
wbName = wb.Name: extension = "." + Right(wbName, Len(wbName) - InStrRev(wbName, ".", , 1))
Dim lastRow As Long
Dim rowCounter As Long, rowStart As Long
Dim newWorkbook As Workbook
Dim newWorksheet As Worksheet
lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
'lastRow = ws.UsedRange.Rows.Count
lastColumn = ws.UsedRange.Columns.Count
rowCounter = 0
Excel.Application.ScreenUpdating = False
Rem 若無欄名,則下行請用: For i = 1 To lastRow
For i = 2 To lastRow
If rowStart = 0 Then rowStart = i
rowCounter = rowCounter + 1
If rowCounter = 200 Then
lastPart:
sheetCounter = sheetCounter + 1
Set newWorkbook = Workbooks.Add() '(wb.ContentTypeProperties("Template"))
' newWorkbook.Windows(1).Visible = False
Set newWorksheet = newWorkbook.Sheets(1)
Range(ws.Cells(rowStart, 1), ws.Cells(i, lastColumn)).Copy _
Destination:=newWorksheet.Range(newWorksheet.Cells(1, 1), newWorksheet.Cells(rowCounter, lastColumn))
'newFileName = Left(wbName, InStr(wbName, extension) - 1) & sheetCounter & extension
newFileName = Left(wbName, InStr(wbName, extension) - 1) & sheetCounter & ".xlsx"
With newWorkbook
'.SaveCopyAs path + "\" + newFileName
' newWorkbook.Windows(1).Visible = True
.SaveAs path + "\" + newFileName
.Close
End With
rowCounter = 0: rowStart = 0
End If
Next i
If rowCounter > 0 And rowCounter < 200 Then
i = lastRow
GoTo lastPart
End If
Excel.Application.ScreenUpdating = True
MsgBox "done!", vbInformation
End Sub