Giúp sửa lệnh VBA

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

kiendaide1

Thành viên chính thức
Tham gia
3/4/13
Bài viết
93
Được thích
4
Em có 1 sheet có nhiều dư liệu em muôn tách 100 dòng từ sheet ban đâu ra thành nhiêu sheet khác nhau (dư nguyên tiêu đề mang qua các sheet khác. em viết lệnh VBA nhưng chay lỗi. phiền các bác sửa hộ em với ạ. Đoan code em có đính kèm ạ
 

File đính kèm

  • Tách rong theo y.txt
    925 bytes · Đọc: 11
Sao không đưa file Excel lên nhỉ?
 
Upvote 0
Em có 1 sheet có nhiều dư liệu em muôn tách 100 dòng từ sheet ban đâu ra thành nhiêu sheet khác nhau (dư nguyên tiêu đề mang qua các sheet khác. em viết lệnh VBA nhưng chay lỗi. phiền các bác sửa hộ em với ạ. Đoan code em có đính kèm ạ
Thử cái rownum =100 coi
 
Upvote 0
Em có 1 sheet có nhiều dư liệu em muôn tách 100 dòng từ sheet ban đâu ra thành nhiêu sheet khác nhau (dư nguyên tiêu đề mang qua các sheet khác. em viết lệnh VBA nhưng chay lỗi. phiền các bác sửa hộ em với ạ. Đoan code em có đính kèm ạ
Bài này đã hỏi ở đây rồi mà.
 
Upvote 0
Bạn vào cửa sổ VBE ấn F8 xem nó báo lỗi ở dòng nào rồi tính tiếp.
 
Upvote 0
bài ơ đáy code ko chạy được bác ạ. nên em đang hỏi lại
Nếu không chạy được thì nên nhờ bạn đã viết cho bài ở đó sửa chứ, sao lại bỏ qua bạn đó mà đi đăng bài mới để nhờ vậy, bạn làm thế này thì người khác không ai muốn sửa lại code của bạn kia đâu.
 
Upvote 0
1677985720635.png
Nó báo lôi như vậy không chạy ạ. Em muốn dư nguyên dong tiêu đề nên chỉ lấy 99 dòng thoi ạ thêm 1 dong tiêu đề nưa là 100
 
Upvote 0
@kiendaide1 Code đã sửa lại:
Rich (BB code):
Sub Test()
  Dim wb As Workbook
  Dim ThisSheet As Worksheet
  Dim NumOfColumns As Integer
  Dim RangeTieuDe As Range
  Dim RangeToCopy As Range
  Dim WorkbookCounter As Integer
  Dim RowsInFile
  Dim Prefix As String

  Application.ScreenUpdating = False

  'Initialize data
  Set ThisSheet = ThisWorkbook.ActiveSheet
  Set RangeTieuDe = ThisSheet.Range("VungTieuDe")
  NumOfColumns = ThisSheet.UsedRange.Columns.Count
  WorkbookCounter = 1
  RowsInFile = 500                   'how many rows (incl. header) in new files?
  Prefix = "test"                    'prefix of the file name

  For p = 2 To ThisSheet.UsedRange.Rows.Count Step RowsInFile - 1
    Set wb = Workbooks.Add
    RangeTieuDe.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 & "\" & Prefix & "_" & WorkbookCounter
    wb.Close

    'Increment file counter
    WorkbookCounter = WorkbookCounter + 1
  Next p

  Application.ScreenUpdating = True
  Set wb = Nothing
End Sub
 
Upvote 0
Để tách 100 dòng từ sheet ban đầu ra thành các sheet khác nhau dữ nguyên tiêu đề, bạn có thể sử dụng VBA để lặp lại quá trình tạo sheet mới và sao chép dữ liệu từ sheet ban đầu sang các sheet mới.
Dưới đây là một đoạn mã VBA mẫu để thực hiện công việc này:
Sub SplitData()
' Lấy số dòng dữ liệu trên sheet ban đầu
Dim totalRows As Long
totalRows = ActiveSheet.UsedRange.Rows.Count
' Tính số lượng sheet mới cần tạo
Dim numSheets As Long
numSheets = totalRows \ 100
If totalRows Mod 100 > 0 Then
numSheets = numSheets + 1
End If
' Tạo các sheet mới và sao chép dữ liệu từ sheet ban đầu sang
Dim currentRow As Long
currentRow = 1
For i = 1 To numSheets
Dim newSheet As Worksheet
Set newSheet = ThisWorkbook.Sheets.Add(After:=ActiveSheet)
newSheet.Name = "Sheet" & i
' Sao chép tiêu đề
Rows(1).Copy newSheet.Range("A1")

' Sao chép dữ liệu
Dim numRows As Long
If currentRow + 99 < totalRows Then
numRows = 100
Else
numRows = totalRows - currentRow + 1
End If
Rows(currentRow & ":" & currentRow + numRows - 1).Copy newSheet.Range("A2")

currentRow = currentRow + numRows
Next i

End Sub
 
Upvote 0
@kiendaide1 Code đã sửa lại:
Rich (BB code):
Sub Test()
  Dim wb As Workbook
  Dim ThisSheet As Worksheet
  Dim NumOfColumns As Integer
  Dim RangeTieuDe As Range
  Dim RangeToCopy As Range
  Dim WorkbookCounter As Integer
  Dim RowsInFile
  Dim Prefix As String

  Application.ScreenUpdating = False

  'Initialize data
  Set ThisSheet = ThisWorkbook.ActiveSheet
  Set RangeTieuDe = ThisSheet.Range("VungTieuDe")
  NumOfColumns = ThisSheet.UsedRange.Columns.Count
  WorkbookCounter = 1
  RowsInFile = 500                   'how many rows (incl. header) in new files?
  Prefix = "test"                    'prefix of the file name

  For p = 2 To ThisSheet.UsedRange.Rows.Count Step RowsInFile - 1
    Set wb = Workbooks.Add
    RangeTieuDe.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 & "\" & Prefix & "_" & WorkbookCounter
    wb.Close

    'Increment file counter
    WorkbookCounter = WorkbookCounter + 1
  Next p

  Application.ScreenUpdating = True
  Set wb = Nothing
End Sub
1677988590193.png
Em cam ơn ạ. Nhưng em chay nó báo vậy là sao bác nhỉ
 
Upvote 0
Bạn tìm google việc enable vba
1677989710409.png
Nó báo đoan này bác ạ. bác xem hộ em với
Bài đã được tự động gộp:

Để tách 100 dòng từ sheet ban đầu ra thành các sheet khác nhau dữ nguyên tiêu đề, bạn có thể sử dụng VBA để lặp lại quá trình tạo sheet mới và sao chép dữ liệu từ sheet ban đầu sang các sheet mới.
Dưới đây là một đoạn mã VBA mẫu để thực hiện công việc này:
Sub SplitData()
' Lấy số dòng dữ liệu trên sheet ban đầu
Dim totalRows As Long
totalRows = ActiveSheet.UsedRange.Rows.Count
' Tính số lượng sheet mới cần tạo
Dim numSheets As Long
numSheets = totalRows \ 100
If totalRows Mod 100 > 0 Then
numSheets = numSheets + 1
End If
' Tạo các sheet mới và sao chép dữ liệu từ sheet ban đầu sang
Dim currentRow As Long
currentRow = 1
For i = 1 To numSheets
Dim newSheet As Worksheet
Set newSheet = ThisWorkbook.Sheets.Add(After:=ActiveSheet)
newSheet.Name = "Sheet" & i
' Sao chép tiêu đề
Rows(1).Copy newSheet.Range("A1")

' Sao chép dữ liệu
Dim numRows As Long
If currentRow + 99 < totalRows Then
numRows = 100
Else
numRows = totalRows - currentRow + 1
End If
Rows(currentRow & ":" & currentRow + numRows - 1).Copy newSheet.Range("A2")

currentRow = currentRow + numRows
Next i

End Sub
1677989799353.png
Nó ko ra kết quả các sheet khác bác ạ
 
Upvote 0
View attachment 287196
Nó báo đoan này bác ạ. bác xem hộ em với
Bài đã được tự động gộp:


View attachment 287197
Nó ko ra kết quả các sheet khác bác ạ
1. Không có name range VungTieuDe thì tạo name chứ file bạn gửi có tên đó đâu.
2. Nó tạo ra file mới chứ không tạo sheet mới. Bạn nói "em viết lệnh VBA nhưng chay lỗi" nhưng lại không biết chuyện này sao?
 
Upvote 0
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom