Minhhanh_89
Thành viên mới

- Tham gia
- 14/3/14
- Bài viết
- 40
- Được thích
- 5

Số mã sản phẩm chính:Gửi anh chị GPE !
Nhờ anh chị tính giúp em số lượng mã hàng chính và số lượng mã hàng phụ theo từng tháng, những mã hàng bị trùng lặp trong tháng chỉ tính 1 lần.
Em có gửi file đính kèm !
Mong anh chị giúp đỡ ạ.
Em cảm ơn !
=SUMPRODUCT(1/COUNTIF($A$2:$A$18866,$A$2:$A$18866))
=SUMPRODUCT(($B$2:$B$18866=I3)*($C$2:$C$18866="HC"))

Số mã sản phẩm chính:Số mã HC theo tháng 7:Mã:=SUMPRODUCT(1/COUNTIF($A$2:$A$18866,$A$2:$A$18866))Mã:=SUMPRODUCT(($B$2:$B$18866=I3)*($C$2:$C$18866="HC"))
Thử Hàm tự tạo xem sao, Nhớ Enable Macros khi mở file.Hi anh,
Em muốn tính ra số mã sản phẩm của HC/PK ở tháng 7 và tháng 8 những mã trùng chỉ tính 1 lần.
Code thứ 1 của anh tính ra số mã sản phẩm bao gồm cả HC và PK
Code thứ 2: Tính ra được số mã sản phẩm của HC/PK trong tháng, đếm tất cả mã những mã hàng trùng chưa được tính 1 lần.
Gửi anh chị GPE !
Nhờ anh chị tính giúp em số lượng mã hàng chính và số lượng mã hàng phụ theo từng tháng, những mã hàng bị trùng lặp trong tháng chỉ tính 1 lần.
Em có gửi file đính kèm !
Mong anh chị giúp đỡ ạ.
Em cảm ơn !
=IF(($B$2:$B$18866=$I3)*($C$2:$C$18866=J$2);$A$2:$A$18866;"")
=SUM(IF(tmp="";"";--(MATCH(tmp;tmp;0)=ROW($A$2:$A$18866)-1)))
IF(($B$2:$B$18866=$I3)*($C$2:$C$18866=J$2);$A$2:$A$18866;"")
Function UniqueCount(data As Range, ByVal curr_col2 As String, ByVal curr_col3 As String) As Long
Dim dic As Object, Arr(), index As Long
Set dic = CreateObject("Scripting.Dictionary")
Arr = data.Value
For index = 1 To UBound(Arr, 1)
If Arr(index, 2) = curr_col2 And Arr(index, 3) = curr_col3 Then
If Not dic.Exists(Arr(index, 1)) Then dic.Add Arr(index, 1), ""
End If
Next index
UniqueCount = dic.Count
Set dic = Nothing
End Function
=UniqueCount($A$2:$C$18866;$M3;N$2)
Nếu dùng VBA thì mình sẽ làm thế này




Ý tưởng của em chủ yếu là 1 giải pháp cho trường hợp dữ liệu nguồn nhiều quá. Nếu chủ topic biết ứng dụng thì tạo bảng theo dõi. Khi cần xem của tháng nào thì gõ vào 1 ô mà xem. Còn nếu viết hàm VBA thì em dùng ADO khỏi cần vòng lặp luôn cũng ra kết quả.Nhìn If Not Intersect(Target, [F2:F100]) Is Nothing Then là biết ngay là khi xóa dữ liệu, sửa dữ liệu, thay dữ liệu mới thì kết quả không hề thay đổi
Function GetExcelConnection(ByVal Path As String, Optional ByVal Header As Boolean = True)
Dim StrConn As String, ObjConn As Object, Pro As String, Ext As String
Set ObjConn = CreateObject("ADODB.Connection")
If Application.Version < 12 Then
Pro = "Provider=Microsoft.JET.OLEDB.4.0;"
Ext = ";Extended Properties=""Excel 8.0;"
Else
Pro = "Provider=Microsoft.ACE.OLEDB.12.0;"
Ext = ";Extended Properties=""Excel 12.0;"
End If
StrConn = Pro & "Data Source=" & Path & Ext & _
"HDR=" & IIf(Header, "Yes", "No") & ";IMEX=1"";"
ObjConn.Open StrConn
Set GetExcelConnection = ObjConn
End Function
Function Dem(data As Range, dk1 As String, dk2 As String)
Dim ObjConn As Object, RS As Object, nguon
Dim StrRequest As String, Path As String, tam
Path = ThisWorkbook.FullName
nguon = "[Sheet1$" & data.Address(0, 0) & "]"
Set RS = CreateObject("ADODB.Recordset")
Set ObjConn = GetExcelConnection(Path, 0)
StrRequest = "SELECT count(f1) FROM (select distinct(f1),f2,f3 from" & nguon & ")" _
& " where f2 = '" & dk1 & "' and f3= '" & dk2 & "'"
RS.Open StrRequest, ObjConn, 3, 1
tam = RS.getrows
Dem = tam(0, 0)
ObjConn.Close
Set RS = Nothing
End Function