Em cần hỗ trợ tách 1 sheet ra nhiều sheet (5 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Tôi tuân thủ nội quy khi đăng bài

trinhminhvy

Thành viên mới
Tham gia
13/8/13
Bài viết
7
Được thích
0
Kính nhờ các bác hỗ trợ như sau ạ:
1. Tách dữ liệu mỗi Công ty ra 1 sheet - tên sheet là tên công ty.
2. Tự động đánh số thứ tự hóa đơn theo thứ tự ký hiệu hóa đơn và ngày tháng hóa đơn.
3. Tự động chèn 1 dòng tính tổng tiền hàng và tổng tiền thuế vào dòng cuối cùng của công ty đó.

Em đã mò được cách tách mỗi công ty ra 1 sheet bằng Pivot Table nhưng giao diện ko trực quan, ko thuận tiện cho việc in ấn. Mong các bác hỗ trợ dùng VBA ạ. Được hay không em cũng xin cảm ơn các bác đã đọc bài ạ.
Bài đã được tự động gộp:

Em quên mất, các bác cho em xin Code để e có thể chủ động hơn ạ!
 

File đính kèm

Cấu trúc sau khi tách giống cấu trúc ban đầu, vậy filter theo tên công ty luôn cho nhanh, cần gì tách cho mệt
 
Thử thực nghiệm bằng thêm vài dòng sau...
Mã:
Sub SplitTableByColumn()
    Dim ws As Worksheet
    Dim tbl As ListObject
    Dim uniqueValues As Collection
    Dim cell As Range
    Dim destSheet As Worksheet
    Dim columnName As String
    Dim filteredTable As ListObject
    Dim i As Integer
    Dim lr As Long
    
    ' the table1 with all data
    Set ws = ThisWorkbook.Sheets("All")
    Set tbl = ws.ListObjects("table1")
    columnName = "Ten cong ty"

    'Xoa sheet cu
    DeleteAllExceptSpecificSheets
    
    ' Tao danh sach khong trung
    Set uniqueValues = New Collection
    On Error Resume Next
    For Each cell In tbl.ListColumns(columnName).DataBodyRange
        uniqueValues.Add cell.Value, CStr(cell.Value)
    Next cell
    On Error GoTo 0
    
    ' Vong lap tao danh sach
    For i = 1 To uniqueValues.Count
        ' Them sheet
        Set destSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        destSheet.Name = uniqueValues(i) ' Adjust the sheet naming convention as needed

        ' Filter the table
        tbl.Range.AutoFilter Field:=tbl.ListColumns(columnName).Index, Criteria1:=uniqueValues(i)

        ' Copy to the new sheet
        tbl.Range.SpecialCells(xlCellTypeVisible).Copy Destination:=destSheet.Cells(5, 2)
        lr = destSheet.Range("b1000").End(xlUp).Row + 2
        destSheet.Cells(lr, 2) = "Tong Cong"
        destSheet.Cells(lr, 2).Font.Italic = True
        
        destSheet.Cells(lr, 7) = "=sum(r[-6]c:r[-2]c)"
        destSheet.Cells(lr, 8) = "=sum(r[-6]c:r[-2]c)"
        destSheet.Cells(5, 2).CurrentRegion.EntireColumn.AutoFit
      
        ' Clear the filter
        ws.AutoFilterMode = False
    Next i
    
    ws.Activate
    End Sub
 
Khả năng là mong muốn của chủ bài sẽ chưa dừng ở đây, ví dụ: Để in thì còn phải tạo viền, bôi đậm dòng Tong Cong ...
dạ đúng là như thế ạ, e cũng sợ đưa ra nhiều yêu cầu quá ko ai muốn giúp ạ. hihi
Bài đã được tự động gộp:

Cấu trúc sau khi tách giống cấu trúc ban đầu, vậy filter theo tên công ty luôn cho nhanh, cần gì tách cho mệt
đây là cái bảng mẫu đơn giản thôi, còn bảng gốc của em hàng chục nghìn dòng dữ liệu của hàng trăm công ty bác ạ.
Bài đã được tự động gộp:

Thử thực nghiệm bằng thêm vài dòng sau...
Mã:
Sub SplitTableByColumn()
    Dim ws As Worksheet
    Dim tbl As ListObject
    Dim uniqueValues As Collection
    Dim cell As Range
    Dim destSheet As Worksheet
    Dim columnName As String
    Dim filteredTable As ListObject
    Dim i As Integer
    Dim lr As Long
   
    ' the table1 with all data
    Set ws = ThisWorkbook.Sheets("All")
    Set tbl = ws.ListObjects("table1")
    columnName = "Ten cong ty"

    'Xoa sheet cu
    DeleteAllExceptSpecificSheets
   
    ' Tao danh sach khong trung
    Set uniqueValues = New Collection
    On Error Resume Next
    For Each cell In tbl.ListColumns(columnName).DataBodyRange
        uniqueValues.Add cell.Value, CStr(cell.Value)
    Next cell
    On Error GoTo 0
   
    ' Vong lap tao danh sach
    For i = 1 To uniqueValues.Count
        ' Them sheet
        Set destSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        destSheet.Name = uniqueValues(i) ' Adjust the sheet naming convention as needed

        ' Filter the table
        tbl.Range.AutoFilter Field:=tbl.ListColumns(columnName).Index, Criteria1:=uniqueValues(i)

        ' Copy to the new sheet
        tbl.Range.SpecialCells(xlCellTypeVisible).Copy Destination:=destSheet.Cells(5, 2)
        lr = destSheet.Range("b1000").End(xlUp).Row + 2
        destSheet.Cells(lr, 2) = "Tong Cong"
        destSheet.Cells(lr, 2).Font.Italic = True
       
        destSheet.Cells(lr, 7) = "=sum(r[-6]c:r[-2]c)"
        destSheet.Cells(lr, 8) = "=sum(r[-6]c:r[-2]c)"
        destSheet.Cells(5, 2).CurrentRegion.EntireColumn.AutoFit
     
        ' Clear the filter
        ws.AutoFilterMode = False
    Next i
   
    ws.Activate
    End Sub
1744937968488.png
báo lỗi này bác ạ, e insert vào file gốc của em.
 
Thay vì tách sheet sẽ gây dung lượng file tăng lên, hoặc có thể lại mất công đối chiếu lại các sheet chi tiết và số tổng khớp không (trường hợp này hay xảy ra lúc in ấn sheet chi tiết).
=> Bạn nghiên cứu phương án
1. Tạo sheet template dùng cho việc in và lấy các thông tin của 1 công ty vào đây.
2. Có nút bấm chọn tên công ty để lấy thông tin.
3. Có nút bấm in hàng loạt theo danh sách bạn có thể chọn
 
Nếu chủ bài không viết tắt thì đã được hỗ trợ xong lâu rồi.
Vậy e xin phép làm phiền mọi người thêm mấy nội dung nữa bác nhé. Mục 1 bác DETONG đã hỗ trợ em. Còn các mục sau ạ:
2. Tự động đánh số thứ tự hóa đơn theo thứ tự ký hiệu hóa đơn và ngày tháng hóa đơn.
3. Tự động chèn 1 dòng tính tổng tiền hàng và tổng tiền thuế vào dòng cuối cùng của công ty đó.
E xin bổ sung theo bảng kê dưới đây ạ.
 

File đính kèm

Vậy e xin phép làm phiền mọi người thêm mấy nội dung nữa bác nhé. Mục 1 bác DETONG đã hỗ trợ em. Còn các mục sau ạ:
2. Tự động đánh số thứ tự hóa đơn theo thứ tự ký hiệu hóa đơn và ngày tháng hóa đơn.
3. Tự động chèn 1 dòng tính tổng tiền hàng và tổng tiền thuế vào dòng cuối cùng của công ty đó.
E xin bổ sung theo bảng kê dưới đây ạ.
Bài của bạn đơn giản thôi, nhưng mình không hỗ trợ các trường hợp viết tắt. Thông cảm nhé.
 
Bạn nói "có hàng trăm công ty", vậy bạn định tách ra hàng trăm sheet à??
vâng bác, tách ra sheet tương ứng, sau đó làm 1 danh sách hyperlink tên các công ty và tổng tiền hàng, tổng tiền thuế bác ạ, nội dung này thì em tự làm được rồi dù chưa mượt lắm.
Bài đã được tự động gộp:

Bài của bạn đơn giản thôi, nhưng mình không hỗ trợ các trường hợp viết tắt. Thông cảm nhé.
em cảm ơn bác đã quan tâm ạ.
 
Vậy e xin phép làm phiền mọi người thêm mấy nội dung nữa bác nhé. Mục 1 bác DETONG đã hỗ trợ em. Còn các mục sau ạ:
2. Tự động đánh số thứ tự hóa đơn theo thứ tự ký hiệu hóa đơn và ngày tháng hóa đơn.
3. Tự động chèn 1 dòng tính tổng tiền hàng và tổng tiền thuế vào dòng cuối cùng của công ty đó.
E xin bổ sung theo bảng kê dưới đây ạ.
Chả ai lại đi quản lý như vậy, muốn kiểm tra vấn đề thì mở hàng trăm sheet để coi à, ai lại rảnh rỗi như vậy, làm việc thông minh lên đi, dùng Power Query, Power Pivot, Power Bi,SQL,Python,R, Tableau,......
 
Chả ai lại đi quản lý như vậy, muốn kiểm tra vấn đề thì mở hàng trăm sheet để coi à, ai lại rảnh rỗi như vậy, làm việc thông minh lên đi, dùng Power Query, Power Pivot, Power Bi,SQL,Python,R, Tableau,......
Dùng VBA là làm việc thông minh lắm rồi.
Chỉ có nó mới hy vọng được hổ trợ đầy đủ từ a đến z. Mấy giải pháp bạn đưa ra là cách làm việc trâu bò.
 
Dùng VBA là làm việc thông minh lắm rồi.
Chỉ có nó mới hy vọng được hổ trợ đầy đủ từ a đến z. Mấy giải pháp bạn đưa ra là cách làm việc trâu bò.
Dùng các cách của bài #15 thì không đáp ứng được hết các tiêu chí của bài #1. Chắc mong muốn của chủ bài là tách sheet xong rồi chỉ việc in thôi, không phải làm thêm gì nữa.
 
Lần chỉnh sửa cuối:
Chả ai lại đi quản lý như vậy, muốn kiểm tra vấn đề thì mở hàng trăm sheet để coi à, ai lại rảnh rỗi như vậy, làm việc thông minh lên đi, dùng Power Query, Power Pivot, Power Bi,SQL,Python,R, Tableau,......
Cảm ơn bác đã phản hồi. Em xin có lời thế này: Ai cũng thông minh như bác nói thì chắc không có cái diễn đàn này đâu bác ạ.
Bài đã được tự động gộp:

Theo mình thà bạn tách File mỗi công ty 1 file
Tách thế thì em e là không đủ sức đâu bác ạ. Dữ liệu tính hàng nghìn dòng, hàng trăm công ty mà mỗi công ty 1 file thì thôi bỏ việc là nhanh nhất bác ạ, hihi.
Bài đã được tự động gộp:

Dùng các cách của bài #15 thì không đáp ứng được hết các tiêu chí của bài #1. Chắc mong muốn của chủ bài là tách sheet xong rồi chỉ việc in thôi,không phải làm thêm gì nữa.
Dạ đúng là như thế bác ạ, công việc của em không đòi hỏi quá cao như các anh chị em nghiệp vụ kế toán. Số liệu cũng không phải cập nhật hàng giờ, hàng ngày. Chỉ cần làm một lần để dùng cho việc in ấn là chính.
 
10 ngày rồi mà có vẻ thớt chưa nhận được hỗ trợ theo ý muốn, chẳng có gì to tát nếu thớt chịu khó thay đổi theo một số góp ý. Đang có sẵn Form in hàng loạt nên đưa lên cho thớt tham khảo, chỉ dùng 1 sheet kết quả (vì nói thật tôi cũng không thích kiểu tách hàng trăm Sheet), thớt xem có dùng được không. Và nói trước là code chỉ đúng với file ví dụ mà thớt gửi lên, còn "file gốc" như thớt nói ở #8 nếu lỡ không đúng thì tôi không chịu trách nhiệm
1.png
 

File đính kèm

Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom