Nhờ giúp đỡ làm thống kê số liệu theo từng tháng (1 người xem)

  • Thread starter Thread starter pinklove
  • Ngày gửi Ngày gửi
Liên hệ QC

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

pinklove

Thành viên thường trực
Tham gia
21/1/08
Bài viết
336
Được thích
42
Mình có một file thống kê số giờ chạy máy nổ của các trạm Viễn Thông theo từng tháng. Bây giờ mình muốn làm hai mẫu báo cáo (theo trạm và theo người quản lý) như trong file. Nhờ giúp đỡ mình code để khi mình chọn các điều kiện tương ứng theo từng báo cáo (tên trạm, tên người quản lý, tháng cần thống kê, loại nhiên liệu) thì sẽ liệt kê được đầy đủ theo tháng đó.
Trong file mình chỉ lấy ví dụ 2 tháng cho nhẹ. File đầy đủ có thêm các sheet của 12 tháng trong năm)
Mong nhận được sự giúp đỡ của các a/c.
 

File đính kèm

Báo cáo theo trạm:
Mã:
Sub Button2_Click()
Dim stArr(), rsArr(), iR As Long, jR As Long
Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Worksheets
    If Ws.Name = "Thang" & Format(Sheet3.Range("D6"), "00") Then
        stArr = Ws.Range("B9:J" & Ws.Range("B65535").End(xlUp).Row)
        ReDim rsArr(LBound(stArr) To UBound(stArr), 1 To 5)
        For iR = LBound(stArr) To UBound(stArr)
            If stArr(iR, 1) = Sheet3.Range("D5") Then
                jR = jR + 1
                rsArr(jR, 1) = jR
                rsArr(jR, 2) = stArr(iR, 2)
                rsArr(jR, 3) = stArr(iR, 3)
                rsArr(jR, 4) = stArr(iR, 4)
                rsArr(jR, 5) = stArr(iR, 5)
            End If
        Next iR
        If jR Then
            Sheet3.Range("A11").Resize(12, 5).ClearContents
            Sheet3.Range("A11").Resize(jR, 5) = rsArr
        End If
        Exit For
    End If
Next Ws
End Sub
Bốn cột còn lại tôi chưa rõ lấy từ đâu.
Cần bao nhiêu dòng mỗi báo cáo?
Từ báo cáo này, sửa code để làm báo cáo 2.
 

File đính kèm

Upvote 0
Báo cáo theo trạm:
Mã:
Sub Button2_Click()
Dim stArr(), rsArr(), iR As Long, jR As Long
Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Worksheets
    If Ws.Name = "Thang" & Format(Sheet3.Range("D6"), "00") Then
        stArr = Ws.Range("B9:J" & Ws.Range("B65535").End(xlUp).Row)
        ReDim rsArr(LBound(stArr) To UBound(stArr), 1 To 5)
        For iR = LBound(stArr) To UBound(stArr)
            If stArr(iR, 1) = Sheet3.Range("D5") Then
                jR = jR + 1
                rsArr(jR, 1) = jR
                rsArr(jR, 2) = stArr(iR, 2)
                rsArr(jR, 3) = stArr(iR, 3)
                rsArr(jR, 4) = stArr(iR, 4)
                rsArr(jR, 5) = stArr(iR, 5)
            End If
        Next iR
        If jR Then
            Sheet3.Range("A11").Resize(12, 5).ClearContents
            Sheet3.Range("A11").Resize(jR, 5) = rsArr
        End If
        Exit For
    End If
Next Ws
End Sub
Bốn cột còn lại tôi chưa rõ lấy từ đâu.
Cần bao nhiêu dòng mỗi báo cáo?
Từ báo cáo này, sửa code để làm báo cáo 2.

Cách làm của bạn là thống kê toàn bộ file, trong khi mình chỉ muốn thống kê theo từng tháng. Ví dụ chỗ thời gian mình chọn tháng 1 thì nó chỉ thống kê trong tháng 1, các tháng khác cho dù có trạm đó cũng không thống kê. Các cột còn lại thì dữ liệu lấy từ các sheet đã có sẵn đó thôi ạ. Mỗi báo cáo mình cần khoảng 100 dòng. Mình sửa lại file gốc tý để các bạn rõ hơn.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Chào bạn !
Cách thống kê số liệu từng tháng của bạn minh nghĩ bạn nên dùng công cụ PivotTable kết hợp với VBA sẽ tạo ra các báo cáo rất nhanh chóng và hiệu quả. Dữ liệu, thay vì để riêng rẽ từng tháng bạn nên thiết kế lại thành một sheet Tonghop. Từ dó bạn dùng PivotTable để lọc ra các báo cáo.
Chúc bạn thành công !
 
