Tách dữ liệu từ sheet tổng hợp sang các sheet khác có sẵn form... (1 người xem)

Liên hệ QC

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

jacky_police

Thành viên chính thức
Tham gia
30/7/07
Bài viết
54
Được thích
4
Xin chào các AE trên GPE.
Xin Code tách dữ liệu từ sheet tổng hợp sang các sheet khác có sẵn form...
Em có 1 file gồm các sheet tổng hợp (dữ liệu từ cell A5:U1000, 1-4 là tiêu đề) và các sheet thành phần (dữ liệu từ được coppy vào cell A5, 1-4 là tiêu đề)tất cả dữ liệu được nhập từ sheet tổng hợp. Bây giờ em muốn tách dữ liệu đó ra các sheet thành phần đã được tạo sẵn form để in ấn.
Sau khi update dữ liệu giờ em muốn tách ra các báo cáo thành phần (sheet A, B. C theo điều kiện A, B, C). Như kiểu AutoFilter cột C (chọn A) rồi coppy dữ liệu sang sheet A, AutoFilter cột C (chọn B) rồi coppy sang sheet B.....Nếu tách dữ liệu tạo sheet mới sẽ phải chỉnh lại bảng tính để in rất mất time.
Mong AE GPE giúp đỡ cho xin Code....
Xin chân thành cảm ơn!
 
Lần chỉnh sửa cuối:
gửi file đi.
 
AE GPE viết code để tách dữ liệu từ Data sang các sheet 10A-10I. (ô A2 được đánh số thứ tự luôn)
PHP:
Sub LapDSCacLop()
 Dim Sh As Worksheet, Arr()
 Dim Rws As Long, J As Long, W As Integer, Col As Byte
 With Sheets("Data").[B2]
    Rws = .CurrentRegion.Rows.Count
    Arr() = .Resize(Rws, 20).Value
 End With
 For Each Sh In ThisWorkbook.Worksheets
    If Sh.Name <> "Data" Then
        ReDim dArr(1 To 60, 1 To 21)
        Sh.[A2].Resize(60, 21).Value = dArr()
        For J = 1 To UBound(Arr())
            If Arr(J, 4) = Sh.Name Then
                W = W + 1:          dArr(W, 1) = W
                For Col = 1 To 20
                    dArr(W, Col + 1) = Arr(J, Col)
                Next Col
            End If
        Next J
        If W Then
            Sh.[A2].Resize(W, 21).Value = dArr()
            W = 0
        End If
    End If
 Next Sh
End Sub
 
Xin chào các AE trên GPE.
Xin Code tách dữ liệu từ sheet tổng hợp sang các sheet khác có sẵn form...
Em có 1 file gồm các sheet tổng hợp (dữ liệu từ cell A5:U1000, 1-4 là tiêu đề) và các sheet thành phần (dữ liệu từ được coppy vào cell A5, 1-4 là tiêu đề)tất cả dữ liệu được nhập từ sheet tổng hợp. Bây giờ em muốn tách dữ liệu đó ra các sheet thành phần đã được tạo sẵn form để in ấn.
Sau khi update dữ liệu giờ em muốn tách ra các báo cáo thành phần (sheet A, B. C theo điều kiện A, B, C). Như kiểu AutoFilter cột C (chọn A) rồi coppy dữ liệu sang sheet A, AutoFilter cột C (chọn B) rồi coppy sang sheet B.....Nếu tách dữ liệu tạo sheet mới sẽ phải chỉnh lại bảng tính để in rất mất time.
Mong AE GPE giúp đỡ cho xin Code....
Xin chân thành cảm ơn!
Thử File này, nhấn nút xem kết quả.
Lưu ý: Sheet Chuyen_DenLop, khi trong danh sách (Sheet DATA) có thêm lớp mới thì nhấn nút để tạo lại các Link.

Xem File bài 17.

 
Lần chỉnh sửa cuối:
Thử File này, nhấn nút xem kết quả.
Lưu ý: Sheet Chuyen_DenLop, khi trong danh sách (Sheet DATA) có thêm lớp mới thì nhấn nút để tạo lại các Link.
Xin cảm ơn AE đã quan tâm giúp đỡ! Các bản của mọi người đều rất hay. Bản của anh Be09 rất đầy đủ và tuyệt vời vượt mong muốn của em.
Chân thành cảm ơn AE GPE!
 
Thầy cho em hỏi trường Trung học ... mình làm cách nào viết chữ có dấu được vậy thầy.
Vào Insert, trong nhóm Text click vào mũi tên bên cạnh chữ A (nghiên), chọn 1 kiểu nó sẽ tạo ra 1 cái Shapes (có chữ Your text here), nhập chữ có dấu bình thường.
 
Thử File này, nhấn nút xem kết quả.
Lưu ý: Sheet Chuyen_DenLop, khi trong danh sách (Sheet DATA) có thêm lớp mới thì nhấn nút để tạo lại các Link.
Chỉ cho em với! VBA chỉ lấy dữ liệu được tới cột J thôi hả thầy? Vấn đề nữa là nếu em đánh số thứ tự từ 1 đến hết dữ liệu trong sheet data thì sheet tạo ra theo đúng thứ tự của data mà không tạo ra thứ tự của lớp mới (sheet mới) thầy ah!
Thầy xem lại giúp em...
 
Chỉ cho em với! VBA chỉ lấy dữ liệu được tới cột J thôi hả thầy? Vấn đề nữa là nếu em đánh số thứ tự từ 1 đến hết dữ liệu trong sheet data thì sheet tạo ra theo đúng thứ tự của data mà không tạo ra thứ tự của lớp mới (sheet mới) thầy ah!
Thầy xem lại giúp em...
Xin lỗi (tôi hơi vô ý), do làm mà không kiểm tra lại .
Nếu sheet DATA đánh số thứ tự liên tục thì mai tôi sẽ sửa code lấy đến cột U như sheet DATA và đánh số thứ tự từ 1 đến hết (cho từng sheet tách).
 
