Cái này dùng Vba cho gọn.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
Giúp mình công thức với hoặc cho mình mã VBACái này dùng Vba cho gọn.
Bạn nói chi tiết hơn được không.Ví dụ cụ thể kết quả ra như thế nào.Giúp mình công thức với hoặc cho mình mã VBA
File mình gửi kèm bạn nhé. Thanks trướcBạn nói chi tiết hơn được không.Ví dụ cụ thể kết quả ra như thế nào.
Thử:File mình gửi kèm bạn nhé. Cảm ơn trước
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)),))
Thêm 1 hàm viết bằng VBA.File mình gửi kèm bạn nhé. Cảm ơn trước
Thử:
Kết thúc bằng Ctrl+Shift+Enter, fill xuống.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)),))
Thân
Làm "em" sướng hơn làm "bạn" của anh!Không bài nào "làm khó" công thức của bạn nhỉ?
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á.Thử:
Kết thúc bằng Ctrl+Shift+Enter, fill xuống.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)),))
Thân
Tôi làm "Sư chính" quen rồi, nên không thích làm "Sư phụ"!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á.
Bạn xem có đúng không nhé.File mình gửi kèm bạn nhé. Cảm ơn trước
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
Các bác làm em thấy mình nhỏ bé. Cảm ơn bác nhiềuBạ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
Thanks bác. Bác Hiệp với bác Ba Tê quả là những bậc cao thủ. Nao cho em cơm nắm muối vừng theo học hỏi với ạ.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ỉ?
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é.Thử:
Kết thúc bằng Ctrl+Shift+Enter, fill xuống.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)),))
Thân
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ố.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
Dạ mai em thử xem sao. Cảm ơn bác nhiều.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
Dạ đúng theo như ý bác nói. Em dốt quá nên làm phiền bác nhiều.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