Xin CODE tổng hợp bán từ Sheet data-Nhiều điều kiện

Liên hệ QC

le_vis

Thành viên tích cực
Tham gia
23/7/09
Bài viết
1,245
Được thích
758
Xin các bạn giúp cho code tổng hợp bán theo tháng nhiều điều kiện kèm theo (Xin nêu trong File đính kèm) - Trân trọng cảm ơn
 

File đính kèm

  • Tổng hợp bán.xlsm
    23.1 KB · Đọc: 4
1/ Xin có trả phí hay miễn phí đó bạn?

2/ "- Tự động Filter gọn biểu mẫu lại (Ẩn những dòng không có dữ liệu đi)"
Bạn đang để trong bảng báo cáo 95 dòng ghi kết quả, nếu kết quả cần tìm trả về 200 kết quả thì 105 kết quả còn lại ghi vào đâu?

Người đọc báo cáo thường chú ý tới ý chính, số tổng. Vậy sao không để dòng tính tổng lên đầu ấy. Phía dưới cái đuôi dài mấy chục ki lô mét cũng không sợ vướng bận gì.
 
Upvote 0
1/ Xin có trả phí hay miễn phí đó bạn?

2/ "- Tự động Filter gọn biểu mẫu lại (Ẩn những dòng không có dữ liệu đi)"
Bạn đang để trong bảng báo cáo 95 dòng ghi kết quả, nếu kết quả cần tìm trả về 200 kết quả thì 105 kết quả còn lại ghi vào đâu?

Người đọc báo cáo thường chú ý tới ý chính, số tổng. Vậy sao không để dòng tính tổng lên đầu ấy. Phía dưới cái đuôi dài mấy chục ki lô mét cũng không sợ vướng bận gì.
Cảm ơn befaint đã quan tâm. Tôi vẫn muốn để dòng tổng cộng phía dưới - tổng số mặt hàng chỉ có khoảng 100 thôi mà thường trong kỳ chưa thấy phát sinh bán đủ 100 mặt hàng bao giờ. Nếu vậy xin để 500 dòng rồi để tổng cộng phía dưới có được chăng - Xin bạn giúp miễn phí được không ?
 
Upvote 0
Cảm ơn befaint đã quan tâm. Tôi vẫn muốn để dòng tổng cộng phía dưới - tổng số mặt hàng chỉ có khoảng 100 thôi mà thường trong kỳ chưa thấy phát sinh bán đủ 100 mặt hàng bao giờ. Nếu vậy xin để 500 dòng rồi để tổng cộng phía dưới có được chăng - Xin bạn giúp miễn phí được không ?
Bài #2 có 2 câu mà. :)
 
Upvote 0
Ý mình hỏi là chung chung với mọi người. Còn bạn trả lời là riêng với mình, như thế hơi phân biệt và mọi người ganh tị thì sao.
Mình cũng hiểu và chắc chẳng ai ý kiến gì về điều đó đâu bạn ạ. Có chăng mình sẽ sửa lại câu "Xin bạn giúp miễn phí được không ?" thành "Xin các bạn giúp miễn phí được không ?" bạn befaint nhỉ
 
Upvote 0
Tôi có sử dụng đoạn code của thầy Ba tê để tùy biến như File đính kèm

- DO TRÌNH THẤP KÉM Nên có 2 ý tùy biến chưa được
Ý thứ nhất : Số lượng và thành tiền của từng loại hàng không tổng cộng được mà nó chuyển sang báo cáo như Vlookup sang thôi
Ý thứ 2 : Những dòng có báo hủy tại cột H thì Số lượng đó bỏ qua không tổng cộng vào mã hàng đó tôi không làm đươc
Rất mong nhận được sự trợ giúp của các bạn
Xin trân trọng cảm ơn
 

File đính kèm

  • Tổng hợp bán.xlsm
    48.8 KB · Đọc: 5
Upvote 0
Tôi có sử dụng đoạn code của thầy Ba tê để tùy biến như File đính kèm

