Tạo hàm countif này như nào?

Liên hệ QC

Tường_Vi

Thành viên tiêu biểu
Tham gia
19/4/10
Bài viết
482
Được thích
121
Nghề nghiệp
Luôn tìm kiếm một vị trí tốt hơn
Em có dư liệu như sau
Item1 Item2 ..Cột Phụ Số lượng
A ........A........ AA ..........2
A....... .A........ AA.......... 2
A........ B........ AB.......... 1
A........ C........ AC.......... 1

Bình thường tại cột số lượng em sẽ dùng countif để đếm, nhưng giờ em muốn đếm thông qua UDF thì sao?
Em đã ghep Cột Item1 & Item2 bằng Union nhưng không được

Em xin được chỉ giáo
 

File đính kèm

Em có dư liệu như sau
Item1 Item2 ..Cột Phụ Số lượng
A ........A........ AA ..........2
A....... .A........ AA.......... 2
A........ B........ AB.......... 1
A........ C........ AC.......... 1

Bình thường tại cột số lượng em sẽ dùng countif để đếm, nhưng giờ em muốn đếm thông qua UDF thì sao?
Em đã ghep Cột Item1 & Item2 bằng Union nhưng không được

Em xin được chỉ giáo
Dùng SUMPRODUCT cũng đựoc mà, đâu cần VBA
PHP:
=SUMPRODUCT(($A$2:$A$6=$A2)*($B$2:$B$6=$B2))
 
Upvote 0
Dùng SUMPRODUCT cũng đựoc mà, đâu cần VBA
PHP:
=SUMPRODUCT(($A$2:$A$6=$A2)*($B$2:$B$6=$B2))
Muội đang viết một hàm check, nhưng đến đoạn trên thì bí nên cần viết trong VBA ạh
Mà sumproduct viết trong VBA thì khó quá HUynh NDU ơi
 
Upvote 0
Muội đang viết một hàm check, nhưng đến đoạn trên thì bí nên cần viết trong VBA ạh
Mà sumproduct viết trong VBA thì khó quá HUynh NDU ơi
Nếu buộc phải viết 1 hàm thì For... Next đi
PHP:
Function Dem(Rng1 as Range, dk1, Rng2 as Range, dk2) as Long
  Dim i as Long
  For i = 1 to Rng1.Rows.Count
    If Rng1(i,1) = dk1 and Rng2(i,1) = dk2 then
      Dem = Dem +1
    End If
  Next
End Function
Đại khái thế... chưa test đâu nha!
 
Upvote 0
Cám ơn sư huynh NDU, muội đã có một sản phẩm như ý phục vụ cho công việc của mình

Nhân tiện cho muội hỏi 02 việc
1. sao mình không viết Rng.count mà phải viết Rng.rows.count ?
2. Sao mình không phải khai báo biến Dem = 0 (từ sau Function)

Muội cám ơn
 
Upvote 0
Rng.Rows.Count để dự phòng trường hợp Rng nhiều hơn 1 cột.
Dem không phải là 1 biến, nó là Hàm, và không cần khai báo. Cũng như các tham số của hàm.
 
Upvote 0
Cám ơn sư huynh NDU, muội đã có một sản phẩm như ý phục vụ cho công việc của mình

Nhân tiện cho muội hỏi 02 việc
1. sao mình không viết Rng.count mà phải viết Rng.rows.count ?
2. Sao mình không phải khai báo biến Dem = 0 (từ sau Function)

Muội cám ơn
Câu 1: Giống như sư phụ ptm0412 đã nói ---> Ở trên tôi đã nói rằng:
Có nghĩa là code này chỉ viết ở mức đơn giản nhất cho bạn hiểu thôi. Đúng ra phải lường trước trường hợp Rng1, Rng2 bố trí theo 1 cột nhiều dòng hoặc 1 dòng nhiều cột ... thậm chí là nhiều dòng nhiều cột thì hàm cũng phải tính được
Câu 2: Vì Dem(....) as Long ---> Giá trị ban đầu của nó luôn luôn = 0 rồi còn gì
 
Upvote 0
Hàm của NDU ở #4 còn có thể tăng tốc theo lí thuyết mà nói!

Ta tìm DK1 ở Rng1 & DK2 ở Rng2

So 2 dòng tìm thấy & lấy ra dòng lớn hơn;

Bây chừ mới lập For . . .Next chỉ với ~ dòng còn lại

Có vẻ Code dài thêm ra, nhưng khi chạy đỡ rêm mình mẩy; Khà, khà, . . . . . --=0 --=0 --=0

Chọt NDU cái cho vui khi mọi người đã xong việc.
 
Upvote 0
Ta tìm DK1 ở Rng1 & DK2 ở Rng2

So 2 dòng tìm thấy & lấy ra dòng lớn hơn;

Bây chừ mới lập For . . .Next chỉ với ~ dòng còn lại

Có vẻ Code dài thêm ra, nhưng khi chạy đỡ rêm mình mẩy; Khà, khà, . . . . . --=0 --=0 --=0

Chọt NDU cái cho vui khi mọi người đã xong việc.
Để tăng tốc, ta dùng mảng là oách nhất. Có điều như em nói ở trên, viết ở mức đơn giản nhất nên em chưa viết theo kiểu này sư phụ à!
 
Upvote 0
Web KT

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

Back
Top Bottom