Lọc dữ liệu tổng hộp theo tháng/năm

Liên hệ QC

Thanh1102

Thành viên hoạt động
Tham gia
29/11/08
Bài viết
147
Được thích
46
Kính mong các bác giúp đỡ em vấn đề này.
Em có sheet báo cáo tổng hợp số liệu NXT trong nhiều tháng. Nhưng em muốn xem báo cáo NXT theo từng tháng. Khi lựa chọn tháng báo cáo và năm báo cáo trong bảng NXT.
Chân thành cảm ơn các bác trước
 
Lần chỉnh sửa cuối:
Hình như bạn phải thêm dữ liệu

Căn cứ vào dữ liệu trong Sheets"NKNX"
1, Trong Sheets"BC chi ttiet" em muốn báo cáo theo từ tháng hoặc 12 tháng "All". Khi chọn tháng báo cáo và năm báo cáo thì dữ liệu tự động lọc theo báo cáo

(1) Để lập báo cáo các tháng khác nhau, bạn phải có, chí ít số liệu nhập xuất của 2 tháng tại 'NKNX'. (Hiện của bạn mới có 1 tháng thì không thể làm được:
+ Không có tồn tháng đầu kỳ;
+ Xuất chỉ có 1 dòng . . . .

(2) Nếu dữ liệu của bạn nhiều vô kể thì dùng công thức là không phải không được nhưng sẽ lặc lè đó! Hãy theo hướng tổng hợp bằng VBA, bạn nghĩ sao?

Chờ tin bạn!
 
Kính mong các bác giúp đỡ em vấn đề này.
Em có sheet báo cáo tổng hợp số liệu NXT trong nhiều tháng. Nhưng em muốn xem báo cáo NXT theo từng tháng. Khi lựa chọn tháng báo cáo và năm báo cáo trong bảng NXT.
Chân thành cảm ơn các bác trước
Trong khi chờ đợi lọc bằng VBA, Dosnet gửi bạn bài lọc tùy biến theo tháng năm bằng công thức. Bạn thêm dữ liệu và test hộ nhé, Chúc vui!
 

File đính kèm

  • Vattu (Dosnet).rar
    653.5 KB · Đọc: 754
(1) Để lập báo cáo các tháng khác nhau, bạn phải có, chí ít số liệu nhập xuất của 2 tháng tại 'NKNX'. (Hiện của bạn mới có 1 tháng thì không thể làm được:
+ Không có tồn tháng đầu kỳ;
+ Xuất chỉ có 1 dòng . . . .

(2) Nếu dữ liệu của bạn nhiều vô kể thì dùng công thức là không phải không được nhưng sẽ lặc lè đó! Hãy theo hướng tổng hợp bằng VBA, bạn nghĩ sao?

Chờ tin bạn!
Cảm ơn bác đã quan tâm đến bài của em. Em sẽ cập nhật dữ liệu và gửi lên. Tổng hợp băng VBA thì em gà lắm. Bác có thể cho em xin đ/c mail để gửi lại hoặc hỏi thêm. Nếu bác có bài nào sử dụng VBA có thể cho em tham khảo được không.
Mail: Thanh1102@gmai.com
 
Trong khi chờ đợi lọc bằng VBA, Dosnet gửi bạn bài lọc tùy biến theo tháng năm bằng công thức. Bạn thêm dữ liệu và test hộ nhé, Chúc vui!
Cảm ơn Bác DONETS. Em muốn lựa chọn tháng /năm trong sheets"BC chi tiet" cơ. Bác xem lại giùm em nhé. Cảm ơn Bác trước.
 
Cảm ơn Bác DONETS. Em muốn lựa chọn tháng /năm trong sheets"BC chi tiet" cơ. Bác xem lại giùm em nhé. Cảm ơn Bác trước.
Sorry vì chưa đọc kỹ, bạn đưa đầy đủ dữ liệu lên đi. Nghiệp vụ kế toán tớ không được chắc +-+-+-+
 
Lọc dữ liệu tổng hợp theo tháng/năm

Cảm ơn bác đã quan tâm đến bài của em. Em đã cập nhật dữ liệu và gửi lên. Tổng hợp bằng VBA thì em gà lắm. Dữ liệu của em rất nhiều. Nếu xử lý bằng VBA thi làm như thế nào?. Các Bác giúp em nhé.
 
Lần chỉnh sửa cuối:
Bạn kiểm tra lại theo file đính kèm xem sao

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [u1]) Is Nothing Then
   If Target.Value <> "All" Then
      TongHop
   Else
   
   End If
 End If
End Sub
PHP:
Option Explicit

Sub TongHop()
 On Error Resume Next
 Dim Sh As Worksheet, Rng As Range, Clls As Range, sRng As Range
 Dim MyAdd As String, Kho As String
 Dim eRw As Long, Cot As Byte

 Set Sh = Sheets("NKNX"):           eRw = Sh.[B65500].End(xlUp).Row
 Sh.Range("G7:P" & eRw).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sh.Range( _
        "V2:V3"), CopyToRange:=Sh.Range("U7:Y7"), Unique:=False
 Sh.Range("V7:V" & eRw).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sh.[AA7], Unique:=True
 Range("B11:X" & eRw).ClearContents
 Sh.Range(Sh.[AA8], Sh.[aa65500].End(xlUp)).Copy Destination:=[b11]
 Set Rng = Sh.Range(Sh.[v7], Sh.[v7].End(xlDown))
 For Each Clls In Range([b11], [b11].End(xlDown))
   Set sRng = Rng.Find(Clls.Value, , xlFormulas, xlWhole)
   If Not sRng Is Nothing Then
      MyAdd = sRng.Address
      With Clls.Offset(, 1)
         .Value = sRng.Offset(, 1).Value
         .Offset(, 1).Value = sRng.Offset(, 2).Value
      End With
      Do
         Kho = Right(sRng.Offset(, -1), 2)
         If Left(sRng.Offset(, -1).Value, 1) = "N" Then
            Cot = Switch(Kho = "MU", 4, Kho = "CK", 5, Kho = "TH", 9)
            With Clls.Offset(, Cot)
               .Value = .Value + sRng.Offset(, 3).Value 
            End With
         ElseIf Left(sRng.Offset(, -1).Value, 1) = "X" Then
            Cot = Switch(Kho = "TC", 12, Kho = "CK", 13, Kho = "KH", 17)
            With Clls.Offset(, Cot)
               .Value = .Value + sRng.Offset(, 3).Value 
            End With
         End If
         Set sRng = Rng.FindNext(sRng)
      Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
   End If
 Next Clls
End Sub
Chú ý:

(*) Chỉ mới tổng hợp cho từng tháng (Chưa 'All')

(*) Chưa biết cách lấy số lượng tồn từ đâu?!
 

File đính kèm

  • GPE.rar
    343.5 KB · Đọc: 378
Lần chỉnh sửa cuối:
Lọc dữ liệu tổng hợp theo tháng

Cảm ơn Bác ChanhTQ. Em đã chạy thử nhưng kết quả không như ý muốn. Trong Sheet"BC chi tiet" là DL tổng hợp N-X-T kho được lập bởi các công thức rút trích số liệu và tổng hợp các tháng trong Sheet "NKNX". Do vậy mình không thể biết trong tháng nào nhập bao nhiêu trong bảng "BC chitiet" (VD: mặt hàng A - tháng 5 nhập 10, tháng 6 nhập 15... mà chỉ biết tổng số nhập-xuất-tồn kho). Vậy em muốn trong bảng "BC chi tiet" đó khi chọn tháng báo cáo/năm báo cáo thì DL sẽ lọc tất cả những mặt hàng và số lượgn N-X-T của tháng đó. Mong bác xem xét giúp đỡ em.!$@!!
 
Mình đã thay file khác rồi, đúng là cái cũ chưa như ý của bạn!

Bạn chọn các tháng từ 5 - 7 thôi nha; Các tháng khác chưa có dữ liệu nhập vô;
'All' vẫn chưa làm được, hãy đợi thêm.
 
Lọc dự liệu tổng hợp theo tháng/năm(2)

Các Bác à. Em đã làm được rồi kể cả "ALL" (File đính kèm) nhưng chỉ bằng công thức. Mà dữ liệu thì nhiều quá. Nó chạy rùa lắm. Các Bác xem có thể làm cách khác được không. Giúp em với. Chứ chạy kiểu này chắc chết. !$@!!
 
Lần chỉnh sửa cuối:
Lọc dữ liệu tổng hợp theo tháng/năm

Các Bác xem giùm em nhé. Em đã lọc được rồi, kể cả ALL nhưng chỉ bằng công thức. Mà dữ liệu trong file nhiều nên nó chạy rùa quá. Các bác giúp em với.
 
Lần chỉnh sửa cuối:
Lọc dữ liệu đã tổng hợp theo tháng/năm

Bạn chọn các tháng từ 5 - 7 thôi nha; Các tháng khác chưa có dữ liệu nhập vô;
'All' vẫn chưa làm được, hãy đợi thêm.
Em đã làm được rồi kể cả "All" nhưng bằng Công thức và nó chạy như rùa. Bác xem giùm em có thể làm cách nào khác không nhé.
 
Bạn thử theo file đính kèm, nha! & cho biết kết quả

Em đã làm được rồi kể cả "All" nhưng bằng Công thức và nó chạy như rùa. Bác xem giùm em có thể làm cách nào khác không nhé.
PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [u1]) Is Nothing Then
   If Target.Value = "All" Then
      Dim Sh As Worksheet, Rng As Range, sRng As Range, Clls As Range
      Dim MyAdd As String, Kho As String
      Dim eRw As Long, Cot As Byte
      Set Sh = Sheets("DM"):           eRw = Sh.[b65500].End(xlUp).Row + 9
      [B11].Resize(eRw, 26).ClearContents
      [B11].Resize(eRw, 3).Value = Sh.[b4].Resize(eRw, 3).Value
      Set Sh = Sheets("NKNX")
      Set Rng = Sh.Range(Sh.[H7], Sh.[H65500].End(xlUp))
      On Error Resume Next
      For Each Clls In Range([B11], [B11].End(xlDown))
         Set sRng = Rng.Find(Clls.Value, , xlFormulas, xlWhole)
         If Not sRng Is Nothing Then
            MyAdd = sRng.Address
            Do
               Kho = Right(sRng.Offset(, -1), 2)
               If Left(sRng.Offset(, -1).Value, 1) = "N" Then
                  Cot = Switch(Kho = "MU", 4, Kho = "CK", 5, Kho = "TH", 9)
                  With Clls.Offset(, Cot)
                     .Value = .Value + sRng.Offset(, 3).Value
                  End With
               ElseIf Left(sRng.Offset(, -1).Value, 1) = "X" Then
                  Cot = Switch(Kho = "TC", 12, Kho = "CK", 13, Kho = "KH", 17)
                  With Clls.Offset(, Cot)
                     .Value = .Value + sRng.Offset(, 3).Value
                  End With
               End If
               Set sRng = Rng.FindNext(sRng)
            Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
         End If
      Next Clls
   Else
      TongHop
   End If
 End If