Upvote 0
Chào bạn !
Cách thống kê số liệu từng tháng của bạn minh nghĩ bạn nên dùng công cụ PivotTable kết hợp với VBA sẽ tạo ra các báo cáo rất nhanh chóng và hiệu quả. Dữ liệu, thay vì để riêng rẽ từng tháng bạn nên thiết kế lại thành một sheet Tonghop. Từ dó bạn dùng PivotTable để lọc ra các báo cáo.
Chúc bạn thành công !
Cảm ơn bạn, nhưng vì mình mù tịt về mấy thứ này nên nhờ bạn giúp để công việc được tốt hơn được không ạ.
 
Upvote 0
Thứ 1: Tôi thấy #2 bài của Leo Nguyễn code cho bạn ổn mà, ........hay bạn chưa hiểu??? Bạn đang format tên tháng là Thang01, Thang02,..........Thang12. Thì bài của Leo đang code theo format đó còn gì.
Thứ 2: Tôi thấy file đính kèm #3 của bạn, có sheet thống kê theo Người Quản lý. Trong khi tại các sheet Tháng chẳng có thông tin của người quản lý,.........thế thì thống kê kiểu gì

Bạn cần xem lại cách trình bày file của mình, thì mọi chuyện sẽ đơn giản, vài dòng là có thể ra báo cáo rồi.
Trong sheet QLNL của mình có người quản lý kèm theo tên các trạm rồi. Mình thì không rõ lắm nhưng mình tưởng là có thể lấy từ sheet đó theo tên trạm ở trong các tháng. Vậy bây giờ cần đưa cả những thông tin đó sang sheet tháng hả bạn???

Mình đang xem lại bài bạn Leo Nguyễn. Nhưng sao mình thay tháng khác vào thì lúc click button nó ko mất dữ liệu tháng cũ nhỉ.
 
Upvote 0
Cái file của bạn nó không khó gì cả, vấn đề người trên diễn đàn có rãnh để viết code thông kê cho bạn không, mà cho dù viết được gửi cho bạn xong, đôi khi bạn nhập tên "người quản lý" vào ở dữ liệu nguồn sẽ không chuẩn và khi dò kết quả sẽ không còn chính xác nữa , tốt nhất để giải quyết những file như thế này bạn nên gặp trực tiếp người nào đó rành về cái này để người ta còn hướng dẫn cách bạn dùng file đó như thế nào nữa!
 
Upvote 0
Cái file của bạn nó không khó gì cả, vấn đề người trên diễn đàn có rãnh để viết code thông kê cho bạn không, mà cho dù viết được gửi cho bạn xong, đôi khi bạn nhập tên "người quản lý" vào ở dữ liệu nguồn sẽ không chuẩn và khi dò kết quả sẽ không còn chính xác nữa , tốt nhất để giải quyết những file như thế này bạn nên gặp trực tiếp người nào đó rành về cái này để người ta còn hướng dẫn cách bạn dùng file đó như thế nào nữa!
Tên người quản lý thì ko thể sai được bạn à, vì mình có tạo list bằng data validation cho Người Quản Lý và Loại nhiên liệu rồi. chỉ việc chọn thôi --=0
 
Upvote 0
Bạn nên làm lại file đi, vd trong sh("Báo cáo theo tên quản lý") bạn có yêu cầu dò với điều kiện thời gian , nhưng mà ở sh("QLNL") lại không có bất kì cột nào dành cho ghi thời gian cả vậy lọc nó như thế nào đây?
 
Upvote 0
Bạn nên làm lại file đi, vd trong sh("Báo cáo theo tên quản lý") bạn có yêu cầu dò với điều kiện thời gian , nhưng mà ở sh("QLNL") lại không có bất kì cột nào dành cho ghi thời gian cả vậy lọc nó như thế nào đây?
Thời gian thì dò theo tháng mà bạn. Ví dụ mình muốn thống kê trong tháng 9 thì sẽ chỉ tìm trong sheet tháng 9 mà thôi. Còn nên làm lại file thế nào bạn có thể góp ý và đưa ra giải pháp giùm mình được không. Mình mù tịt nên hãy giúp tận tình nhé .
 
