CHẠY BÁO CÁO TỰ ĐỘNG BẰNG CODE VBA

nai_con

Thành viên chính thức
Tham gia ngày
20 Tháng chín 2009
Bài viết
66
Được thích
9
Điểm
670
Tuổi
32
Nơi ở
Thọ Đông - Thăng Thọ - Nông Cống - Thanh Hóa
Kính gửi Quý Anh/Chị Thầy/Cô.
Em có file theo dõi đơn hàng hàng ngày do nhân viên theo dõi, tuy nhiên mỗi lần trích báo cáo rất tốn thời gian và có sai sót. Em đính kèm file dữ liệu demo đi kèm với yêu cầu chi tiết cho mỗi bảng báo cáo. Kính mong Quý Anh/Chị, Thầy/Cô giúp đỡ để đáp ứng nhu cầu công việc.
Em chân thành cảm ơn.
Trân trọng!
 

File đính kèm

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
6,490
Được thích
10,653
Điểm
1,860
Còn đây là macro tạo báo cáo trong toàn tháng. Các số liệu mỗi tuần phân cách nhau 1 dòng trắng (Xin xem hình đính kèm)
PHP:
Sub BaoCaoTheoTuan()
Dim Rng As Range, sRng As Range, Cls As Range, Sh As Worksheet
Dim Rws As Long, Hg As Integer, W As Integer, Dm As Integer, Them As Integer
Dim MyFormat As String, MyAdd As String
 
With Sheets("TheoDoi")
    Rws = .[B3].CurrentRegion.Rows.Count
    Set Rng = .[F3].Resize(Rws)
    MyFormat = Rng.NumberFormat
    Rng.NumberFormat = "MM/DD/yyyy"
End With
Set Sh = ThisWorkbook.Worksheets("GPE")
With Sheets("BCao")
    .[A4].Resize(6666, 6).ClearContents:                         Dg = 3
    For Each Cls In Sh.Range("B4:H9")
        If Month(Cls.Value) = Sh.[F2].Value Then
            Them = Cls.Row - 4
            Set sRng = Rng.Find(Format(Cls.Value, "MM/DD/yyyy"), , xlValues, xlWhole)
            If Not sRng Is Nothing Then
                MyAdd = sRng.Address
                Do
                    W = W + 1
                    .Cells(Dg + Them + W, "A").Value = W
                    .Cells(Dg + Them + W, "B").Value = sRng.Value
                    .Cells(Dg + Them + W, "B").Interior.ColorIndex = 34 + Them
                    For Dm = -4 To -1 Step 1
                        .Cells(Dg + Them + W, Dm + 7).Value = sRng.Offset(, Dm).Value
                    Next Dm
                    Set sRng = Rng.FindNext(sRng)
                Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
            End If
        End If
    Next Cls
End With
End Sub
Lưu ý: Bạn lấy 1 trang tính trắng, gán cho nó cái tện 'BCao', & sau đó cho macro chạy là được. Chúc vui!
 

File đính kèm

nai_con

Thành viên chính thức
Tham gia ngày
20 Tháng chín 2009
Bài viết
66
Được thích
9
Điểm
670
Tuổi
32
Nơi ở
Thọ Đông - Thăng Thọ - Nông Cống - Thanh Hóa
Còn đây là macro tạo báo cáo trong toàn tháng. Các số liệu mỗi tuần phân cách nhau 1 dòng trắng (Xin xem hình đính kèm)
PHP:
Sub BaoCaoTheoTuan()
Dim Rng As Range, sRng As Range, Cls As Range, Sh As Worksheet
Dim Rws As Long, Hg As Integer, W As Integer, Dm As Integer, Them As Integer
Dim MyFormat As String, MyAdd As String

With Sheets("TheoDoi")
    Rws = .[B3].CurrentRegion.Rows.Count
    Set Rng = .[F3].Resize(Rws)
    MyFormat = Rng.NumberFormat
    Rng.NumberFormat = "MM/DD/yyyy"
End With
Set Sh = ThisWorkbook.Worksheets("GPE")
With Sheets("BCao")
    .[A4].Resize(6666, 6).ClearContents:                         Dg = 3
    For Each Cls In Sh.Range("B4:H9")
        If Month(Cls.Value) = Sh.[F2].Value Then
            Them = Cls.Row - 4
            Set sRng = Rng.Find(Format(Cls.Value, "MM/DD/yyyy"), , xlValues, xlWhole)
            If Not sRng Is Nothing Then
                MyAdd = sRng.Address
                Do
                    W = W + 1
                    .Cells(Dg + Them + W, "A").Value = W
                    .Cells(Dg + Them + W, "B").Value = sRng.Value
                    .Cells(Dg + Them + W, "B").Interior.ColorIndex = 34 + Them
                    For Dm = -4 To -1 Step 1
                        .Cells(Dg + Them + W, Dm + 7).Value = sRng.Offset(, Dm).Value
                    Next Dm
                    Set sRng = Rng.FindNext(sRng)
                Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
            End If
        End If
    Next Cls
End With
End Sub
Lưu ý: Bạn lấy 1 trang tính trắng, gán cho nó cái tện 'BCao', & sau đó cho macro chạy là được. Chúc vui!
Em xin chân thành cảm ơn Thầy. 3 hôm rồi Em có chuyến công tác xa nên chưa kịp Check thông tin. Để Em áp dụng có vướng gì nữa nhờ Thầy chỉ điểm thêm.
Chân thành cảm ơn Thầy đã giúp đỡ cho Em.
Em cảm ơn.
 

nai_con

Thành viên chính thức
Tham gia ngày
20 Tháng chín 2009
Bài viết
66
Được thích
9
Điểm
670
Tuổi
32
Nơi ở
Thọ Đông - Thăng Thọ - Nông Cống - Thanh Hóa
Thưa thầy "SA_DQ " báo cáo của em gồm 4 phần nhưng file thầy gửi Em thấy mới báo cáo được 2 mục trong 4 mục nội dung yêu cầu thôi Thầy. Không biết hoàn chỉnh báo cáo đầy đủ nội dung nhanh thông Thầy xem giúp em với. Về VBA em cũng chưa sắp được thời gian chuyên tâm nghiên cứu nhiều.
Chân thành cảm ơn Thầy.
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
6,490
Được thích
10,653
Điểm
1,860
Để thực hiện đủ 4 mục như bạn iêu cầu, bạn cần cho biết bên trang 'TheoDoi' thường tối đa trong tháng có bao nhiêu dòng dữ liệu;
Trong 4 phần đó số dòng dữ liệu thường phân bố như thế nào? Nghĩa là mo63u mục thường có cực đại bao nhiêu dòng?
 

nai_con

Thành viên chính thức
Tham gia ngày
20 Tháng chín 2009
Bài viết
66
Được thích
9
Điểm
670
Tuổi
32
Nơi ở
Thọ Đông - Thăng Thọ - Nông Cống - Thanh Hóa
Để thực hiện đủ 4 mục như bạn iêu cầu, bạn cần cho biết bên trang 'TheoDoi' thường tối đa trong tháng có bao nhiêu dòng dữ liệu;
Trong 4 phần đó số dòng dữ liệu thường phân bố như thế nào? Nghĩa là mo63u mục thường có cực đại bao nhiêu dòng?
Thưa Thầy.
File Em theo dõi từng tháng 1. Cực đại mỗi phần là 200 line tối đa 1 tháng 800 - 1000 dòng.
Kính mong thầy giúp đỡ.
Trân trọng!
 
Top Bottom