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

Hình như em hỏi nhiều quá nên giờ chẳng ai buồn giúp nữa rùi **~****~****~**
 
Upvote 0
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....
File gửi kèm

Nhiều người làm theo hướng "gộp" dữ liệu các tháng; bạn đã làm chưa vậy?
Nếu đã 'gộp chung thành 1 CSDL trên 1 trang tính thì chuyện tồng hợp từ giữa tháng nọ đến cuối tháng kia cũng như đầu đến cuối tháng mà thôi.

Những người khuyên bạn để i xì 12 tháng sẽ không dễ trong việc tổng hợp theo iêu cầu của bạn mới fát sinh này.
(& mình khẳng định 1 điều là bạn đưa số liệu 12 trang tính riêng rẽ của 12 tháng hoạt động thì mình nói thẳng: "Mình sẽ không rờ tới, vì thật ra giúp bạn ngay giờ nhưng sẽ là hại bạn lâu dài đó thôi!"

Chúc ngủ ngon!
 
Upvote 0
Nhiều người làm theo hướng "gộp" dữ liệu các tháng; bạn đã làm chưa vậy?
Nếu đã 'gộp chung thành 1 CSDL trên 1 trang tính thì chuyện tồng hợp từ giữa tháng nọ đến cuối tháng kia cũng như đầu đến cuối tháng mà thôi.

Những người khuyên bạn để i xì 12 tháng sẽ không dễ trong việc tổng hợp theo iêu cầu của bạn mới fát sinh này.
(& mình khẳng định 1 điều là bạn đưa số liệu 12 trang tính riêng rẽ của 12 tháng hoạt động thì mình nói thẳng: "Mình sẽ không rờ tới, vì thật ra giúp bạn ngay giờ nhưng sẽ là hại bạn lâu dài đó thôi!"

Chúc ngủ ngon!
Mình cũng đã nghĩ đến vấn đề gộp dữ liệu lại trên 1 sheet. Như vậy cũng được bạn ạ. Mình chia ra 12 tháng ở 12 trang tính vì muốn nó rõ ràng thôi. Nhưng thực tế thì chỉ chú ý vào báo cáo là quan trọng nhất. Nhờ bạn giúp mình theo hướng này nhé. Như vậy càng nhẹ file hơn cũng là tốt hơn.

Ngoài ra, nếu có thể nhờ bạn làm cho mình luôn trường hợp 12 tháng. Chỉ là để mình học hỏi thêm thôi. Dựa vào các code được giúp ở file này mà mình đã làm được nhiều file số liệu khác trong công việc của mình rất tiện. Vì vậy mình muốn biết thêm một trường hợp thế để mình áp dụng trong một số trường hợp không thể gộp dữ liệu.

Xin cảm ơn nhiều!!
 
Upvote 0
Mình cũng đã nghĩ đến vấn đề gộp dữ liệu lại trên 1 sheet. Như vậy cũng được bạn ạ. Mình chia ra 12 tháng ở 12 trang tính vì muốn nó rõ ràng thôi. Nhưng thực tế thì chỉ chú ý vào báo cáo là quan trọng nhất. Nhờ bạn giúp mình theo hướng này nhé. Như vậy càng nhẹ file hơn cũng là tốt hơn.

Ngoài ra, nếu có thể nhờ bạn làm cho mình luôn trường hợp 12 tháng. Chỉ là để mình học hỏi thêm thôi. Dựa vào các code được giúp ở file này mà mình đã làm được nhiều file số liệu khác trong công việc của mình rất tiện. Vì vậy mình muốn biết thêm một trường hợp thế để mình áp dụng trong một số trường hợp không thể gộp dữ liệu.

Xin cảm ơn nhiều!!

Theo tôi thì thiết kế lại tiêu đề cột và theo dõi chỉ 1 sheet:

- Muốn tổng hợp cái gì thì PivoTable (muốn tháng nào thì chọn tháng đó cũng được)..

- Muốn có 12 sheet của 12 tháng thì cho nó 1 nút tách sheet là xong (khỏi suy nghĩ nhiều cho nó phức tạp ra).
 
Upvote 0
Mình cũng đã nghĩ đến vấn đề gộp dữ liệu lại trên 1 sheet. Như vậy cũng được bạn ạ. Mình chia ra 12 tháng ở 12 trang tính vì muốn nó rõ ràng thôi. Nhưng thực tế thì chỉ chú ý vào báo cáo là quan trọng nhất. Nhờ bạn giúp mình theo hướng này nhé. Như vậy càng nhẹ file hơn cũng là tốt hơn.

Ngoài ra, nếu có thể nhờ bạn làm cho mình luôn trường hợp 12 tháng. Chỉ là để mình học hỏi thêm thôi. Dựa vào các code được giúp ở file này mà mình đã làm được nhiều file số liệu khác trong công việc của mình rất tiện. Vì vậy mình muốn biết thêm một trường hợp thế để mình áp dụng trong một số trường hợp không thể gộp dữ liệu.

Xin cảm ơn nhiều!!

Dồn các sheet Thang vào sheet DATA, làm cho bạn 1 sheet BC_TEN_QL2.
Các chuyện khác bạn tự "chế biến" nhé.
 

File đính kèm

Upvote 0
Dồn các sheet Thang vào sheet DATA, làm cho bạn 1 sheet BC_TEN_QL2.
Các chuyện khác bạn tự "chế biến" nhé.
Anh xem giúp em vì sao khi em thay dòng này của anh
PHP:
.[A11:K500].ClearContents
.[A11].Resize(K, 11) = dArr

Thành
PHP:
.Cells.EntireRow.Hidden = False        
.Range("A11:K500").ClearContents        
If K Then            
.Range("A11").Resize(K, 11) = dArr            
.Range("A" & 11 + K - 1 & ":A500").EntireRow.Hidden = True    
Else            
.Rows("13:500").Hidden = True            
MsgBox "Khong co du lieu", , "BÁO CÁO"        
End If
Nó báo lỗi ở dòng này
PHP:
dArr(K, 11) = dArr(K, 7) / 60 * dArr(K, 10)
 
Lần chỉnh sửa cuối:
Upvote 0
Nó báo lỗi dòng ấy thì liên quan gì tới mấy dòng bạn vừa mới thêm chứ...

Bạn xem lại dữ liệu thật của bạn có merger hay gì không???
Còn không thì đính kèm file thật lên đây. nói vậy khó đoán bệnh lắm.... ai biết bệnh gì trong file thật mà đoán.
File của anh Ba Tê gửi cho mình ở bài trên đó bạn. Mình chỉ sửa đoạn đó để nó hide dòng ở báo cáo thôi mà. Nhờ bạn xem giúp
 
Upvote 0
Code theo file của anh Ba Tê #29

Mã:
Option Explicit
Public Tg As String
Sub GPE()
Dim Dic As Object
Dim I As Long, J As Long, K As Long
Dim Tmp As String
Dim Arr, dArr, MON As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Arr = Range(Sheets("DATA").[D8], Sheets("DATA").[D65000].End(3))
ReDim dArr(1 To UBound(Arr, 1), 1 To UBound(Arr, 2))
Set Dic = CreateObject("Scripting.Dictionary")
With Dic
    For I = 1 To UBound(Arr, 1)
    Tmp = Month(Arr(I, 1))
        If Not .Exists(Tmp) Then
            K = K + 1
            .Add Tmp, K
            For J = 1 To UBound(Arr, 2)
                dArr(K, J) = Month(Arr(I, J))
            Next J
        End If
    Next I
End With
    Sheets("DATA").Range("S8").Resize(K, UBound(Arr, 2)) = dArr
    Sheets("DATA").Range("R8:R" & Sheets("DATA").[D65000].End(3).Row).FormulaR1C1 = "=MONTH(RC[-14])"
    Sheets("DATA").Range("S8:S" & Sheets("DATA").[S65000].End(3).Row).Name = "MON"


On Error Resume Next
    For I = 1 To Range("MON").Count
        Tg = Range("MON").Cells(I, 1)
        Sheets.Add After:=Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = Tg
        Sheets("DATA").Range("A7:R" & Sheets("DATA").[D65000].End(3).Row).AutoFilter 18, Tg
        Sheets("DATA").Range("A6:Q" & Sheets("DATA").[D65000].End(3).Row).SpecialCells(12).Copy Sheets(Tg).[A6]
        Application.CutCopyMode = False
    Next I
        Sheets("DATA").AutoFilterMode = False
        Sheets("DATA").Range("R8:S100").ClearContents
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Làm sao để có thể chạy được code này vậy bạn hiền???
 
Upvote 0
Bạn thêm một Sheet mới & đặt tên là "LOC". Xong tại Cell E2 bạn làm cái Data Validation từ 1->12 để chọn tháng khi chạy code. Sau đó copy & paste code sau vào Sheet LOC mới vừa thêm.
Thay đổi giá trị tại Cell E2 thì code sẽ chạy

Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Arr, dArr, I As Long, J As Long, K As Long
Dim Tg, lr As Long
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If Target.Address = "$E$2" Then
Tg = [E2].Value
With Sheets("DATA")
    .Range("A6:Q7").Copy Sheets("LOC").[A6]
    .Range("R8:R" & .Range("B65000").End(3).Row).FormulaR1C1 = "=MONTH(RC[-14])"
    Arr = .Range(.[B8], .Range("B65000").End(3)).Resize(, 17)
End With
    ReDim dArr(1 To UBound(Arr, 1), 1 To 17)
        For I = 1 To UBound(Arr, 1)
            If Arr(I, 17) = Tg Then
                K = K + 1
                    dArr(K, 1) = K
                For J = 1 To UBound(Arr, 2) - 1
                    dArr(K, J + 1) = Arr(I, J)
                Next J
            End If
        Next I
With Sheets("LOC")
            .Range("A8:Q65000").ClearContents
            .Range("A8:Q65000").Borders.LineStyle = xlNone
        If K Then .Range("A8").Resize(K, 17) = dArr
            lr = .Range("B65000").End(3).Row
        If lr >= 8 Then
            .Range("A8:Q" & lr).Borders.LineStyle = xlContinuous
            .Range("A8:Q" & lr).Borders(xlInsideHorizontal).Weight = xlHairline
        End If
End With
        Sheets("DATA").Range("R8:R65000").ClearContents
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Được Bà Trưng rồi giờ đòi thêm Bà Triệu nữa. Đó là trường hợp mình sử dụng chung DATA cho nhiều năm, nhưng code này chỉ tách tháng trong năm thôi. Nhờ bạn sửa code để có thể lựa chọn tháng, năm nào nữa.
 
Upvote 0
Được Bà Trưng rồi giờ đòi thêm Bà Triệu nữa. Đó là trường hợp mình sử dụng chung DATA cho nhiều năm, nhưng code này chỉ tách tháng trong năm thôi. Nhờ bạn sửa code để có thể lựa chọn tháng, năm nào nữa.

Có khi nào từ năm 40 đến năm 2015 hông ta?
 
Upvote 0
Web KT

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

Back
Top Bottom