Xin hướng dẫn hàm đếm những giá trị khác nhau thỏa nhiều điều kiện

  • Thread starter Thread starter ndv_son
  • Ngày gửi Ngày gửi
Liên hệ QC

ndv_son

Thành viên mới
Tham gia
25/1/13
Bài viết
46
Được thích
4
Mình loay hoay tìm trên diễn đàn nhưng chưa có chủ đề nào giống mục đích mình đang cần, nên xin phép viết bài này mong Anh chị em hỗ trợ giúp mình viết hàm cho báo cáo mình đang cần. Mục đích mình muốn đếm các giá trị khác nhau thỏa 2 hay nhiều điều kiện nào đó, mình xin đưa file mẫu lên cho mọi người dễ hình dung.
Xin chân thành cám ơn sự giúp đỡ của Anh em trên diễn đàn.
 

File đính kèm

Mình loay hoay tìm trên diễn đàn nhưng chưa có chủ đề nào giống mục đích mình đang cần, nên xin phép viết bài này mong Anh chị em hỗ trợ giúp mình viết hàm cho báo cáo mình đang cần. Mục đích mình muốn đếm các giá trị khác nhau thỏa 2 hay nhiều điều kiện nào đó, mình xin đưa file mẫu lên cho mọi người dễ hình dung.
Xin chân thành cám ơn sự giúp đỡ của Anh em trên diễn đàn.
Đây là hàm "dem" mình viết bằng VBA.
Bạn xem vừa ý chưa nhé?
 

File đính kèm

Lần chỉnh sửa cuối:
Em thấy công thức vẫn đúng mà anh? Em mới tập viết các code đơn giản mong anh Bate chỉ giúp em cái còn thiếu sót để em rút kinh nghiệm ạ.
Vẫn đúng vì bạn viết nó như thế
Khi thay [C6]=2 thì kết quả phải là 3 chứ không phải 4 ( nếu như mình hiểu đúng ý của chủ topic)
Đếm số khách hàng khác nhau đã mua đồ cửa hàng Z và có số món hàng mua lớn hơn 1
Híc, tức là bạn phải đếm các khách hàng mua ở cửa hàng "Z", số lượng lớn hơn 2 và........duy nhất
Thân
 
Vẫn đúng vì bạn viết nó như thế
Khi thay [C6]=2 thì kết quả phải là 3 chứ không phải 4 ( nếu như mình hiểu đúng ý của chủ topic)

Híc, tức là bạn phải đếm các khách hàng mua ở cửa hàng "Z", số lượng lớn hơn 2 và........duy nhất
Thân
Hic, đúng là do mình không đọc kĩ đề bài lên bị "lạc đề". Thế nên nghĩ mãi vẫn không hiểu phần nhắc nhở của anh Bate.
 
Lần chỉnh sửa cuối:
Bạn sử dụng công thức này thử xem:
PHP:
=SUMPRODUCT(--(B2:B8="Z"),--(C2:C8>1))
 
Rất chân thành cám ơn sự giúp đỡ của bạn Chuột,anh concogia và bạn Bé Nấm.
Tuy nhiên nếu theo công thức bạn Bé Nấm thì nó sẽ đếm tất cả những khách hàng (kể cả trùng nhau) đã mua ở cửa hàng Z có số lượng mua lớn hơn 1, vì vậy ko đúng theo mục đích của mình.
Ví dụ: Nếu mình tăng số lượng mua ở cột C3 lên thành 5 thì kết quả trả về là 4 chứ ko phải là 3 nữa.
Mong mọi người giúp đỡ.
 
Lần chỉnh sửa cuối:
Rất chân thành cám ơn sự giúp đỡ của bạn Chuột,anh concogia và bạn Bé Nấm.
Tuy nhiên nếu theo công thức bạn Bé Nấm thì nó sẽ đếm tất cả những khách hàng (kể cả trùng nhau) đã mua ở cửa hàng Z có số lượng mua lớn hơn 1, vì vậy ko đúng theo mục đích của mình.
Ví dụ: Nếu mình tăng số lượng mua ở cột C3 lên thành 5 thì kết quả trả về là 4 chứ ko phải là 3 nữa.
Mong mọi người giúp đỡ.

mình thì chưa mò ra nổi cái hàm nào để áp dụng cho trường hợp của bạn cả, bạn dùng thử hàm tự tạo của GPE xem --=0
(nhớ mở Macro trước khi dùng)