Xin lỗi (tôi hơi vô ý), do làm mà không kiểm tra lại .
Nếu sheet DATA đánh số thứ tự liên tục thì mai tôi sẽ sửa code lấy đến cột U như sheet DATA và đánh số thứ tự từ 1 đến hết (cho từng sheet tách).
Được thế thì còn gì bằng! Mất công sửa thầy copy luôn cho em tiêu đề từ A1 đến U3 nhé... Lúc đầu em tính tạo form sẵn chỉ cần copy dữ liệu thôi mà bản của thầy vừa đưa ra dữ liệu và tạo sheet mới luôn do vậy khi tách sheet ko copy tiêu đề sang.
Cảm ơn thầy rất nhiều!
 
Được thế thì còn gì bằng! Mất công sửa thầy copy luôn cho em tiêu đề từ A1 đến U3 nhé... Lúc đầu em tính tạo form sẵn chỉ cần copy dữ liệu thôi mà bản của thầy vừa đưa ra dữ liệu và tạo sheet mới luôn do vậy khi tách sheet ko copy tiêu đề sang.
Cảm ơn thầy rất nhiều!
File bài 3, tiêu đề có 1 dòng mà bạn nêu A1 đến U3 là sao?????
Các sheet mới tách ra thì sheet nào cũng có tiêu đề mà.
 
File bài 3, tiêu đề có 1 dòng mà bạn nêu A1 đến U3 là sao?????
Các sheet mới tách ra thì sheet nào cũng có tiêu đề mà.
Ah! Cái này là do em nhầm thầy ah. Thực tế là em để tiêu đề ở 3 dòng và trong 3 dòng ấy ngoài tiêu đề có những thông tin khác ví dụ như là lớp, tên giáo viên chủ nhiệm.
Kiểu như: Khi tách ở đây là tách lớp theo cột E nên sheet tạo ra sẽ phải đặt tên lớp (ví dụ: ở cell F3 Lớp 10A, H3 Giáo viên chủ nhiệm: Jack) Nếu thế thì dữ liệu copy không cần cột lớp nữa và tên giáo viên mình tạo 1 vùng E4:F11 trong sheet chuyển đến lớp để liên kết đến cell H3 ở sheet vừa tạo.
Thầy thấy như vậy có được không ah?
Thank you!
 
PHP:
Sub LapDSCacLop()
 Dim Sh As Worksheet, Arr()
 Dim Rws As Long, J As Long, W As Integer, Col As Byte
 With Sheets("Data").[B2]
    Rws = .CurrentRegion.Rows.Count
    Arr() = .Resize(Rws, 20).Value
 End With
 For Each Sh In ThisWorkbook.Worksheets
    If Sh.Name <> "Data" Then
        ReDim dArr(1 To 60, 1 To 21)
        Sh.[A2].Resize(60, 21).Value = dArr()
        For J = 1 To UBound(Arr())
            If Arr(J, 4) = Sh.Name Then
                W = W + 1:          dArr(W, 1) = W
                For Col = 1 To 20
                    dArr(W, Col + 1) = Arr(J, Col)
                Next Col
            End If
        Next J
        If W Then
            Sh.[A2].Resize(W, 21).Value = dArr()
            W = 0
        End If
    End If
 Next Sh
End Sub
Bạn giải thích cho mình về các dòng code trên giúp mình với! Mình gà về VBA lắm....
Thank you!
 
Chỉ cho em với! VBA chỉ lấy dữ liệu được tới cột J thôi hả thầy? Vấn đề nữa là nếu em đánh số thứ tự từ 1 đến hết dữ liệu trong sheet data thì sheet tạo ra theo đúng thứ tự của data mà không tạo ra thứ tự của lớp mới (sheet mới) thầy ah!
Thầy xem lại giúp em...
Làm cái phần lấy thêm vùng và đánh lại số thứ tự (còn cái khác nữa thì tính sau).
 
Ah! Cái này là do em nhầm thầy ah. Thực tế là em để tiêu đề ở 3 dòng và trong 3 dòng ấy ngoài tiêu đề có những thông tin khác ví dụ như là lớp, tên giáo viên chủ nhiệm.
Kiểu như: Khi tách ở đây là tách lớp theo cột E nên sheet tạo ra sẽ phải đặt tên lớp (ví dụ: ở cell F3 Lớp 10A, H3 Giáo viên chủ nhiệm: Jack) Nếu thế thì dữ liệu copy không cần cột lớp nữa và tên giáo viên mình tạo 1 vùng E4:F11 trong sheet chuyển đến lớp để liên kết đến cell H3 ở sheet vừa tạo.
Thầy thấy như vậy có được không ah?
Thank you!
Bạn xem lại thử File, không có nhiều thời gian nên làm chụp giựt cho xong, có thể dùng tạm được (chứ chưa đáp ứng yêu cầu).
Tôi thay File bài này, các bạn tải File tại bài 22.
 
Lần chỉnh sửa cuối:
Bạn xem lại thử File, không có nhiều thời gian nên làm chụp giựt cho xong, có thể dùng tạm được (chứ chưa đáp ứng yêu cầu).
Mở File và nhấn 2 nút màu hồng.
Cảm ơn thầy đã hỗ trợ hết mình. Về cơ bản đã giải quyết 95% công việc rồi thầy. Cho em hỏi sheet theo_doi có tác dụng gì vậy? Khi xoá sheet theo_doi đi thì tạo link lớp mất lớp đầu tiên (tên sheet đầu tiên) vậy là sao?
 
Web KT

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

Back
Top Bottom