Cần giúp đỡ công thức đếm nhiều điều kiện và bỏ trùng

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

ndh2311

Thành viên mới
Tham gia
2/6/23
Bài viết
2
Được thích
1
Chào các bạn!
Tình hình là hiện tại mình đang làm một file dữ liệu KPIs để báo cáo hàng tuần nhưng mình đang vướng mắc ở chỗ công thức đếm với nhiều điều kiện và bỏ trùng lặp (không tính đến việc sử dụng pivort table), mong các bạn giúp đỡ.
Cụ thể điều kiện mình có đính kèm trong file.
Trân trọng cảm ơn.
 

File đính kèm

  • DLT.xls
    119.5 KB · Đọc: 18
Chào các bạn!
Tình hình là hiện tại mình đang làm một file dữ liệu KPIs để báo cáo hàng tuần nhưng mình đang vướng mắc ở chỗ công thức đếm với nhiều điều kiện và bỏ trùng lặp (không tính đến việc sử dụng pivort table), mong các bạn giúp đỡ.
Cụ thể điều kiện mình có đính kèm trong file.
Trân trọng cảm ơn.
Bạn dùng Excel bản nào vậy. Thấy lưu đuôi .xls sợ bản thấp không có hàm Countifs như lần trước làm cho bạn nào đấy.
 
Sao lại không sử dụng Pivot Table nhỉ.
vì file mình rất nhiều dữ liệu và nặng nên muốn dùng công thức để vừa tiện vừa nhẹ file.
Bài đã được tự động gộp:

Bạn dùng Excel bản nào vậy. Thấy lưu đuôi .xls sợ bản thấp không có hàm Countifs như lần trước làm cho bạn nào đấy.
Mình dùng bản 2016 ở công ty và 2019 ở nhà.
 
Một cách dùng UDF nhé.
Chuột phải trên sheet name, chọn ViewCode, insert/module1, dán code này vào. Lưu file dạng .xlsm
Sau đó, tại ô M2:
=luothoatdong($L2,M$1)
copy toàn bảng.
Với điều kiện như trong file mẫu:
M1:R1 có mã tháng dạng T1,T2,...,T11,T12 ở cuối chuỗi.
M1:R1 lần lượt là cũ, mới, cũ, mới,... với cột index là lẻ (cũ), chẵn (mới)

Mã:
Option Explicit
Function luothoatdong(ByVal grp As String, co As String)
Dim lr&, i&, j&, k&, c&, mon&, yr As Boolean, rng, res()
Dim dic As Object, key, id As String
Set dic = CreateObject("Scripting.Dictionary")
lr = Cells(Rows.Count, "B").End(xlUp).Row
rng = Range("C2:I" & lr).Value
mon = CLng(Split(Right(co, 3), "T")(1))
yr = WorksheetFunction.IsOdd(Application.Caller.Column)
For i = 1 To UBound(rng)
    If rng(i, 1) = grp And IIf(yr, Year(rng(i, 4)) < 2023, Year(rng(i, 4)) = 2023) _
        And Month(rng(i, 4)) = mon Then
        id = rng(i, 1) & "|" & rng(i, 2)
        If Not dic.exists(rng(i, 2)) Then
            dic.Add rng(i, 2), rng(i, 7)
        Else
            dic(rng(i, 2)) = dic(rng(i, 2)) + rng(i, 7)
        End If
    End If
Next
For Each key In dic.keys
    If dic(key) > 2000000 Then c = c + 1
Next
luothoatdong = IIf(c = 0, "", c)
End Function
Capture.JPG
 

File đính kèm

  • DLT.xlsm
    53.5 KB · Đọc: 9
vì file mình rất nhiều dữ liệu và nặng nên muốn dùng công thức để vừa tiện vừa nhẹ file.
Bài đã được tự động gộp:


Mình dùng bản 2016 ở công ty và 2019 ở nhà.
Dùng công thức này M2 ( Ctrl +Shift +Enter ), cột lượt mới thay "<2023" thành "=2023" nhé.
Mã:
=COUNT(1/(MATCH($E$2:$E$508,IF(($L2=$C$2:$C$508)*(MONTH($F$2:$F$508)=--RIGHT(M$1,1))*(YEAR($F$2:$F$508)<2023)*($I$2:$I$508>=2000000),$E$2:$E$508),0)=ROW($1:$507)))
 

File đính kèm

  • DLT.xls
    194.5 KB · Đọc: 11
vì file mình rất nhiều dữ liệu và nặng nên muốn dùng công thức để vừa tiện vừa nhẹ file.
Dùng công thức này M2 ( Ctrl +Shift +Enter ), cột lượt mới thay "<2023" thành "=2023" nhé.
Mã:
=COUNT(1/(MATCH($E$2:$E$508,IF(($L2=$C$2:$C$508)*(MONTH($F$2:$F$508)=--RIGHT(M$1,1))*(YEAR($F$2:$F$508)<2023)*($I$2:$I$508>=2000000),$E$2:$E$508),0)=ROW($1:$507)))
Thấy trong file data từ 2013 đến nay, mà lại "muốn dùng công thức để vừa tiện vừa nhẹ" thì ô hô hô rồi
Test thử với CT mảng này xem tốc độ thế nào, nếu chậm quá thì dùng UDF của mình ở #5 nhé.
 
Thấy trong file data từ 2013 đến nay, mà lại "muốn dùng công thức để vừa tiện vừa nhẹ" thì ô hô hô rồi
Test thử với CT mảng này xem tốc độ thế nào, nếu chậm quá thì dùng UDF của mình ở #5 nhé.
Chủ thớt vậy mà bác, Pivot table xử lý nhanh vậy mà không muốn dùng kìa. :p
 
Web KT
Back
Top Bottom