- DO TRÌNH THẤP KÉM Nên có 2 ý tùy biến chưa được
Ý thứ nhất : Số lượng và thành tiền của từng loại hàng không tổng cộng được mà nó chuyển sang báo cáo như Vlookup sang thôi
Ý thứ 2 : Những dòng có báo hủy tại cột H thì Số lượng đó bỏ qua không tổng cộng vào mã hàng đó tôi không làm đươc
Rất mong nhận được sự trợ giúp của các bạn
Xin trân trọng cảm ơn
Chình 1 chút code của bạn không biết có đúng không.
Mã:
Public Sub s_BC_Ban()
Dim Dic As Object, aDmHang(), aXuat(), dArr(), MaHang As String
Dim I As Long, J As Long, K As Long, R As Long, Rws As Long, fDate As Long, eDate As Long
Set Dic = CreateObject("Scripting.Dictionary")
    aXuat = Sheets("DATA").Range("B6", Sheets("DATA").Range("C6").End(xlDown)).Resize(, 22).Value
    R = UBound(aXuat)
ReDim dArr(1 To R, 1 To 8)
With Sheets("BC_ban")
    fDate = .Range("N2").Value2
    eDate = DateSerial(Year(.Range("N2")), Month(.Range("N2")) + 1, 0)
    For I = 1 To R
      If aXuat(I, 12) <> "HY" Then
        If aXuat(I, 2) >= fDate Then
            If aXuat(I, 2) <= eDate Then
                MaHang = aXuat(I, 4)
                              
                    If Not Dic.Exists(MaHang) Then
                        K = K + 1
                        Dic.Item(MaHang) = K
                        dArr(K, 1) = K
                        For J = 2 To 4
                             dArr(K, J) = aXuat(I, J + 2)
                        Next J
                        dArr(K, 3) = aXuat(I, 18)
                        dArr(K, 4) = aXuat(I, 19)
                        dArr(K, 6) = aXuat(I, 20)
                        dArr(K, 7) = aXuat(I, 22)
                    Else
                        Rws = Dic.Item(MaHang)
                        dArr(Rws, 3) = dArr(Rws, 3) + aXuat(I, 18)
                        dArr(Rws, 4) = dArr(Rws, 4) + aXuat(I, 19)
                End If
            End If
        End If
     End If
    Next I
    For I = 1 To K
        If dArr(I, 6) > 0 Then dArr(I, 5) = dArr(I, 7) / dArr(I, 6)
    Next I
    .Rows("6:5011").Hidden = False
    .Range("E6:L5010").ClearContents
    .Range("E6").Resize(R, 8) = dArr
    .Rows(6 + K & ":5010").Hidden = True
End With
Set Dic = Nothing
End Sub
 
Upvote 0
Chình 1 chút code của bạn không biết có đúng không.
Mã:
Public Sub s_BC_Ban()
Dim Dic As Object, aDmHang(), aXuat(), dArr(), MaHang As String
Dim I As Long, J As Long, K As Long, R As Long, Rws As Long, fDate As Long, eDate As Long
Set Dic = CreateObject("Scripting.Dictionary")
    aXuat = Sheets("DATA").Range("B6", Sheets("DATA").Range("C6").End(xlDown)).Resize(, 22).Value
    R = UBound(aXuat)
ReDim dArr(1 To R, 1 To 8)
With Sheets("BC_ban")
    fDate = .Range("N2").Value2
    eDate = DateSerial(Year(.Range("N2")), Month(.Range("N2")) + 1, 0)
    For I = 1 To R
      If aXuat(I, 12) <> "HY" Then
        If aXuat(I, 2) >= fDate Then
            If aXuat(I, 2) <= eDate Then
                MaHang = aXuat(I, 4)
                              
                    If Not Dic.Exists(MaHang) Then
                        K = K + 1
                        Dic.Item(MaHang) = K
                        dArr(K, 1) = K
                        For J = 2 To 4
                             dArr(K, J) = aXuat(I, J + 2)
                        Next J
                        dArr(K, 3) = aXuat(I, 18)
                        dArr(K, 4) = aXuat(I, 19)
                        dArr(K, 6) = aXuat(I, 20)
                        dArr(K, 7) = aXuat(I, 22)
                    Else
                        Rws = Dic.Item(MaHang)
                        dArr(Rws, 3) = dArr(Rws, 3) + aXuat(I, 18)
                        dArr(Rws, 4) = dArr(Rws, 4) + aXuat(I, 19)
                End If
            End If
        End If
     End If
    Next I
    For I = 1 To K
        If dArr(I, 6) > 0 Then dArr(I, 5) = dArr(I, 7) / dArr(I, 6)
    Next I
    .Rows("6:5011").Hidden = False
    .Range("E6:L5010").ClearContents
    .Range("E6").Resize(R, 8) = dArr
    .Rows(6 + K & ":5010").Hidden = True
End With
Set Dic = Nothing
End Sub
Thưa Thầy
Ợ, bài #6 xong lâu rồi mà bạn.
Ợ, bài #6 xong lâu rồi mà bạn.

