Tính tổng nhiều điều kiện

Liên hệ QC

mitdacdtd

Thành viên hoạt động
Tham gia
14/10/17
Bài viết
150
Được thích
23
Giới tính
Nam
Hi anh em.
Hiện mình đang có báo cáo cần hoàn thiện với tiêu chí đếm số máy và người trong ca sản xuất. Vì 1 máy có thể SX nhiều mã hàng và người tự tăng theo nên đếm có điều kiện duy nhất theo ngày. Ae giúp đỡ theo file đính kèm nhé.
Thanks all
 

File đính kèm

Hi anh em.
Hiện mình đang có báo cáo cần hoàn thiện với tiêu chí đếm số máy và người trong ca sản xuất. Vì 1 máy có thể SX nhiều mã hàng và người tự tăng theo nên đếm có điều kiện duy nhất theo ngày. Ae giúp đỡ theo file đính kèm nhé.
Cảm ơn all
Cái này dùng Vba cho gọn.
 
Vẫn bế tắc quá anh em ạ.
 
File mình gửi kèm bạn nhé. Cảm ơn trước
Thử:
Mã:
C2=SUM(N(FREQUENCY(IF((Data!$G$3:$G$500=B2)*(Data!$H$3:$H$500=A2),Data!$B$3:$B$500),Data!$B$3:$B$500)>0))
D2=SUM(IFERROR(1/COUNTIF(OFFSET(Data!$C$2,MATCH(B2&A2,Data!$G$3:$G$500&Data!$H$3:$H$500,),,COUNTIFS(Data!$G$3:$G$500,B2,Data!$H$3:$H$500,A2),3),IF((Data!$G$3:$G$500=B2)*(Data!$H$3:$H$500=A2),Data!$C$3:$E$500)),))
Kết thúc bằng Ctrl+Shift+Enter, fill xuống.

Thân
 

File đính kèm

File mình gửi kèm bạn nhé. Cảm ơn trước
Thêm 1 hàm viết bằng VBA.
Không bài nào "làm khó" công thức của bạn nhỉ?
Thử:
Mã:
C2=SUM(N(FREQUENCY(IF((Data!$G$3:$G$500=B2)*(Data!$H$3:$H$500=A2),Data!$B$3:$B$500),Data!$B$3:$B$500)>0))
D2=SUM(IFERROR(1/COUNTIF(OFFSET(Data!$C$2,MATCH(B2&A2,Data!$G$3:$G$500&Data!$H$3:$H$500,),,COUNTIFS(Data!$G$3:$G$500,B2,Data!$H$3:$H$500,A2),3),IF((Data!$G$3:$G$500=B2)*(Data!$H$3:$H$500=A2),Data!$C$3:$E$500)),))
Kết thúc bằng Ctrl+Shift+Enter, fill xuống.

Thân
 

File đính kèm

Thử:
Mã:
C2=SUM(N(FREQUENCY(IF((Data!$G$3:$G$500=B2)*(Data!$H$3:$H$500=A2),Data!$B$3:$B$500),Data!$B$3:$B$500)>0))
D2=SUM(IFERROR(1/COUNTIF(OFFSET(Data!$C$2,MATCH(B2&A2,Data!$G$3:$G$500&Data!$H$3:$H$500,),,COUNTIFS(Data!$G$3:$G$500,B2,Data!$H$3:$H$500,A2),3),IF((Data!$G$3:$G$500=B2)*(Data!$H$3:$H$500=A2),Data!$C$3:$E$500)),))
Kết thúc bằng Ctrl+Shift+Enter, fill xuống.

Thân
Em nể bác thật sự. Nếu phải gọi Sư phụ thì chắc em tôn sùng bác quá.
 
File mình gửi kèm bạn nhé. Cảm ơn trước
Bạn xem có đúng không nhé.
Mã:
Sub tinhsomay()
Dim a As Long, b As Long, dic As Object, i As Long, j As Integer, lr As Long, dk As String, k As Integer
Dim arr, arr1, dks As String
Set dic = CreateObject("scripting.dictionary")
With Sheets("data")
     lr = .Range("B" & Rows.Count).End(xlUp).Row
     If lr < 3 Then Exit Sub
     arr = .Range("B3:h" & lr).Value