End Sub
Chú ý:

(*) Trong dữ liệu của bạn còn có chỗ sai trong tên kho ( không phải là "MU", "CK" hay "TH" nên báo lỗi; Vì vấn đề này mình sẽ tìm sau nên dùng dòng lệnh cho qua lỗi đó; Sau này sẽ tìm sau.)

(*) Chỉ thử trên file của mình & cho biết kết quả; Tốc độ thì không khác bao nhiêu giữa tổng hợp 1 tháng & 'All', phải không?

(*) Sẽ hoàn thiện bằng cách gộp chung 2 macro, một khi bạn đã kiểm tra đạt kết quả.

Chờ tin bạn!
 
Lần chỉnh sửa cuối:
Lọc dữ liệu đã tổng hợp theo tháng

- Bác xem lại giùm em. Đây là dữ liệu chuẩn (file đính kèm)
Ghi chú: Đây là kho của 1 công trình CRO - kho CRO
- Em đã chạy thử phần Bác gửi nhưng khi vào tháng khác (tháng không có dữ liệu)thì treo luôn.
- Dữ liệu "N-MU", "X-TC" thì vào đúng cột của nó nhưng "X-CK" và "N-CK" thì lại không vào đúng cột kho nhập xuất.
VD: "N-MU" dữ liệu vào kho "MUA" số liệu hiện ở cột Mua
Vật tư được chuyển kho từ "XBN" đến kho CRO thì làm thủ tục "N-CK" và kho NX là "X-BN"
Xuất (X-TC, X-TA, N-TH, X-NB) là thủ tục NX tại kho CRO nên tên kho NX bỏ trắng.
Mặt khác công thức thực hiện chính xác số liệu nhưng chạy quá chậm.
Bác xử lý giúp em nhé. Mong tin Bác...Thanks
 