Mã:
Function GPE_dem(vung As Range, dkcuahang As String, dksomonhang As Variant)
Dim dic As Object, Arr(), i As Long
    Set dic = CreateObject("Scripting.Dictionary")
    Arr = vung.Value
    For i = 1 To UBound(Arr)
        If Not IsEmpty(Arr(i, 1)) And Not dic.exists(Arr(i, 1)) Then 'ko trong', ko add trung`
            If UCase(Arr(i, 2)) = dkcuahang And Arr(i, 3) > dksomonhang Then
                dic.Add Arr(i, 1), Nothing
            End If
        End If
    Next

    Arr = dic.keys
    GPE_dem = Application.WorksheetFunction.CountA(Arr)
    Erase Arr
    Set dic = Nothing
End Function

' - - - -
nếu muốn dùng hàm thì bạn tham khảo thêm các bài sau:
Hàm đếm nhưng loại bỏ đếm trùng.
Kết hợp Hàm dò tìm và Đếm dữ liệu có trùng lặp.

.....
(nhìn thấy choáng quá :-=)
Link: https://www.mediafire.com/?0qozla9191hrhy3
 
Lần chỉnh sửa cuối:
mình thì chưa mò ra nổi cái hàm nào để áp dụng cho trường hợp của bạn cả, bạn dùng thử hàm tự tạo của GPE xem --=0
(nhớ mở Macro trước khi dùng)

Mã:
Function GPE_dem(vung As Range, dkcuahang As String, dksomonhang As Variant)
Dim dic As Object, Arr(), i As Long
    Set dic = CreateObject("Scripting.Dictionary")
    Arr = vung.Value
    For i = 1 To UBound(Arr)
        If Not IsEmpty(Arr(i, 1)) And Not dic.exists(Arr(i, 1)) Then 'ko trong', ko add trung`
            If UCase(Arr(i, 2)) = dkcuahang And Arr(i, 3) > dksomonhang Then
                dic.Add Arr(i, 1), Nothing
            End If
        End If
    Next

   [B] [COLOR=#0000cd]Arr = dic.keys[/COLOR][/B]
    [B][COLOR=#0000cd]GPE_dem = Application.WorksheetFunction.CountA(Arr)[/COLOR][/B]
    Erase Arr
    Set dic = Nothing
End Function
Chỗ tô màu xanh bạn nên chuyển thành là đủ
GPE_dem = dic.Count
 
Mình loay hoay tìm trên diễn đàn nhưng chưa có chủ đề nào giống mục đích mình đang cần, nên xin phép viết bài này mong Anh chị em hỗ trợ giúp mình viết hàm cho báo cáo mình đang cần. Mục đích mình muốn đếm các giá trị khác nhau thỏa 2 hay nhiều điều kiện nào đó, mình xin đưa file mẫu lên cho mọi người dễ hình dung.
Xin chân thành cám ơn sự giúp đỡ của Anh em trên diễn đàn.

Thử công thức sau :

Mã:
=SUMPRODUCT((MATCH(A2:A8&B2:B8,A2:A8&B2:B8,0)=ROW(2:8)-1)*(B2:B8="Z")*(C2:C8>1))+SUMPRODUCT(--(MATCH(A2:A8&B2:B8&C2:C8,A2:A8&B2:B8&C2:C8,0)<>ROW(2:8)-1))

Lưu ý :
Vùng dữ liệu A2:C8 phải được sort theo trình tự
COLUMN C : Descending
 
Lần chỉnh sửa cuối:
Thử công thức sau :

Mã:
=SUMPRODUCT((MATCH(A2:A8&B2:B8,A2:A8&B2:B8,0)=ROW(2:8)-1)*(B2:B8="Z")*(C2:C8>1))+[B]SUMPRODUCT(--(MATCH(A2:A8&B2:B8&C2:C8,A2:A8&B2:B8&C2:C8,0)<>ROW(2:8)-1))[/B]
Nếu ta sửa C2,C3 thành 1 thì kết quả sẽ ra 3? vậy hình như không đúng ý tác giả? Chỉ cần như vậy là đủ hoặc bỏ --

=SUMPRODUCT((MATCH(A2:A8&B2:B8,A2:A8&B2:B8,0)=ROW(2:8)-1)*(B2:B8="Z")*(C2:C8>1))+SUMPRODUCT((MATCH(A2:A8&B2:B8&C2:C8,A2:A8&B2:B8&C2:C8,0)<>ROW(2:8)-1))

Hoặc

=SUMPRODUCT((MATCH(A2:A8&B2:B8,A2:A8&B2:B8,0)=ROW(2:8)-1)*(B2:B8="Z")*(C2:C8>1))
 
Chắc thế này là đủ:
Mã:
=SUMPRODUCT(--(FREQUENCY(IF(B2:B8="Z",MATCH(A2:A8,A2:A8,0))*(C2:C8>1),ROW(A2:A8)-ROW(A2)+1)>0))
Kết thúc bằng Ctrl-Shift-Enter
 
Lần chỉnh sửa cuối:
Chắc thế này là đủ:
Mã:
=SUMPRODUCT(--(FREQUENCY(IF(B2:B8="Z",MATCH(A2:A8,A2:A8,0))*(C2:C8>1),ROW(A2:A8)-ROW(A2)+1)>0))
Kết thúc bằng Ctrl-Shift-Enter

Công thức này nếu có khách hàng mua nhiều lần, mỗi lần mua 1 món thì công thức không đúng .
 
Lần chỉnh sửa cuối:
Hic cám ơn sự giúp đỡ nhiệt tình của các bạn, nhưng sao khi mình áp dụng vào cho báo cáo của mình nó lại ko chạy được ta.
Điều kiện trong báo cáo thực của mình ở cột cửa hàng là giá trị (Number) thì có ảnh hưởng đến kết quả ko các bạn?
 
Lần chỉnh sửa cuối:
Hic cám ơn sự giúp đỡ nhiệt tình của các bạn, nhưng sao khi mình áp dụng vào cho báo cáo của mình nó lại ko chạy được ta.
Điều kiện trong báo cáo thực của mình ở cột cửa hàng là giá trị (Number) thì có ảnh hưởng đến kết quả ko các bạn?
Tất nhiên là ảnh hửng rồi vì ban đầu dữ liệu của bạn là chuỗi nhưng bây giờ bạn lại áp dụng cho dữ liệu số.
Lần sau nếu bạn muốn giữ bí mật thì ko cần đưa hết File lên cũng được nhưng nên trích ra 1 phần của file. Đây là bài học kinh nghiệm cho bạn đó.
 
Hic cám ơn sự giúp đỡ nhiệt tình của các bạn, nhưng sao khi mình áp dụng vào cho báo cáo của mình nó lại ko chạy được ta.
Điều kiện trong báo cáo thực của mình ở cột cửa hàng là giá trị (Number) thì có ảnh hưởng đến kết quả ko các bạn?

Bạn có thể làm như sau :
Sort dữ liệu theo cột B . Nhấn Ctrl+F3
- Đặt Name : CH
- Refes to : =OFFSET(Test!$A$1,MATCH("Z",Test!$B:$B,0)-1,,COUNTIF(Test!$B:$B,"Z"))
Công thức :
Mã:
=SUMPRODUCT((SUMIF(CH,CH,OFFSET(CH,,2))>1)*(MATCH(CH,CH,0)=ROW(CH)-MATCH("Z",B:B,0)+1))
 
Mình loay hoay tìm trên diễn đàn nhưng chưa có chủ đề nào giống mục đích mình đang cần, nên xin phép viết bài này mong Anh chị em hỗ trợ giúp mình viết hàm cho báo cáo mình đang cần. Mục đích mình muốn đếm các giá trị khác nhau thỏa 2 hay nhiều điều kiện nào đó, mình xin đưa file mẫu lên cho mọi người dễ hình dung.
Xin chân thành cám ơn sự giúp đỡ của Anh em trên diễn đàn.

Liên quan đến bài toán đếm duy nhất có điều kiện, bạn cứ thuộc lòng rằng phải dùng đến FREQUENCY nhé
Tham khảo bài toán tương tự ở đây:
http://www.giaiphapexcel.com/forum/...-với-điều-kiện-giá-trị-ở-1-cột-khác-là-unique
Bài của bạn có thể dùng công thức thế này:
Mã:
=COUNT(1/FREQUENCY(IF((B2:B10="z")*(A2:A10<>"")*(C2:C10>1),MATCH(A2:A10,A2:A10,0)),(IF((B2:B10="z")*(A2:A10<>"")*(C2:C10>1),MATCH(A2:A10,A2:A10,0)))))
Ctrl + Shift + Enter để kết thúc
 
Liên quan đến bài toán đếm duy nhất có điều kiện, bạn cứ thuộc lòng rằng phải dùng đến FREQUENCY nhé
Tham khảo bài toán tương tự ở đây:
http://www.giaiphapexcel.com/forum/...-với-điều-kiện-giá-trị-ở-1-cột-khác-là-unique
Bài của bạn có thể dùng công thức thế này:
Mã:
=COUNT(1/FREQUENCY(IF((B2:B10="z")*(A2:A10<>"")*(C2:C10>1),MATCH(A2:A10,A2:A10,0)),(IF((B2:B10="z")*(A2:A10<>"")*(C2:C10>1),MATCH(A2:A10,A2:A10,0)))))
Ctrl + Shift + Enter để kết thúc

Công thức này cũng bị lỗi như công thức của bebo021999, nếu 1 khách hàng chmua 2 lần và mỗi lần chỉ mua 1 món đồ
 
Công thức này cũng bị lỗi như công thức của bebo021999, nếu 1 khách hàng chmua 2 lần và mỗi lần chỉ mua 1 món đồ

Theo bạn trong trường hợp này kết quả = bao nhiêu là đúng? Tôi thì cho rằng =0 là đúng, còn bạn?
 
Web KT

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

Back
Top Bottom