End With
With Sheets("Bao cao")
     lr = .Range("A" & Rows.Count).End(xlUp).Row
     If lr < 2 Then Exit Sub
     arr1 = .Range("A2:D" & lr).Value
     For i = 1 To UBound(arr, 1)
         dk = CLng(arr(i, 7)) & arr(i, 6)
         If Not dic.exists(dk) Then
           dic.Add dk, Array(0, 0)
           dks = dk & "#" & arr(i, 1)
           If Not dic.exists(dks) Then
              dic.Add dks, ""
              dic.Item(dk) = Array(dic.Item(dk)(0) + 1, dic.Item(dk)(1))
           End If
           For k = 2 To 4
             If arr(i, k) <> Empty Then
               dks = dk & "##" & arr(i, k)
               If Not dic.exists(dks) Then
                  dic.Add dks, ""
                  dic.Item(dk) = Array(dic.Item(dk)(0), dic.Item(dk)(1) + 1)
              End If
             End If
           Next k
        Else
           dks = dk & "#" & arr(i, 1)
           If Not dic.exists(dks) Then
              dic.Add dks, ""
              dic.Item(dk) = Array(dic.Item(dk)(0) + 1, dic.Item(dk)(1))
              b = dic.Item(dk)(0)
           End If
              dks = dk & "##" & arr(i, k)
           For k = 2 To 4
              If arr(i, k) <> Empty Then
               dks = dk & "##" & arr(i, k)
               If Not dic.exists(dks) Then
                  dic.Add dks, ""
                 dic.Item(dk) = Array(dic.Item(dk)(0), dic.Item(dk)(1) + 1)
               End If
             End If
           Next k
       End If
   Next i
   For i = 1 To UBound(arr1, 1)
       dk = CLng(arr1(i, 1)) & arr1(i, 2)
       If dic.exists(dk) Then
          arr1(i, 3) = dic.Item(dk)(0)
          arr1(i, 4) = dic.Item(dk)(1)
       End If
   Next i
    .Range("A2:D" & lr).Value = arr1
End With
End Sub
 

File đính kèm

Bạn xem có đúng không nhé.
Mã:
Sub tinhsomay()
Dim a As Long, b As Long, dic As Object, i As Long, j As Integer, lr As Long, dk As String, dic2 As Object, k As Integer
Dim arr, arr1, dks As String
Set dic = CreateObject("scripting.dictionary")
Set dic2 = CreateObject("scripting.dictionary")
With Sheets("data")
     lr = .Range("B" & Rows.Count).End(xlUp).Row
     If lr < 3 Then Exit Sub
     arr = .Range("B3:h" & lr).Value
End With
With Sheets("Bao cao")
     lr = .Range("A" & Rows.Count).End(xlUp).Row
     If lr < 2 Then Exit Sub
     arr1 = .Range("A2:D" & lr).Value
     For i = 1 To UBound(arr, 1)
         dk = CLng(arr(i, 7)) & arr(i, 6)
         If Not dic.exists(dk) Then
           dic.Add dk, Array(0, 0)
           dks = dk & "#" & arr(i, 1)
           If Not dic.exists(dks) Then
              dic.Add dks, ""
              dic.Item(dk) = Array(dic.Item(dk)(0) + 1, dic.Item(dk)(1))
           End If
           For k = 2 To 4
             If arr(i, k) <> Empty Then
               dks = dk & "##" & arr(i, k)
               If Not dic.exists(dks) Then
                  dic.Add dks, ""
                  dic.Item(dk) = Array(dic.Item(dk)(0), dic.Item(dk)(1) + 1)
              End If
             End If
           Next k
        Else
           dks = dk & "#" & arr(i, 1)
           If Not dic.exists(dks) Then
              dic.Add dks, ""
              dic.Item(dk) = Array(dic.Item(dk)(0) + 1, dic.Item(dk)(1))
              b = dic.Item(dk)(0)
           End If
              dks = dk & "##" & arr(i, k)
           For k = 2 To 4
              If arr(i, k) <> Empty Then
               dks = dk & "##" & arr(i, k)
               If Not dic.exists(dks) Then
                  dic.Add dks, ""
                 dic.Item(dk) = Array(dic.Item(dk)(0), dic.Item(dk)(1) + 1)
               End If
             End If
           Next k
       End If
   Next i
   For i = 1 To UBound(arr1, 1)
       dk = CLng(arr1(i, 1)) & arr1(i, 2)
       If dic.exists(dk) Then
          arr1(i, 3) = dic.Item(dk)(0)
          arr1(i, 4) = dic.Item(dk)(1)
       End If
   Next i
    .Range("A2:D" & lr).Value = arr1
End With
End Sub
Các bác làm em thấy mình nhỏ bé. Cảm ơn bác nhiều
 
Thử:
Mã:
C2=SUM(N(FREQUENCY(IF((Data!$G$3:$G$500=B2)*(Data!$H$3:$H$500=A2),Data!$B$3:$B$500),Data!$B$3:$B$500)>0))
D2=SUM(IFERROR(1/COUNTIF(OFFSET(Data!$C$2,MATCH(B2&A2,Data!$G$3:$G$500&Data!$H$3:$H$500,),,COUNTIFS(Data!$G$3:$G$500,B2,Data!$H$3:$H$500,A2),3),IF((Data!$G$3:$G$500=B2)*(Data!$H$3:$H$500=A2),Data!$C$3:$E$500)),))
Kết thúc bằng Ctrl+Shift+Enter, fill xuống.

Thân
Hi bác. Em đang dùng hàm sumproduct nhưng không hiểu sao nó cứ báo lỗi #NA, loay hoay cả buổi rồi ạ. Bác giúp em với nhé.
Thanks bác
 

File đính kèm

Hi bác. Em đang dùng hàm sumproduct nhưng không hiểu sao nó cứ báo lỗi #NA, loay hoay cả buổi rồi ạ. Bác giúp em với nhé.
Cảm ơn bác
Do các cột N:S bên sheet Data vẫn còn tồn tại những giá trị lỗi #NA và #DIV/0, bạn xóa nó đi thì công thức sẽ trả về giá trị số.

Thân
 
Web KT

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

Back
Top Bottom