Code Tách dữ liệu từ bảng tổng hợp ra các sheet chi tiết theo ngày

Liên hệ QC

n78nokia81

Thành viên mới
Tham gia
15/3/10
Bài viết
34
Được thích
1
Chào các thầy các bạn

Mình muốn nhờ giúp viết code cho file tách dữ liệu từ sheet database ra các sheet tổng hợp
Cụ thể mình có sheet bangke gồm các số liệu từ ngày 1 đến ngày 31. Mình muốn tự động chèn và tạo các sheet từ 1 đến 31 và copy dữ liệu các ngày từ 1 đến 31 vào các sheet tương ứng
Mình gửi file và dữ liệu mẫu mong được giúp đỡ
Cảm ơn

Việc xuất chi tiết ra từng sheet của từng ngày phục vụ công tác báo cáo cuối tháng nên mong mọi ng giúp.
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Cảm ơn Le_vis tuy nhiên việc làm của bạn không phải yêu cầu của mình. Mình muốn cho ra nhiều sheet (31 sheet) chứ không phải cho 1 sheet và chọn ngày như của bạn. Rất cảm ơn
 
Upvote 0
Cảm ơn Le_vis tuy nhiên việc làm của bạn không phải yêu cầu của mình. Mình muốn cho ra nhiều sheet (31 sheet) chứ không phải cho 1 sheet và chọn ngày như của bạn. Rất cảm ơn

Thêm 1 cột phụ rồi lọc nó ra, bạn xem file nhé.
 

File đính kèm

Upvote 0
Cảm ơn Bác (bạn, Thầy) Hai Lúa Miền Tây!

File của Bác gửi rất hay nhưng có 1 số vấn đề sau ạ:
Mình không cần nút tạo sheet vì tạo luôn mặc định rồi để căn chỉnh form mẫu in cho dễ nếu dùng nút tạo sheet của bạn khi copy sinh ra các sheet lại phải căn chỉnh khi in rất mất công
Khi tạo list thì tạo dòng tiêu đề từ dòng 1 đến dòng 6 như của sheet bangke được ko?
Khi copy và tạo list thì cho cột stt tại từng sheet chạy lại theo thứ tự dữ liệu trong từng sheet được ko?

Thanks
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Bác (bạn, Thầy) Hai Lúa Miền Tây!

File của Bác gửi rất hay nhưng có 1 số vấn đề sau ạ:
Mình không cần nút tạo sheet vì tạo luôn mặc định rồi để căn chỉnh form mẫu in cho dễ nếu dùng nút tạo sheet của bạn khi copy sinh ra các sheet lại phải căn chỉnh khi in rất mất công
Khi tạo list thì tạo dòng tiêu đề từ dòng 1 đến dòng 6 như của sheet bangke được ko?
Khi copy và tạo list thì cho cột stt tại từng sheet chạy lại theo thứ tự dữ liệu trong từng sheet được ko?

Thanks

Bạn dùng code sau:

Mã:
Option Explicit
Sub xoa()
    Dim sh As Worksheet
    Application.DisplayAlerts = False
        For Each sh In ThisWorkbook.Sheets
            If UCase(sh.Name) <> "BANG KE" And UCase(sh.Name) <> "TEMP" Then
                sh.Delete
            End If
        Next
    Application.DisplayAlerts = True
End Sub
Sub TachSheet()
    Dim dv As String, i As Integer, k As Integer, j As Integer
    Application.ScreenUpdating = False
    On Error Resume Next
    xoa
    For i = 1 To 31
              dv = i
              If dv > 0 Then
                  Sheets("Temp").Copy After:=Sheets(Sheets.Count)
                  ActiveSheet.Name = dv
                  Application.StatusBar = dv
                  With Sheets(dv)
                        .[a4] = "Ngày " & dv & " Tháng        N" & ChrW(259) & "m"
                        k = 7
                        For j = 7 To Sheet1.[a6].CurrentRegion.Rows.Count
                            If Day(Sheet1.Cells(j, 2)) = dv And Len(Sheet1.Cells(j, 2)) <> 0 Then
                                   .Cells(k, 1) = k - 6
                                   .Cells(k, 2) = Sheet1.Cells(j, 3)
                                   .Cells(k, 3) = Sheet1.Cells(j, 2)
                                   .Cells(k, 4) = Sheet1.Cells(j, 4)
                                   .Cells(k, 5) = Sheet1.Cells(j, 5)
                                   .Cells(k, 6) = Sheet1.Cells(j, 6)
                                   .Cells(k, 7) = Sheet1.Cells(j, 7)
                                   .Cells(k, 8) = Sheet1.Cells(j, 8)
                                   .Cells(k, 9) = Sheet1.Cells(j, 9)
                                   k = k + 1
                                   Sheets(dv).Cells(k, 1).EntireRow.Insert Shift:=xlDown
                            End If
                        Next
                  End With
              End If
     Next
    Application.StatusBar = ""
    Sheet1.ShowAllData
    Sheet1.Activate
    MsgBox "Xong"
    Application.ScreenUpdating = True
End Sub
 

File đính kèm

Upvote 0
Chân thành cảm ơn Hai Lúa Miền Tây



