Tách dữ liệu trong 1 file thành nhiều sheet theo số lượng dòng

Liên hệ QC

Monkey1508

Thành viên mới
Tham gia
24/2/21
Bài viết
13
Được thích
0
Mình cần cả nhà hỗ trợ và cho mình hỏi cách nào tách dữ liệu trong 1 file thành nhiều sheet theo số lượng dòng không ạ? Mình có gửi kèm file, theo file này mình muốn tashc thành 4 sheet mỗi sheet khoảng 40 dòng. Cảm ơn cả nhà.
 

File đính kèm

  • Tách dữ liệu thành nhiều sheet theo số dòng.xlsx
    45.5 KB · Đọc: 11
Mình cần cả nhà hỗ trợ và cho mình hỏi cách nào tách dữ liệu trong 1 file thành nhiều sheet theo số lượng dòng không ạ? Mình có gửi kèm file, theo file này mình muốn tashc thành 4 sheet mỗi sheet khoảng 40 dòng. Cảm ơn cả nhà.
Cách thì có, có thể dùng VBA. cũng có thể dùng công thức: tạo 4 sheet kéo công thức mỗi sheet 40 dòng
Bạn muốn cách nào
 
mình muốn sử dụng VBA á bạn, vì dữ liệu của mình sẽ nhiều hơn data mẫu đã gửi, cảm ơn phản hồi từ bạn nhé.
Bạn thử với code dưới xem nhé:
Mã:
Sub zaq()
  Dim Rng As Range, I As Long
  On Error Resume Next
  Application.ScreenUpdating = False
  Set Rng = Sheet1.UsedRange
  If Rng.Rows.Count <= 40 Then Exit Sub
  Do
    I = I + 1
    If Sheets("T" & Format(I, "00")) Is Nothing Then
      With Sheets.Add(After:=Sheets(Sheets.Count))
        .Name = "T" & Format(I, "00")
        .Range("A1:BN40").Value = Rng.Offset((I - 1) * 40).Resize(40, 66).Value
      End With
    End If
  Loop Until I * 40 >= Rng.Rows.Count
  Sheets("Sheet18").Activate
  Application.ScreenUpdating = True
End Sub
 
Bạn thử với code dưới xem nhé:
Mã:
Sub zaq()
  Dim Rng As Range, I As Long
  On Error Resume Next
  Application.ScreenUpdating = False
  Set Rng = Sheet1.UsedRange
  If Rng.Rows.Count <= 40 Then Exit Sub
  Do
    I = I + 1
    If Sheets("T" & Format(I, "00")) Is Nothing Then
      With Sheets.Add(After:=Sheets(Sheets.Count))
        .Name = "T" & Format(I, "00")
        .Range("A1:BN40").Value = Rng.Offset((I - 1) * 40).Resize(40, 66).Value
      End With
    End If
  Loop Until I * 40 >= Rng.Rows.Count
  Sheets("Sheet18").Activate
  Application.ScreenUpdating = True
End Sub
cảm ơn bạn nhiều nhé, nhưng phải làm sao để các sheet cũng có dòng tiêu đề vậy ạ, nhờ bạn chỉ giáo thêm.
 
cảm ơn bạn nhiều nhé, nhưng phải làm sao để các sheet cũng có dòng tiêu đề vậy ạ, nhờ bạn chỉ giáo thêm.
Thử sử dụng File. Chạy code hiện InputBox (đã gán sẳn 40 dòng) nếu bạn muốn nhiều hơn thì gõ con số vào rồi nhấn OK.
 

File đính kèm

  • Tach sheet Số dòng tùy ý.xlsm
    52.9 KB · Đọc: 38
Không biết đến bao giờ bà con mới chịu nhớ nguyên tắc:
Tự động theo VBA thì nó khác với làm tay là nó rất "tiện tay", tự động nhiều lần. Có thể do cố ý, cũng có thể do vô tình.
Nếu bạn nhấn nhiều lần thì chạy tiếp theo hay xoá hết, làm lại từ đầu?
Xoá hết làm lại thì khá dễ, chỉ cần thớt cho biết cách phân biệt lần trước đã tạo ra những gì.
Làm tiếp thoe hơi khó hơn, thớt cần xác định cho rõ phương cách tiếp theo.
 
Thử sử dụng File. Chạy code hiện InputBox (đã gán sẳn 40 dòng) nếu bạn muốn nhiều hơn thì gõ con số vào rồi nhấn OK.
bạn ơi, làm phiền bạn cho mình hỏi thêm xí nữa, những file trên mỗi sheet được tách ra mình muốn thêm 1 dòng cuối nguyên dòng là chữ "EOF" thì làm cách nào ạ? Cảm ơn bạn nhiều đã phản hồi nhé.
 
bạn ơi, làm phiền bạn cho mình hỏi thêm xí nữa, những file trên mỗi sheet được tách ra mình muốn thêm 1 dòng cuối nguyên dòng là chữ "EOF" thì làm cách nào ạ? Cảm ơn bạn nhiều đã phản hồi nhé.
Không hiểu bạn muốn gán "EOF" cho các Cells ở dòng trống cuối cùng của các sheet tách để làm gì? Bạn xem thử có đúng ý không nhé!.
 