Lần chỉnh sửa cuối:
Ghi chú: Đây là kho của 1 công trình CRO - kho CRO
- Em đã chạy thử phần Bác gửi nhưng khi vào tháng khác (tháng không có dữ liệu)thì treo luôn (1).
- Dữ liệu "N-MU", "X-TC" thì vào đúng cột của nó nhưng "X-CK" và "N-CK" thì lại không vào đúng cột kho nhập xuất.
VD: "N-MU" dữ liệu vào kho "MUA" số liệu hiện ở cột Mua
Vật tư được chuyển kho từ "XBN" đến kho CRO thì làm thủ tục "N-CK" và kho NX là "X-BN"
(2)
Xuất (X-TC, X-TA, N-TH, X-NB) là thủ tục NX tại kho CRO nên tên kho NX bỏ trắng.
Mặt khác công thức thực hiện chính xác số liệu nhưng chạy quá chậm.
Bác xử lý giúp em nhé. Mong tin Bác...Thanks

(1): Chưa có quần áo thì không thể chãi tóc hay mang giày!

(2) Mã N-CK & X-CK thì chỉ có bạn mới biết nó phải vào NB tương ứng chứ người ngoại đạo làm sao biết được; Bạn chưa bao giờ trước đây nói về điều này mà. (Xin nhắc bạn, những gì bạn tiếp xúc & xử lí hàng ngày lại là những thứ mới toanh với người khác & Phải viết những gì để người khác hiểu, chứ không phải viết những gì mình hiểu)

(3) Chúng ta không cần xử lí số liệu thật của bạn; Mà macro phải xử lý mọi số liệu sẽ phát sinh sau này;
Bạn đưa lên quá nhiều số liệu nhưng lại chưa đại diện cho tất cả các trường hợp sẽ diễn ra; Nếu cứ vậy, sau này bạn sẽ không biết các vận hành macro khi phát sinh những mã khác & bảo trì macro trong tương lai

Bạn cũng không cần đưa lên quá nhiều những trang tính chưa sử dụng giải quyết vấn đề trong topic. Như vậy là sự lãng phí không cần thiết (hay thậm chí có thể hiểu khác. . . )

(4) Còn vấn đề nữa là tồn đầu kỳ, chúng ta sẽ giải quyết ra sao đây?

Theo mình số liệu bạn nhiều như vậy thì giành ra 13 cột tại 'DM' để lưu tồn cuối kỳ được không?

(Có thể toàn là những lời khó nghe, . . . Cũng chỉ mong chúng ta cùng khá lên.)
 
Thêm tồn đầu kỳ & dư cuối kỳ đây, xin mời

PHP:
Option Explicit:                                   Dim Rng As Range
 
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim Sh As Worksheet:                              Dim eRw As Long
 Dim Thang As Boolean
 
 If Not Intersect(Target, [U1]) Is Nothing Then
   If Target.Value = "All" Then
      Set Sh = Sheets("DM"):           eRw = Sh.[B65500].End(xlUp).Row + 9
      [B11].Resize(eRw, 26).ClearContents
      [B11].Resize(eRw, 3).Value = Sh.[b4].Resize(eRw, 3).Value
      Set Sh = Sheets("NKNX")
      Set Rng = Sh.Range(Sh.[H7], Sh.[H65500].End(xlUp))
   Else
      Set Sh = Sheets("NKNX"):                     Sheets("BC Chi Tiet").Select
      eRw = Sh.[B65500].End(xlUp).Row:             Application.ScreenUpdating = False
      Sh.Range("G7:P" & eRw).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sh.Range( _
         "V2:V3"), CopyToRange:=Sh.Range("U7:Z7")
      Sh.Range("V7:V" & eRw).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sh.[AA7], Unique:=True
      Range("B11:X" & eRw).ClearContents
      Sh.Range(Sh.[AA8], Sh.[AA65500].End(xlUp)).Copy Destination:=[B11]
      Set Rng = Sh.Range(Sh.[v7], Sh.[v7].End(xlDown))
      Thang = True
   End If
   GPE_COM Thang
   
 End If
End Sub
PHP:
Sub GPE_COM(Optional Thang As Boolean = False)
 On Error Resume Next
 Dim sRng As Range, Clls As Range
 Dim Sht As Worksheet, Rng0 As Range, sRng0 As Range
 Dim MyAdd As String, Kho As String, Cot As Byte
 
      For Each Clls In Range([B11], [B11].End(xlDown))
         Set sRng = Rng.Find(Clls.Value, , xlFormulas, xlWhole)
         If Not sRng Is Nothing Then
            MyAdd = sRng.Address
            Do
               Kho = Right(sRng.Offset(, -1), 2)
               If Left(sRng.Offset(, -1).Value, 1) = "N" Then
                  Cot = Switch(Kho = "MU", 4, Kho = "CK", 5, Kho = "TH", 9, Kho = "KH", 10)
               ElseIf Left(sRng.Offset(, -1).Value, 1) = "X" Then
                  Cot = Switch(Kho = "TC", 12, Kho = "CK", 13, Kho = "KH", 17)
               End If
                  With Clls.Offset(, Cot)
                     .Value = .Value + sRng.Offset(, 3).Value
                  End With
               If Thang Then
                  Cells(Clls.Row, "M").FormulaR1C1 = "=SUM(RC[-7]:RC[-1])"
                  Cells(Clls.Row, "U").FormulaR1C1 = "=SUM(RC[-7]:RC[-1])"
                  Cells(Clls.Row, "V").FormulaR1C1 = "=RC[-17]+RC[-9]-RC[-1]"