- Phần khi báo hủy thì bỏ qua thì được rồi
- Nhưng phần tên và đơn vị tính nó theo số lần xuất hiện liên tiếp mà số lượng và thành tiền chỉ nhận 1 lần đầu tiên xuất hiện trong kỳ thôi. Thầy chỉnh giúp
 

File đính kèm

  • Tổng hợp bán.xlsm
    48.2 KB · Đọc: 4
Upvote 0
- Phần khi báo hủy thì bỏ qua thì được rồi
- Nhưng phần tên và đơn vị tính nó theo số lần xuất hiện liên tiếp mà số lượng và thành tiền chỉ nhận 1 lần đầu tiên xuất hiện trong kỳ thôi. Thầy chỉnh giúp
Bạn hỏi ai đó. File bài trên (#11) không phải bài #6 nhé bạn.
 
Upvote 0
Ý mình hỏi là chung chung với mọi người. Còn bạn trả lời là riêng với mình, như thế hơi phân biệt và mọi người ganh tị thì sao.
Xin cảm ơn Thầy. Code chạy chuẩn rồi - Cách code của thầy tôi sẽ phải nghiên cứu dài mới hiểu được
Bài đã được tự động gộp:

Chình 1 chút code của bạn không biết có đúng không.
Mã:
Public Sub s_BC_Ban()
Dim Dic As Object, aDmHang(), aXuat(), dArr(), MaHang As String
Dim I As Long, J As Long, K As Long, R As Long, Rws As Long, fDate As Long, eDate As Long
Set Dic = CreateObject("Scripting.Dictionary")
    aXuat = Sheets("DATA").Range("B6", Sheets("DATA").Range("C6").End(xlDown)).Resize(, 22).Value
    R = UBound(aXuat)
ReDim dArr(1 To R, 1 To 8)
With Sheets("BC_ban")
    fDate = .Range("N2").Value2
    eDate = DateSerial(Year(.Range("N2")), Month(.Range("N2")) + 1, 0)
    For I = 1 To R
      If aXuat(I, 12) <> "HY" Then
        If aXuat(I, 2) >= fDate Then
            If aXuat(I, 2) <= eDate Then
                MaHang = aXuat(I, 4)
                              
                    If Not Dic.Exists(MaHang) Then
                        K = K + 1
                        Dic.Item(MaHang) = K
                        dArr(K, 1) = K
                        For J = 2 To 4
                             dArr(K, J) = aXuat(I, J + 2)
                        Next J
                        dArr(K, 3) = aXuat(I, 18)
                        dArr(K, 4) = aXuat(I, 19)
                        dArr(K, 6) = aXuat(I, 20)
                        dArr(K, 7) = aXuat(I, 22)
                    Else
                        Rws = Dic.Item(MaHang)
                        dArr(Rws, 3) = dArr(Rws, 3) + aXuat(I, 18)
                        dArr(Rws, 4) = dArr(Rws, 4) + aXuat(I, 19)
                End If
            End If
        End If
     End If
    Next I
    For I = 1 To K
        If dArr(I, 6) > 0 Then dArr(I, 5) = dArr(I, 7) / dArr(I, 6)
    Next I
    .Rows("6:5011").Hidden = False
    .Range("E6:L5010").ClearContents
    .Range("E6").Resize(R, 8) = dArr
    .Rows(6 + K & ":5010").Hidden = True
End With
Set Dic = Nothing
End Sub
Thưa thầy :
- Phần khi báo hủy thì bỏ qua thì được rồi
- Nhưng phần tên và đơn vị tính nó theo số lần xuất hiện liên tiếp mà số lượng và thành tiền chỉ nhận 1 lần đầu tiên xuất hiện trong kỳ thôi. Thầy chỉnh giúp - Xin trân trọng cảm ơn thầy
 

File đính kèm

  • Tổng hợp bán.xlsm
    48.2 KB · Đọc: 4
Lần chỉnh sửa cuối:
Upvote 0
Ý mình hỏi là chung chung với mọi người. Còn bạn trả lời là riêng với mình, như thế hơi phân biệt và mọi người ganh tị thì sao.
Thưa thầy :
Tôi đã kiểm tra lại thấy : phần thành tiền bị sai nên dẫn tới cả giá bình quân bị sai thầy ạ - Xin phép thầy tôi đã chỉnh lại được rồi - Cảm ơn thầy nhiều
 
Upvote 0
Web KT
Back
Top Bottom