Upvote 0
Cách làm của bạn là thống kê toàn bộ file, trong khi mình chỉ muốn thống kê theo từng tháng. Ví dụ chỗ thời gian mình chọn tháng 1 thì nó chỉ thống kê trong tháng 1, các tháng khác cho dù có trạm đó cũng không thống kê. Các cột còn lại thì dữ liệu lấy từ các sheet đã có sẵn đó thôi ạ. Mỗi báo cáo mình cần khoảng 100 dòng. Mình sửa lại file gốc tý để các bạn rõ hơn.

Dựa vào ý bài #2, bạn xem file này: Thay đổi ô D5 hoặc D6 thì code hoạt động, cho kết quả bảng dưới.
Mới làm 1 sheet thôi, nếu đúng thì tiếp, sai thì "chạy"
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Dựa vào ý bài #2, bạn xem file này: Thay đổi ô D5 hoặc D6 thì code hoạt động, cho kết quả bảng dưới.
Mới làm 1 sheet thôi, nếu đúng thì tiếp, sai thì "chạy"
Đúng rồi anh ạ. Nhờ a làm tiếp hộ em. Nhờ a làm sao khi mà không có dữ liệu thì tất cả các dòng từ 13 đến 35 nó cũng hide luôn ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Đúng rồi anh ạ. Nhờ a làm tiếp hộ em. Nhờ a làm sao khi mà không có dữ liệu thì tất cả các dòng từ 13 đến 35 nó cũng hide luôn ạ.

Không làm được.
Người quản lý, vận hành, Theo dõi... cái nào là cái nào, tên trong các sheet "mò" chẳng có làm sao làm.
Vinh, Nam, Đông, Hoà trên trời rơi xuống tìm đâu mà viết code?
"Chạy".
 
Upvote 0
Không làm được.
Người quản lý, vận hành, Theo dõi... cái nào là cái nào, tên trong các sheet "mò" chẳng có làm sao làm.
Vinh, Nam, Đông, Hoà trên trời rơi xuống tìm đâu mà viết code?
"Chạy".
Người quản lý thì trong sheet DM em có ghi rõ đó anh, còn trong sheet QLNL thì nó là ở mục "Theo dõi-cấp nhiên liệu". E quên ghi rõ mất. Người vận hành thì lấy theo mục người vận hành ở từng tháng luôn anh ạ. Cái người vận hành đó ko quan trọng anh ạ. A đừng chạy. Ở lại giúp e cho nốt đi.
 
Lần chỉnh sửa cuối:
Upvote 0
Chủ bài viết cần thấy rằng: Rất nhiều người trên diễn đàn góp í với bạn sửa CSDL; Bạn nên nghe & làm theo những lời khuyên chí tình đó;
Bạn hãy từ bỏ CSDL đang có của bạn đi & làm lại; Có vậy sau này bạn vận hành mới trơn tru được.

(1) Tất cả hoạt động của bạn các tháng gôm vô hết trong 1 trang tính;
(2) Ngày hoạt đông nên nhập dạng mm/dd/yyyy (để dễ nhìn do quen mắt, bạn hoàn toàn có thể định dạng lại bỡi Custom
thành dạng dd/MM/yyyy)
(2) Ở trang tính 'DM' bạn cần thiết lập thêm bảng [Trạm - mã trạm]
. . . . .
Tóm lại, bạn cần bỏ nhiều thời gian đầu tư xây dựng 1 CSDL thật 'Chuẩn' để sau này nó fát triển 1 cách hết sức bình thường, bằng ngược lại, nó sẽ là bệnh hoạn! (Lúc đó đừng trách anh chị em trên diễn đàn biết mà không cảnh báo!)
 
Upvote 0
Không làm được.
Người quản lý, vận hành, Theo dõi... cái nào là cái nào, tên trong các sheet "mò" chẳng có làm sao làm.
Vinh, Nam, Đông, Hoà trên trời rơi xuống tìm đâu mà viết code?
"Chạy".
Theo góp ý của các anh chị trên diễn đàn em đã sửa lại data một chút. Không biết thế này đã được chưa. Anh xem giúp và hỗ trợ em với. Em vẫn để các tháng là các sheet riêng biệt. Nếu anh thấy nên gộp lại hơn thì anh cứ làm theo hướng đó. Em chỉ việc đưa tất cả vào 1 sheet là được. Em cảm ơn.
 