File đính kèm

  • Tach sheet Số dòng tùy ý.xlsm
    53.2 KB · Đọc: 15
Cùng với file như trên mình đang muốn chuyển sang tách dữ liệu trong 1 sheet ra nhiều file có chọn số dòng. Ai giúp mình với ạ! Thanks
 
Cả nhà cho em hỏi, cũng file như trên, nhưng sao khi thay số dòng là 65000 dòng như bên dưới, thì code chỉ chạy được đến T04, từ T05 không ra dữ liệu ạ. Em cảm ơn cả nhà

Sub zaq()
Dim Rng As Range, I As Long
On Error Resume Next
Application.ScreenUpdating = False
Set Rng = Sheet1.UsedRange
If Rng.Rows.Count <= 65000 Then Exit Sub
Do
I = I + 1
If Sheets("T" & Format(I, "00")) Is Nothing Then
With Sheets.Add(After:=Sheets(Sheets.Count))
.Name = "T" & Format(I, "00")
.Range("A1:B65000").Value = Rng.Offset((I - 1) * 65000).Resize(65000).Value
End With
End If
Loop Until I * 65000 >= Rng.Rows.Count
Sheets("Sheet1").Activate
Application.ScreenUpdating = True
End Sub
 

File đính kèm

  • Copy%20of%20Danh%20sach%20KH%20gui%20email_2 (version 1).xlsb
    3 MB · Đọc: 2
Cả nhà cho em hỏi, cũng file như trên, nhưng sao khi thay số dòng là 65000 dòng như bên dưới, thì code chỉ chạy được đến T04, từ T05 không ra dữ liệu ạ. Em cảm ơn cả nhà

Sub zaq()
Dim Rng As Range, I As Long
On Error Resume Next
Application.ScreenUpdating = False
Set Rng = Sheet1.UsedRange
If Rng.Rows.Count <= 65000 Then Exit Sub
Do
I = I + 1
If Sheets("T" & Format(I, "00")) Is Nothing Then
With Sheets.Add(After:=Sheets(Sheets.Count))
.Name = "T" & Format(I, "00")
.Range("A1:B65000").Value = Rng.Offset((I - 1) * 65000).Resize(65000).Value
End With
End If
Loop Until I * 65000 >= Rng.Rows.Count
Sheets("Sheet1").Activate
Application.ScreenUpdating = True
End Sub
Loop Until I * 65000 >= Rng.Rows.Count

Dữ liệu bạn có là bao nhiêu dòng? i = 5 thì 5 x 65.000 = 325.000 dòng.
 
Dữ liệu em có gần 1 triệu dòng, nhưng đưa file lên nặng quá, diễn đàn không cho up nên em phải xoá vợi đi ạ
 
Vâng, ý em là I * 65000 >= Rng.Rows.Count = 325.000 dòng, nhưng em có hơn 1 triệu dòng, thì vòng lặp chưa thể kết thúc ở I = 5 được.
Hiện đang kết thúc ở I = 5 nên em đang chưa hiểu lỗi do nguyên nhân gì ạ.
Em cảm ơn
 
Vâng, ý em là I * 65000 >= Rng.Rows.Count = 325.000 dòng, nhưng em có hơn 1 triệu dòng, thì vòng lặp chưa thể kết thúc ở I = 5 được.
Hiện đang kết thúc ở I = 5 nên em đang chưa hiểu lỗi do nguyên nhân gì ạ.
Em cảm ơn
Tôi dùng code bạn thì bị lỗi khởi động lại Excel. Lý do thế nào tôi không biết nhưng từ chỗ With Sheets.Add(After:=Sheets(Sheets.Count)) nó chỉ đặt tên được cho sheet chứ không chịu thi hành lệnh copy dữ liệu. Do vậy tôi đổi code cho tường minh: Khai báo rõ sheet được thêm:
Rich (BB code):
Sub zaq()
  Dim Rng As Range, I As Long, Sh As Worksheet
  On Error Resume Next
  Application.ScreenUpdating = False
  Set Rng = Sheet1.UsedRange
  If Rng.Rows.Count <= 65000 Then Exit Sub
  Do
    I = I + 1
    If Sheets("T" & Format(I, "00")) Is Nothing Then
        Set Sh = Sheets.Add(After:=Sheets(Sheets.Count))
        Sh.Name = "T" & Format(I, "00")
        Sh.Range("A1:B65000").Value = Rng.Offset((I - 1) * 65000).Resize(65000).Value
    End If
  Loop Until I * 65000 >= Rng.Rows.Count
  Sheets("Sheet1").Activate
  Application.ScreenUpdating = True
End Sub

Nhưng có 1 điều là nếu sheet T05 đang có dữ liệu chưa đủ 65000 dòng mà sau đó được nhập thêm thì code không rờ được tới sheet T05 để cập nhật dữ liệu. Do đó, cần phải thêm:
Else
Sh.Range("A1:B65000").Value = Rng.Offset((I - 1) * 65000).Resize(65000).Value
 
Web KT
Back
Top Bottom