'Chép Ton Cuoi Tháng:'
                  Set Sht = Sheets("DM")
                  Set Rng0 = Sht.Range(Sht.[B3], Sht.[B65500].End(xlUp))
                  Set sRng0 = Rng0.Find(Clls.Value)
                  If Not sRng0 Is Nothing Then
                     Cells(Clls.Row, "E").Value = sRng0.Offset(, 10 + [U1].Value).Value
                     sRng0.Offset(, 11 + [U1].Value).Value = Cells(Clls.Row, "V").Value
                  End If
               End If
               Set sRng = Rng.FindNext(sRng)
            Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
         End If
      Next Clls
End Sub
 

File đính kèm

  • GPE.rar
    158.3 KB · Đọc: 115
Lọc dữ liệu đã tổng hợp theo tháng/chuyển công thức sang VBA

Cảm ơn các Bác đã chỉ giáo. Nhưng hình như bác hiểu chưa đúng về ý kiến và đề nghị của em. Mỗi đơn vị có những cách quản lý nhập xuất kho khác nhau nhưng cũng đều trên nguyên tắc đưa ra được "Báo cáo N-X-T kho trong kỳ" Bài này cũng không ngoại lệ.
(1): Chưa có quần áo thì không thể chãi tóc hay mang giày!
Đúng. Nhưng có thể để số liệu bằng 0 - chứ treo luôn thì....
(2) Mã N-CK & X-CK thì chỉ có bạn mới biết nó phải vào NB tương ứng chứ người ngoại đạo làm sao biết được; Bạn chưa bao giờ trước đây nói về điều này mà. (Xin nhắc bạn, những gì bạn tiếp xúc & xử lí hàng ngày lại là những thứ mới toanh với người khác & Phải viết những gì để người khác hiểu, chứ không phải viết những gì mình hiểu).
Thực chất mã loại CT "N-MU", "X-CK"... chỉ là ký hiệu do người sử dụng tự đặt. Nhưng vẫn trên một nguyên lý cũ rích là: Nhập kho cái gì thì cũng phải biết nó được "mua" hay ""chuyển từ đâu tới".. và xuất kho thì cũng phải biết là "xuất đi đâu", cho ai...
(3) Bạn cũng không cần đưa lên quá nhiều những trang tính chưa sử dụng giải quyết vấn đề trong topic. Như vậy là sự lãng phí không cần thiết (hay thậm chí có thể hiểu khác.. )
Sorry. Đây là phần em đang làm và cũng dựa trên sự phát triển từ dữ liệu gốc. Trên topic có thể nhiều người cũng muốn xem và tham khảo cùng nên em để nguyên như vây thôi chứ không có ý gì khác.
(4) Còn vấn đề nữa là tồn đầu kỳ, chúng ta sẽ giải quyết ra sao đây?
Theo mình số liệu bạn nhiều như vậy thì giành ra 13 cột tại 'DM' để lưu tồn cuối kỳ được không?
Vấn đề này quá hay. Thanks
(Có thể toàn là những lời khó nghe, . . . Cũng chỉ mong chúng ta cùng khá lên.)[/QUOTE]
 
Lần chỉnh sửa cuối:
Bác ChanhTQ ơi! Dữ liệu không chuyển kho vào các kho chi tiet ạ.
Bác lấy và sử dụng trên file dữ liệu "Vattu(moi)" em đã chỉnh sửa lại.Bác xem giùm nhé.
 
Lần chỉnh sửa cuối:
Dữ liệu không chuyển kho vào các kho chi tiet ạ(2).
Bác lấy và sử dụng trên file dữ liệu "Vattu(moi)" em đã chỉnh sửa lại.Bác xem giùm nhé (1).

(1) Vậy bạn đã xem lại tại sao nó không chuyển vào kho các chi tiết chưa.

Nhất là loại xuất kho;

Mã X-CK, bên trường [Diễn giải nội dung] có các nội dung vầy thì chuyển đi đâu:

Hệ thống điện cônng trình;
Làm láng trại;
Làm nhà kho;
Cho mượn;
Lắp Module;
Tử số . . .
Hay M- CRO thì vô đâu;

Đó là chưa kể trong VBA tìm từ tiếng Việt là không dễ là cái chắc, nếu không muốn nói là chưa thể. . . Nếu không các cách mã hóa chúng thì thua.
 
Web KT
Back
Top Bottom