File đính kèm

Upvote 0
Ở trong 2 code này có cái dòng With sheet 3 và with sheet 4 khi mình chèn thêm các tháng khác vào phía trước thì code có bị ảnh hưởng không ban?
 
Upvote 0
Đưa sheet các tháng vào 1 sheet, hay để riêng từng sheet tháng là do nhu cầu của bạn. Nếu cảm thấy tách ra từng tháng (cùng lắm 1 năm là 12 sheet chứ nhiêu) nó rạch ròi, dễ cho bạn nhập liệu hơn thì cứ để như cũ. Đơn giản là vậy, còn muốn gộp lại thì cũng đơn giản thôi,.... (Nhưng theo quan điểm của tôi thì cái gì quen thuộc, đơn giản,........thì xài vậy, như cách cũ của bạn tách ra từng tháng cho nó rành mạch thì cũng ô kê).

Tôi có làm cho bạn theo như cũ của bạn, không cần phải gộp sheet tháng lại .(Miễn sao tên sheet theo format là "Thang01, Thang02,...., Thang12" là được.... (chỉ sheet BC theo quản lý nha, sheet theo trạm hình như là Anh BaTê đã làm cho bạn rồi.)

1. Bạn chèn thêm dòng vào sheet Báo cáo theo tên quản lý, và đưa dòng tổng cộng xuống dòng thứ 101 (mục đích để dư ra và hide đi khi chạy code.
2. Paste code sau vào module
Mã:
Sub NgQly()
Dim Ws As Worksheet, sArr(), tArr(), dArr, I As Long, J As Long, K As Long
Dim Nqly As String, Nlieu As String, Rws As Long
Nqly = Range("E5").Value
Nlieu = Range("E7").Value
dArr = Array(1, 2, 3, 4, 5, 6, 10, 11, 14)
For Each Ws In ThisWorkbook.Worksheets
    If Ws.Name = "Thang" & Format(Sheet4.Range("E6"), "00") Then
        sArr = Ws.Range("B8:Q" & Ws.Range("B65536").End(xlUp).Row)
        ReDim tArr(1 To UBound(sArr, 1), 1 To 10)
        For I = 1 To UBound(sArr, 1)
            If sArr(I, 16) = Nqly And sArr(I, 15) = Nlieu Then
                K = K + 1
                For J = 0 To UBound(dArr)
                    tArr(K, 1) = K
                    tArr(K, J + 2) = sArr(I, dArr(J))
                Next J
            End If
        Next I
        Exit For
    End If
Next Ws
With Sheet4
        .Cells.EntireRow.Hidden = False
        .Range("A11:J100").ClearContents
        If K Then
            .Range("A11").Resize(K, 10) = tArr
            Rws = .[B65536].End(xlUp).Row + 1
            .Rows(Rws & ":100").Hidden = True
        Else
            MsgBox "Khong co du lieu", , "BC MAY NO"
        End If
End With
End Sub
3. Paste code sau vào Sheet4(Báo cáo theo tên QL)
Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("E5:E7")) Is Nothing Then NgQly
End Sub
Nhờ bạn xem lại giúp ở cột Chi tiết vận hành máy nổ chưa đúng kết quả. Ngoài ra nhờ bạn sửa chút sao cho khi không có dữ liệu thì hide từ dòng thứ 13 đến dòng 100 luôn.
 
Upvote 0
À, mình sửa được cái chi tiết vận hành rồi. Bạn lấy nhầm từ cột 7 thành cột 6. Nhờ bạn giúp cái hiden kia nhé
 
Upvote 0
Xin lỗi đã lại làm phiền các anh với chủ đề này. Nhưng trong quá trình sử dụng báo cáo em có phát sinh một vấn đề, đó là nhiều lúc phải thống kê từ ngày của tháng trước sang ngày của tháng sau mà không phải chỉ thống kê trong tháng như trước đây em đã nhờ giúp đỡ. Em có chỉnh sửa lại hai mẫu báo cáo trong file gửi kèm ( ở các sheet "BC_TEN_QL (2)" và "BC_TRAM (2)" ). Nhờ các anh giúp đỡ sửa lại code để em có thể thống kê số liệu từ ngày ... đến ngày.... . Em xin cảm ơn.

File gửi kèm
 
Upvote 0
Web KT

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

Back
Top Bottom