Tổng hợp và tính tổng theo điều kiện
Xin chào tất cả mọi người,
Tôi đã tạo dữ liệu mẫu như này, và có làm công thức nhưng do dữ liệu tương đối nhiều nên nhờ mọi người hỗ trợ code VBA,
với yêu cầu là:
B1:Nhập vào điều kiện Model ở ô A2. (Chỉ cần nhập1 điều kiện ở ô A2 thì sẽ hiển thị tất cả dữ liệu)
B2: Lấy danh sách ngày từ sheet data theo điều kiện ở ô A2 điền vào 2 dòng cột B gồm ( đơn sản xuất và đơn bù).
B3: Tính tổng số lượng của đơn sản xuất theo size, model (Ô A2), trong cột D ở sheet data không chứa ký tự PT.
B4: Tính tổng số lượng của đơn sản xuất theo size,model (Ô A2), trong cột D ở sheet data có chứa ký tự PT.Xin cảm ơn mọi người đã hỗ trợ.
Tại sheet REPORT, bạn nhập mã model tại ô A2 thì kết quả sẽ cập nhật nhé.
Click chuột phải vào tên sheet/View Code, dán đoạn code vào:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lr&, i&, j&, k&, rng, res(), id As String
Dim dic As Object, dic2 As Object, key
Set dic = CreateObject("Scripting.Dictionary"): Set dic2 = CreateObject("Scripting.Dictionary")
If Target.Address(0, 0) <> "A2" Then Exit Sub
ReDim res(1 To 100000, 1 To 3)
With Sheets("data")
lr = .Cells(Rows.Count, "E").End(xlUp).Row
rng = .Range("C2:AC" & lr).Value2
For i = 2 To UBound(rng)
If rng(i, 3) = Target.Value Then
If Not dic2.exists(rng(i, 1)) Then
dic2.Add rng(i, 1), ""
k = k + 1
res(k, 1) = Int((k – 1) / 2) + 1: res(k, 2) = rng(i, 1): res(k, 3) = "don san xuat"
k = k + 1
res(k, 2) = rng(i, 1): res(k, 3) = "don bu"
End If
For j = 4 To UBound(rng, 2)
id = rng(i, 1) & "|" & IIf(InStr(1, rng(i, 2), "PT"), "BU", "SX") & "|" & rng(1, j)
Debug.Print lr, id
If Not dic.exists(id) Then
dic.Add id, rng(i, j)
Else
dic(id) = dic(id) + rng(i, j)
End If
Next
End If
Next
End With
With Sheets("REPORT")
.Range("A4:BB10000").ClearContents
On Error Resume Next
.Range("A4").Resize(k, 1).UnMerge
.Range("A4").Resize(k, 3).Value = res
lr = .Cells(Rows.Count, "B").End(xlUp).Row
rng = .Range("G2:BB" & lr).Value
For i = 3 To UBound(rng)
For j = 1 To UBound(rng, 2)
id = res(i – 2, 2) & "|" & IIf(res(i – 2, 1) = "", "BU", "SX") & "|" & rng(1, j)
For Each key In dic.keys
If id = key Then rng(i, j) = dic(key)
Next
Next
Next
.Range("G2").Resize(UBound(rng), UBound(rng, 2)).Value = rng
For i = 4 To lr Step 2
.Cells(i, 1).Resize(2, 1).Merge
Next
End With
Set dic = Nothing: Set dic2 = Nothing
End Sub
www.giaiphapexcel.com/diendan/threads/t%E1%BB%95ng-h%E1%BB%A3p-v%C3%A0-t%C3%ADnh-t%E1%BB%95ng-theo-%C4%91i%E1%BB%81u-ki%E1%BB%87n.163192/#post-1089030
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học
Bình luận