Còn 1 vấn đề nữa nhờ bạn giúp đỡ. Khi cho ra từng sheet của từng ngày thì chỉ hiện mỗi ngày tại dòng A4 còn tháng và năm ko hiện. Bạn làm giúp cho hiện thêm tháng và năm được ko. Tháng năm dựa vào ngày tháng của dữ liệu
Thanks
 
Lần chỉnh sửa cuối:
Upvote 0
Chân thành cảm ơn Hai Lúa Miền Tây



Còn 1 vấn đề nữa nhờ bạn giúp đỡ. Khi cho ra từng sheet của từng ngày thì chỉ hiện mỗi ngày tại dòng A4 còn tháng và năm ko hiện. Bạn làm giúp cho hiện thêm tháng và năm được ko. Tháng năm dựa vào ngày tháng của dữ liệu
Thanks

Vậy dữ liệu của bạn có nhiều năm hay là 1 năm?
 
Upvote 0
Hai Lúa Miền Tây ơi! mìnhcũng có 1 bài tương tự như vậy, bạn có thể xem giúp mình được không?
thay vì bài trên là lọc 31 ngày thì bài của mình lọc theo cột "ĐẢM TRÁCH" tức là cột c.mình không biết bài trên là bạn code cứng 31 sheet hay không, nhưng mình muốn là có bao nhiêu tên "ĐẢM TRÁCH"(không tính trùng tên) thì nó lọc ra từng đó sheet.
Bạn xem giúp mình với
 

File đính kèm

Upvote 0
Dữ liệu theo từng tháng một bạn ạ. Từng tháng đều phải làm như vậy
 
Upvote 0
Hai Lúa Miền Tây ơi! mìnhcũng có 1 bài tương tự như vậy, bạn có thể xem giúp mình được không?
thay vì bài trên là lọc 31 ngày thì bài của mình lọc theo cột "ĐẢM TRÁCH" tức là cột c.mình không biết bài trên là bạn code cứng 31 sheet hay không, nhưng mình muốn là có bao nhiêu tên "ĐẢM TRÁCH"(không tính trùng tên) thì nó lọc ra từng đó sheet.
Bạn xem giúp mình với

Bạn xem file đính kèm nhé.
 

File đính kèm

Upvote 0

File đính kèm

Upvote 0
Cảm ơn anh Hai Lúa Miền Tây, đúng ý em rồi, nhưng phát sinh 1 vấn đề là em muốn chèn thêm 1 sheet thống kê là "DANH SACH KTCT" thì lại không được,anh xem giúp em với!

Không được là không được chổ nào? Bạn lưu ý là cái sheet Temp phải có nhé, vì sheet Temp là sheet dùng làm cái form mẫu để đưa dữ liệu qua.
Mã:
Sub xoa()
    Dim sh As Worksheet
    Application.DisplayAlerts = False
        For Each sh In ThisWorkbook.Sheets
            If UCase(sh.Name) <> "XLNV" And UCase(sh.Name) <> "TEMP" [B][COLOR=#ff0000]And UCase(sh.Name) <> "DANH SACH KTCT"[/COLOR][/B] Then
                sh.Delete
            End If
        Next
    Application.DisplayAlerts = True
End Sub
 
Upvote 0
Không được là không được chổ nào? Bạn lưu ý là cái sheet Temp phải có nhé, vì sheet Temp là sheet dùng làm cái form mẫu để đưa dữ liệu qua.
Không được tức là lúc chèn thêm sheet "DANH SACH KTCT" (như mình gửi ở file trên) rồi kích nút "TáchSheet" xong thì sheet "DANH SACH KTCT" cũng mất luôn
 
Lần chỉnh sửa cuối:
Upvote 0

File đính kèm

Upvote 0
Dạ được rồi anh Hai Lúa Miền Tây,em cảm ơn anh nhiều. à em có 1 cái nữa muốn anh giúp, tại khó nói ra ý muốn của em quá nên em có giải thích trong file đính kèm, anh xem giúp em với.

Ban đầu bạn nói chỉ tách sheet thì tôi làm tách sheet, còn nó lỗi là do bạn không miêu tả lúc ban đầu.
Lỗi là do các sheet trước khi tách sẽ bị xóa đi và tạo lại sheet mới. Cách khắc phục là phải dùng hàm Indirect nhé.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Ban đầu bạn nói chỉ tách sheet thì tôi làm tách sheet, còn nó lỗi là do bạn không miêu tả lúc ban đầu.
Lỗi là do các sheet trước khi tách sẽ bị xóa đi và tạo lại sheet mới. Cách khắc phục là phải dùng hàm Indirect nhé.
Anh có cách nào mà khi dùng Indirect trả về #REF!, mình dùng hàm SUM()trong vùng có 1 ô bị #REF! thì nó vẫn tính được tổng của các ô còn lại không anh?
em có giải thích rõ hơn trong file đính kèm(anh kéo xuống phía dưới cùng ak). Tiền bối xem giúp em với.
 

File đính kèm

Upvote 0
Anh có cách nào mà khi dùng Indirect trả về #REF!, mình dùng hàm SUM()trong vùng có 1 ô bị #REF! thì nó vẫn tính được tổng của các ô còn lại không anh?
em có giải thích rõ hơn trong file đính kèm(anh kéo xuống phía dưới cùng ak). Tiền bối xem giúp em với.

Bạn dùng hàm khử lỗi là được mà. Tôi làm mẫu cho bạn 2 cột đầu (D và E), các cột sau bạn tự làm nhé.
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom