Làm báo cáo Power Pivot, cần hỗ trợ tính toán có kèm điều kiện thời gian và ĐK khác

  • Thread starter Thread starter Hao Do
  • Ngày gửi Ngày gửi
Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Hao Do

Thành viên mới
Tham gia
7/12/17
Bài viết
13
Được thích
2
Giới tính
Nam
Dear ca nhà
Mình đang lập BC theo các yêu cầu xương quá, lên đây nhờ cả nhà giúp
Yêu câu:
Điều Kiện: Trong Tháng, nhân viên đạt tối thiểu DS >=30.000 / tháng, thì được xếp loại A
_ Cần lập BC mỗi tháng, mỗi quý số lượng NV đạt loại A của mỗi Cửa hàng, mỗi Chi nhánh
_Cần BC mỗi tháng mỗi, mỗi quý các nhóm xếp loại NV có bao nhiêu đạt loại A,
VD:
trong tháng, trong quý:
mỗi nhóm NV "Old" , "New", " L1", "L2", có bao nhiêu người xếp loại A
mỗi cửa hàng có bao nhiêu xếp loại A
Mình post file lên Group nhé cả nhà, Đa Tạ
 

File đính kèm

Mình cũng mới bập bõm vào nghề, xin mạn phép chia sẻ với bạn cách mình làm với file của bạn như sau:
- Bỏ đặt tên vùng dữ liệu Sheet "Data".
- Chép và Cộng doanh số (theo Mã NV và tháng) từ Sheet "Data" sang Sheet "TongHop". Sau đó thêm 2 cột là Quý (cột này dựa trên cơ sở cột tháng.... để tổng hợp theo quý) và XeploaiA (cột này được tính: Nếu doanh số tháng (sau khi cộng) của từng NV trong tháng nếu >=30.000 sẽ nhập là 1 (để sau đó tạo pivot để sum).
Thực hiện như sau: Từ Sheet "Data" ---> Nhấn "Tổng hợp dữ liệu"
- Tổng hợp Báo cáo:
Thực hiện như sau: Từ Sheet "TongHop" ---> Nhấn "Tạo Báo cáo"
Nếu không đúng ý bạn xin bỏ qua nhé.
Cũng mong các cao nhân trong diễn đàn chỉ giáo thêm.
 

File đính kèm

Mình sẽ làm lại tất cả bằng VBA cho thống nhất (không dùng Pivot nữa).
Các loại báo cáo nên tách ra từng sheet riêng biệt: "Cuahang","Nhanvien","Cap","Xeploai"
ở Sheet Data có nút "BÁO CÁO", Nhấn vào để tạo báo cáo.

Mã:
Option Explicit
Sub baocao()
Dim lr&, i&, j&, m&, k&, n&, c&, rng, Src, st As String, nvA, chA, s, sb, cell As Range
Dim res(), list(1 To 10000, 1 To 2), ws As Worksheet
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
With Sheets("Data")
    lr = .Cells(Rows.Count, "B").End(xlUp).Row
    Src = .Range("A2:H" & lr).Value
End With
For Each ws In Sheets
    Select Case ws.Name
        Case "Cuahang": n = 2
        Case "Nhanvien": n = 3
        Case "Cap": n = 4
        Case Else: GoTo NextSheet
    End Select
    ReDim res(1 To lr, 1 To 29)
    For i = 1 To UBound(Src)
        If Not dic.exists(Src(i, n)) Then
            k = k + 1
            dic.Add Src(i, n), ""
            res(k, 1) = Src(i, n): res(k, Src(i, 8) + 1) = Src(i, 6)
            res(k, 16) = Src(i, n): res(k, Src(i, 8) + 16) = 1
        Else
            For m = 1 To k
                If res(m, 1) = Src(i, n) Then
                    res(m, Src(i, 8) + 1) = res(m, Src(i, 8) + 1) + Src(i, 6)
                    res(m, Src(i, 8) + 16) = res(m, Src(i, 8) + 16) + 1
                    Exit For
                End If
            Next
        End If
    Next
    ws.Range("A3:AC10000").ClearFormats
    ws.Range("A3:AC10000").ClearContents
    ws.Range("A3").Resize(k, 29).Value = res
    ws.Range("N3").Resize(k, 1).Formula = "=SUM(B3:M3)"
    ws.Range("AC3").Resize(k, 1).Formula = "=SUM(Q3:AB3)"
    With ws.Range("A3").Offset(k, 0)
        .Value = "TOTAL"
        .Offset(0, 1).Resize(1, 13).Formula = "=SUM(B3:B" & k + 2 & ")"
        .Resize(1, 14).Copy .Offset(0, 15)
    End With
    With ws.Range("A1:N" & k + 3)
        .Borders.LineStyle = xlContinuous
        .NumberFormat = "#,##0.0"
    End With
    With ws.Range("P1:AC" & k + 3)
        .Borders.LineStyle = xlContinuous
        .NumberFormat = "#,##0.0"
    End With
NextSheet: k = 0
Next
ReDim res(1 To 100000, 1 To 37): k = 0
With Sheets("Nhanvien")
    lr = .Cells(Rows.Count, "A").End(xlUp).Row
    rng = .Range("A3:M" & lr).Value
    For i = 1 To UBound(rng) - 1
        st = ""
        For j = 2 To UBound(rng, 2)
            If rng(i, j) >= 30000 Then st = st & IIf(st = "", "", "-") & j - 1
        Next
        If st <> "" Then
            For m = 1 To UBound(Src)
                If rng(i, 1) = Src(m, 3) Then
                    k = k + 1
                    list(k, 1) = Src(m, 4) & "@" & st
                    list(k, 2) = Src(m, 2) & "@" & st
                End If
            Next
        End If
    Next
End With
Sheets("Xeploai").Activate
Range("A3:AK10000").ClearFormats
Range("A3:AK10000").ClearContents
Sheets("Cap").Range("A3:A" & Sheets("Cap").Cells(Rows.Count, "A").End(xlUp).Row).Copy Range("A3")
Sheets("Cuahang").Range("A3:A" & Sheets("Cuahang").Cells(Rows.Count, "A").End(xlUp).Row).Copy Range("T3")
lr = Cells(Rows.Count, "A").End(xlUp).Row
nvA = Range("A3:R" & lr).Value
lr = Cells(Rows.Count, "T").End(xlUp).Row
chA = Range("T3:AK" & lr).Value
    For j = 1 To 2
        For i = 1 To k
            s = Split(list(i, j), "@"): sb = Split(s(1), "-")
            For n = 1 To UBound(nvA)
                If s(0) = nvA(n, 1) Then
                    For m = 0 To UBound(sb)
                        nvA(n, sb(m) + 1) = nvA(n, sb(m) + 1) + 1
                    Next
                End If
            Next
            For n = 1 To UBound(chA)
                If s(0) = chA(n, 1) Then
                    For m = 0 To UBound(sb)
                        chA(n, sb(m) + 1) = chA(n, sb(m) + 1) + 1
                    Next
                End If
            Next
        Next
    Next
Range("A3").Resize(UBound(nvA), UBound(nvA, 2)).Value = nvA
Range("T3").Resize(UBound(chA), UBound(chA, 2)).Value = chA
Range("N3:N" & UBound(nvA) + 2).Formula = "=SUM(B3:D3)"
Range("O3:O" & UBound(nvA) + 2).Formula = "=SUM(E3:G3)"
Range("P3:P" & UBound(nvA) + 2).Formula = "=SUM(H3:J3)"
Range("Q3:Q" & UBound(nvA) + 2).Formula = "=SUM(K3:M3)"
Range("R3:R" & UBound(nvA) + 2).Formula = "=SUM(N3:Q3)"
Range(Cells(UBound(nvA) + 2, "B"), Cells(UBound(nvA) + 2, "R")).Formula = "=sum(B3:B" & UBound(nvA) + 1 & ")"
Range("N3:R3").Copy Range("AG3:AG" & UBound(chA) + 2)
Range(Cells(UBound(chA) + 2, "U"), Cells(UBound(chA) + 2, "AK")).Formula = "=sum(U3:U" & UBound(chA) + 1 & ")"
    For Each cell In Union(Range("A2"), Range("T2"))
        With cell.CurrentRegion
            .Borders.LineStyle = xlContinuous
            .NumberFormat = "#,###"
        End With
    Next
End Sub
 

File đính kèm

Mình cũng mới bập bõm vào nghề, xin mạn phép chia sẻ với bạn cách mình làm với file của bạn như sau:
- Bỏ đặt tên vùng dữ liệu Sheet "Data".
- Chép và Cộng doanh số (theo Mã NV và tháng) từ Sheet "Data" sang Sheet "TongHop". Sau đó thêm 2 cột là Quý (cột này dựa trên cơ sở cột tháng.... để tổng hợp theo quý) và XeploaiA (cột này được tính: Nếu doanh số tháng (sau khi cộng) của từng NV trong tháng nếu >=30.000 sẽ nhập là 1 (để sau đó tạo pivot để sum).
Thực hiện như sau: Từ Sheet "Data" ---> Nhấn "Tổng hợp dữ liệu"
- Tổng hợp Báo cáo:
Thực hiện như sau: Từ Sheet "TongHop" ---> Nhấn "Tạo Báo cáo"
Nếu không đúng ý bạn xin bỏ qua nhé.
Cũng mong các cao nhân trong diễn đàn chỉ giáo thêm.

Mình sẽ làm lại tất cả bằng VBA cho thống nhất (không dùng Pivot nữa).
Các loại báo cáo nên tách ra từng sheet riêng biệt: "Cuahang","Nhanvien","Cap","Xeploai"
ở Sheet Data có nút "BÁO CÁO", Nhấn vào để tạo báo cáo.

Mã:
Option Explicit
Sub baocao()
Dim lr&, i&, j&, m&, k&, n&, c&, rng, Src, st As String, nvA, chA, s, sb, cell As Range
Dim res(), list(1 To 10000, 1 To 2), ws As Worksheet
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
With Sheets("Data")
    lr = .Cells(Rows.Count, "B").End(xlUp).Row
    Src = .Range("A2:H" & lr).Value
End With
For Each ws In Sheets
    Select Case ws.Name
        Case "Cuahang": n = 2
        Case "Nhanvien": n = 3
        Case "Cap": n = 4
        Case Else: GoTo NextSheet
    End Select
    ReDim res(1 To lr, 1 To 29)
    For i = 1 To UBound(Src)
        If Not dic.exists(Src(i, n)) Then
            k = k + 1
            dic.Add Src(i, n), ""
            res(k, 1) = Src(i, n): res(k, Src(i, 8) + 1) = Src(i, 6)
            res(k, 16) = Src(i, n): res(k, Src(i, 8) + 16) = 1
        Else
            For m = 1 To k
                If res(m, 1) = Src(i, n) Then
                    res(m, Src(i, 8) + 1) = res(m, Src(i, 8) + 1) + Src(i, 6)
                    res(m, Src(i, 8) + 16) = res(m, Src(i, 8) + 16) + 1
                    Exit For
                End If
            Next
        End If
    Next
    ws.Range("A3:AC10000").ClearFormats
    ws.Range("A3:AC10000").ClearContents
    ws.Range("A3").Resize(k, 29).Value = res
    ws.Range("N3").Resize(k, 1).Formula = "=SUM(B3:M3)"
    ws.Range("AC3").Resize(k, 1).Formula = "=SUM(Q3:AB3)"
    With ws.Range("A3").Offset(k, 0)
        .Value = "TOTAL"
        .Offset(0, 1).Resize(1, 13).Formula = "=SUM(B3:B" & k + 2 & ")"
        .Resize(1, 14).Copy .Offset(0, 15)
    End With
    With ws.Range("A1:N" & k + 3)
        .Borders.LineStyle = xlContinuous
        .NumberFormat = "#,##0.0"
    End With
    With ws.Range("P1:AC" & k + 3)
        .Borders.LineStyle = xlContinuous
        .NumberFormat = "#,##0.0"
    End With
NextSheet: k = 0
Next
ReDim res(1 To 100000, 1 To 37): k = 0
With Sheets("Nhanvien")
    lr = .Cells(Rows.Count, "A").End(xlUp).Row
    rng = .Range("A3:M" & lr).Value
    For i = 1 To UBound(rng) - 1
        st = ""
        For j = 2 To UBound(rng, 2)
            If rng(i, j) >= 30000 Then st = st & IIf(st = "", "", "-") & j - 1
        Next
        If st <> "" Then
            For m = 1 To UBound(Src)
                If rng(i, 1) = Src(m, 3) Then
                    k = k + 1
                    list(k, 1) = Src(m, 4) & "@" & st
                    list(k, 2) = Src(m, 2) & "@" & st
                End If
            Next
        End If
    Next
End With
Sheets("Xeploai").Activate
Range("A3:AK10000").ClearFormats
Range("A3:AK10000").ClearContents
Sheets("Cap").Range("A3:A" & Sheets("Cap").Cells(Rows.Count, "A").End(xlUp).Row).Copy Range("A3")
Sheets("Cuahang").Range("A3:A" & Sheets("Cuahang").Cells(Rows.Count, "A").End(xlUp).Row).Copy Range("T3")
lr = Cells(Rows.Count, "A").End(xlUp).Row
nvA = Range("A3:R" & lr).Value
lr = Cells(Rows.Count, "T").End(xlUp).Row
chA = Range("T3:AK" & lr).Value
    For j = 1 To 2
        For i = 1 To k
            s = Split(list(i, j), "@"): sb = Split(s(1), "-")
            For n = 1 To UBound(nvA)
                If s(0) = nvA(n, 1) Then
                    For m = 0 To UBound(sb)
                        nvA(n, sb(m) + 1) = nvA(n, sb(m) + 1) + 1
                    Next
                End If
            Next
            For n = 1 To UBound(chA)
                If s(0) = chA(n, 1) Then
                    For m = 0 To UBound(sb)
                        chA(n, sb(m) + 1) = chA(n, sb(m) + 1) + 1
                    Next
                End If
            Next
        Next
    Next
Range("A3").Resize(UBound(nvA), UBound(nvA, 2)).Value = nvA
Range("T3").Resize(UBound(chA), UBound(chA, 2)).Value = chA
Range("N3:N" & UBound(nvA) + 2).Formula = "=SUM(B3:D3)"
Range("O3:O" & UBound(nvA) + 2).Formula = "=SUM(E3:G3)"
Range("P3:P" & UBound(nvA) + 2).Formula = "=SUM(H3:J3)"
Range("Q3:Q" & UBound(nvA) + 2).Formula = "=SUM(K3:M3)"
Range("R3:R" & UBound(nvA) + 2).Formula = "=SUM(N3:Q3)"
Range(Cells(UBound(nvA) + 2, "B"), Cells(UBound(nvA) + 2, "R")).Formula = "=sum(B3:B" & UBound(nvA) + 1 & ")"
Range("N3:R3").Copy Range("AG3:AG" & UBound(chA) + 2)
Range(Cells(UBound(chA) + 2, "U"), Cells(UBound(chA) + 2, "AK")).Formula = "=sum(U3:U" & UBound(chA) + 1 & ")"
    For Each cell In Union(Range("A2"), Range("T2"))
        With cell.CurrentRegion
            .Borders.LineStyle = xlContinuous
            .NumberFormat = "#,###"
        End With
    Next
End Sub

Mình cũng mới bập bõm vào nghề, xin mạn phép chia sẻ với bạn cách mình làm với file của bạn như sau:
- Bỏ đặt tên vùng dữ liệu Sheet "Data".
- Chép và Cộng doanh số (theo Mã NV và tháng) từ Sheet "Data" sang Sheet "TongHop". Sau đó thêm 2 cột là Quý (cột này dựa trên cơ sở cột tháng.... để tổng hợp theo quý) và XeploaiA (cột này được tính: Nếu doanh số tháng (sau khi cộng) của từng NV trong tháng nếu >=30.000 sẽ nhập là 1 (để sau đó tạo pivot để sum).
Thực hiện như sau: Từ Sheet "Data" ---> Nhấn "Tổng hợp dữ liệu"
- Tổng hợp Báo cáo:
Thực hiện như sau: Từ Sheet "TongHop" ---> Nhấn "Tạo Báo cáo"
Nếu không đúng ý bạn xin bỏ qua nhé.
Cũng mong các cao nhân trong diễn đàn chỉ giáo thêm.
Trước tiên mình xin cảm ơn 2 bạn NguyenHoangDiep và bạn Bebo 01999 rất nhiều
Bài đã được tự động gộp:

Mình cũng mới bập bõm vào nghề, xin mạn phép chia sẻ với bạn cách mình làm với file của bạn như sau:
- Bỏ đặt tên vùng dữ liệu Sheet "Data".
- Chép và Cộng doanh số (theo Mã NV và tháng) từ Sheet "Data" sang Sheet "TongHop". Sau đó thêm 2 cột là Quý (cột này dựa trên cơ sở cột tháng.... để tổng hợp theo quý) và XeploaiA (cột này được tính: Nếu doanh số tháng (sau khi cộng) của từng NV trong tháng nếu >=30.000 sẽ nhập là 1 (để sau đó tạo pivot để sum).
Thực hiện như sau: Từ Sheet "Data" ---> Nhấn "Tổng hợp dữ liệu"
- Tổng hợp Báo cáo:
Thực hiện như sau: Từ Sheet "TongHop" ---> Nhấn "Tạo Báo cáo"
Nếu không đúng ý bạn xin bỏ qua nhé.
Cũng mong các cao nhân trong diễn đàn chỉ giáo thêm.
1688124325031.png
Mình tải file về, không mở được, bạn hướng dẫn giúp mình, cảm ơn
 
Lần chỉnh sửa cuối:
Mình không biết lý do gì, nhưng có thể là do lỗi mở file mà nó cứ đơ không hoạt động...Nếu vậy, bạn làm theo hướng dẫn dưới đây:
Bạn tải file về sau đó bấm phải chuột vào file mới tải đó, chọn properties, tiếp theo bạn tích chọn vào ô Unblock sau đó bấm Ok là mở file bình thường bạn nhé. Nếu không được nữa bạn phải chụp màn hình các lỗi rồi post lên để mọi người thấy lỗi và hỗ trợ bạn nhé.
 
Do có chút lỗi trong đoạn code Tổng hợp dữ liệu, nên khi bấm chạy ra số liệu sai, mình đã chỉnh lại đoạn lệnh SUMIFS trong code, giờ tạm ổn. Mình gửi lại file bạn xem lại nhé Hao Do.
 

File đính kèm

Dear ca nhà
Mình đang lập BC theo các yêu cầu xương quá, lên đây nhờ cả nhà giúp
Yêu câu:
Điều Kiện: Trong Tháng, nhân viên đạt tối thiểu DS >=30.000 / tháng, thì được xếp loại A
_ Cần lập BC mỗi tháng, mỗi quý số lượng NV đạt loại A của mỗi Cửa hàng, mỗi Chi nhánh
_Cần BC mỗi tháng mỗi, mỗi quý các nhóm xếp loại NV có bao nhiêu đạt loại A,
VD:
trong tháng, trong quý:
mỗi nhóm NV "Old" , "New", " L1", "L2", có bao nhiêu người xếp loại A
mỗi cửa hàng có bao nhiêu xếp loại A
Mình post file lên Group nhé cả nhà, Đa Tạ
Tôi sửa lại file bạn cho đúng, bạn phân cấp như vậy Power Pivot không dùng được, vì nó không cho relationship many to many, chỉ Power bi nó mới cho thôi:
1688166902510.png
Bạn cần hiểu rõ đối tượng nào là nhánh trên, đối tượng nào là nhánh dưới khi phân cấp.
 

File đính kèm

Các bảng tổng hợp số liệu theo hóa đơn đã điều chỉnh lại theo file mới.... và bổ sung thêm kè khung và định dạng phân cách số... theo file mới nhé.
 

File đính kèm

Web KT

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

Back
Top Bottom