Đếm bỏ qua các giá trị trùng nhau.

lam4422

Thành viên mới
Tham gia ngày
3 Tháng mười hai 2008
Bài viết
21
Được thích
2
Điểm
665
Giả sử cột B chứa ngày dạng dd/mm/yyyy, Nếu chọn tháng 04/2019 thêm vào công thức:
Mã:
=COUNT(1/(MATCH(A1:A100,IF(SEARCH("T4",A1:A100)*(Text(B1:B100,"mm/yyyy")="04/2019"),A1:A100),)=ROW(1:100)))
Kết thúc bằng Ctrl+Shift+Enter.

Thân
Anh cho em hỏi cái phần = Row(1:100) có tác dụng gì vậy. Có cách nào để thu nhỏ vùng này không. Em sợ sau này dữ liệu em nhiều lên vài trăm hoặc nghìn dòng mà chọn hết cả 1 vùng lớn thế sẽ gây chậm file.
Các ô A1:A100 thì em sẽ thay bằng 1 cái name range động nên dữ liệu phát sinh đến đâu thì vùng đếm sẽ chạy đến đấy.
 
Tham gia ngày
10 Tháng mười 2017
Bài viết
2,835
Được thích
8,308
Điểm
360
Nơi ở
Sài Gòn
Anh cho em hỏi cái phần = Row(1:100) có tác dụng gì vậy. Có cách nào để thu nhỏ vùng này không. Em sợ sau này dữ liệu em nhiều lên vài trăm hoặc nghìn dòng mà chọn hết cả 1 vùng lớn thế sẽ gây chậm file.
Các ô A1:A100 thì em sẽ thay bằng 1 cái name range động nên dữ liệu phát sinh đến đâu thì vùng đếm sẽ chạy đến đấy.
Dùng Name để tạo Vùng động co giản cũng là cách hay cho dữ liệu <1.000 dòng.

Với công thức COUNT(1/ <Điều kiện lọc dữ liệu trùng= ROW(1:100)> ), hàm ROW(1:100) là 1 Mảng với ý nghĩa chỉ tạo ra "số thứ tự dòng" từ 1 đến 100, nó không bị "lệ thuộc" vào số dòng bạn có thực là bao nhiêu, miễn sao nó bằng hoặc lớn hơn là được. Ví dụ: Nếu số dòng thực của bạn là 125 dòng thì bạn có thể tạo ra stt: ROW(1:125), hoặc ROW(1:150), hoặc ROW(1:200), tức số 125 (hoặc 150, hoặc 200)>=125.

Các công thức trên đều là công thức mảng (tính cho toàn bộ Vùng hiện hữu, rồi lưu và tính tiếp trong bộ nhớ), cho nên hễ dữ liệu lên hơn 1.000 dòng sẽ làm cho trì trệ máy. Khi buộc lòng phải xử lý dữ liệu trên 1.000 dòng, bạn nên nghĩ đến:
  1. Tạo cột phụ: để loại dữ liệu trùng theo như yêu cầu quy định.
  2. Dùng VBA. (Khả năng này tốt hơn với dữ liệu lớn, nhưng tôi lại không biết làm).
Vậy hén!

Thân
 
Lần chỉnh sửa cuối:

lam4422

Thành viên mới
Tham gia ngày
3 Tháng mười hai 2008
Bài viết
21
Được thích
2
Điểm
665
Dùng Name để tạo Vùng động co giản cũng là cách hay cho dữ liệu <1.000 dòng.

Với công thức COUNT(1/ <Điều kiện lọc dữ liệu trùng= ROW(1:100)> ), hàm ROW(1:100) là 1 Mảng với ý nghĩa chỉ tạo ra "số thứ tự dòng" từ 1 đến 100, nó không bị "lệ thuộc" vào số dòng bạn có thực là bao nhiêu, miễn sao nó bằng hoặc lớn hơn là được. Ví dụ: Nếu số dòng thực của bạn là 125 dòng thì bạn có thể tạo ra stt: ROW(1:125), hoặc ROW(1:150), hoặc ROW(1:200), tức số 125 (hoặc 150, hoặc 200)>=125.

Các công thức trên đều là công thức mảng (tính cho toàn bộ Vùng hiện hữu, rồi lưu và tính tiếp trong bộ nhớ), cho nên hễ dữ liệu lên hơn 1.000 dòng sẽ làm cho trì trệ máy. Khi buộc lòng phải xử lý dữ liệu trên 1.000 dòng, bạn nên nghĩ đến:
  1. Tạo cột phụ: để loại dữ liệu trùng theo như yêu cầu quy định.
  2. Dùng VBA. (Khả năng này tốt hơn với dữ liệu lớn, nhưng tôi lại không biết làm).
Vậy hén!

Thân
Anh ơi vậy dùng hàm Sumproduct có được không anh nhỉ, em thử kết hợp mà nó toàn báo lỗi. Thêm nữa phần Row có cách nào để nó cũng động đc ko anh.

Tham khảo công thức:
Mã:
=SUMPRODUCT(1/COUNTIF($A$1:$A$12,$A$1:$A$12)*(ISNUMBER(SEARCH("T4",$A$1:$A$12))))
 

tieuthubuongbinh

Học hoài vẫn dốt
Tham gia ngày
3 Tháng chín 2008
Bài viết
459
Được thích
298
Điểm
710
Nơi ở
Dist. 10
  1. Dùng VBA. (Khả năng này tốt hơn với dữ liệu lớn, nhưng tôi lại không biết làm).
Vậy hén!

Thân
Dạo này không nhờ vả gì anh được là vì dữ liệu của em toàn >10k dòng.
Em cũng chỉ thích học hàm nhưng thật sự phải công nhận VBA nó tiện ích.
 

N.D.K

Thành viên mới
Tham gia ngày
6 Tháng tám 2019
Bài viết
3
Được thích
0
Điểm
13
Tuổi
29
Hi các anh chị,

Mình là thành viên mới, đang gặp khó không biết xài công thức nào cho 1 bảng tính mà muốn lấy các giá trị trong một cột có cùng tham số? Mình dùng index+match nhưng chỉ ra 1 giá trị đầu tiên, còn các giá trị bên dưới ko ra dc. Mình có tham số (0143/2019) và mình muốn lấy ra các số HĐ (cái nào trùng chỉ lấy 1 lần ah). Mong anh chị có thể giúp đỡ mình xin cảm ơn ah !

SHIPMENT OUTBOUND NO. OUBOUND DATEIB JOBFILES NO.BACK UP FILESMATERIAL INBOUND DATEMATERIAL NO.CONTRACT NUMBER
0143/20197-May-191766-Apr-19X10211669644KV/HĐKNQ.TMS.2019
0143/20197-May-191766-Apr-19X10211669644KV/HĐKNQ.TMS.2019
0143/20197-May-191766-Apr-19X10211669544KV/HĐKNQ.TMS.2019
0143/20197-May-191766-Apr-19LTSPCWO97044KV/HĐKNQ.TMS.2019
0143/20197-May-191786-Apr-19LTSPCWO96845KV/HĐKNQ.TMS.2019
0143/20197-May-191786-Apr-19LTSPCWO96845KV/HĐKNQ.TMS.2019
0143/20197-May-191786-Apr-19X10211669545KV/HĐKNQ.TMS.2019
0143/20197-May-191786-Apr-19X10211669545KV/HĐKNQ.TMS.2019
0143/20197-May-191796-Apr-19X10219917346KV/HĐKNQ.TMS.2019
0143/20197-May-191796-Apr-19LTSTE3T54446KV/HĐKNQ.TMS.2019
 
Tham gia ngày
10 Tháng mười 2017
Bài viết
2,835
Được thích
8,308
Điểm
360
Nơi ở
Sài Gòn
Hi các anh chị,

Mình là thành viên mới, đang gặp khó không biết xài công thức nào cho 1 bảng tính mà muốn lấy các giá trị trong một cột có cùng tham số? Mình dùng index+match nhưng chỉ ra 1 giá trị đầu tiên, còn các giá trị bên dưới ko ra dc. Mình có tham số (0143/2019) và mình muốn lấy ra các số HĐ (cái nào trùng chỉ lấy 1 lần ah). Mong anh chị có thể giúp đỡ mình xin cảm ơn ah !

SHIPMENT OUTBOUND NO.OUBOUND DATEIB JOBFILES NO.BACK UP FILESMATERIAL INBOUND DATEMATERIAL NO.CONTRACT NUMBER
0143/20197-May-191766-Apr-19X10211669644KV/HĐKNQ.TMS.2019
0143/20197-May-191766-Apr-19X10211669644KV/HĐKNQ.TMS.2019
0143/20197-May-191766-Apr-19X10211669544KV/HĐKNQ.TMS.2019
0143/20197-May-191766-Apr-19LTSPCWO97044KV/HĐKNQ.TMS.2019
0143/20197-May-191786-Apr-19LTSPCWO96845KV/HĐKNQ.TMS.2019
0143/20197-May-191786-Apr-19LTSPCWO96845KV/HĐKNQ.TMS.2019
0143/20197-May-191786-Apr-19X10211669545KV/HĐKNQ.TMS.2019
0143/20197-May-191786-Apr-19X10211669545KV/HĐKNQ.TMS.2019
0143/20197-May-191796-Apr-19X10219917346KV/HĐKNQ.TMS.2019
0143/20197-May-191796-Apr-19LTSTE3T54446KV/HĐKNQ.TMS.2019
Giả sử:
I2="0143/2019"
Thử:
Mã:
J3=IFERROR(INDEX($G$3:$G$100,MATCH(,INDEX(COUNTIF($J$2:$J2,$G$3:$G$100)+($A$3:$A$100<>$I$2),),)),"")
Enter, fill xuống.

Thân
 

File đính kèm

toto1601

Thành viên mới
Tham gia ngày
20 Tháng chín 2012
Bài viết
1
Được thích
0
Điểm
363
Tuổi
8
Công thức này thực chất là của bạn nginh, mình chỉ sửa chút xíu để đúng yêu cầu của chủ Top. Nếu có ô rỗng có lẽ thế này là ổn:
Mã:
=SUMPRODUCT((B$1:B$11>=9%)*(B$1:B$11<=10%)*(D$1:D$11="Ngan han")*(MATCH(A$1:A$11&"",A$1:A$11&"",0)=ROW($1:$11)))
Cảm ơn bạn đã góp ý.
Bạn làm sao để đoạn =ROW($1:$11) này có thể tăng lên khi chèn thêm dòng
 

maybis

Thành viên mới
Tham gia ngày
7 Tháng một 2012
Bài viết
4
Được thích
1
Điểm
365
Tuổi
29
cái này nói không biết bao nhiêu lần trên diển đàn rồi, bạn phải search trước khi hỏi chứ (Đếm không trùng)
Công thức tổng quát là:
=SUMPRODUCT(1/COUNTIF(Vung,Vung))
Với Vung là địa chỉ vùng chứ dử liệu, ví dụ:
=SUMPRODUCT(1/COUNTIF(A1:A7,A1:A7))
Hàm này khi trong vùng có giá trị rỗng sẽ bị lỗi. Mình có hàm này vẫn đếm được và bỏ qua ô rỗng
SUMPRODUCT((Vung<>"")/COUNTIF(Vung,Vung&""))
 

nhimoc15021703

Thành viên mới
Tham gia ngày
9 Tháng tư 2020
Bài viết
1
Được thích
0
Điểm
13
Tuổi
27
Áp dụng vào file thực tế kết quả sai thật. Để tìm công thức khác cho bạn
Có bạn nào giải thích hộ em. Tại sao khi với ít trường hợp công thức trên lại chính xác ko ạ?
cho mình hỏi cách để đếm ví dụ kepk WR189 có bao nhiêu số lượng và các mặt hàng khác cũng trùng nhau nhưng ko cần đếm tay ạ. em cám ơn các anh chị
 

File đính kèm

n0thing1988

Thành viên tích cực
Tham gia ngày
30 Tháng chín 2013
Bài viết
1,305
Được thích
870
Điểm
560
cho mình hỏi cách để đếm ví dụ kepk WR189 có bao nhiêu số lượng và các mặt hàng khác cũng trùng nhau nhưng ko cần đếm tay ạ. em cám ơn các anh chị
Đơn giản nhất để giải quyết các bài đếm bỏ trùng nhau, & cộng tổng thì bạn dùng pivotable nhé
 

Hoàng Tuấn 868

Thành viên thường trực
Tham gia ngày
9 Tháng mười một 2019
Bài viết
228
Được thích
153
Điểm
45

File đính kèm

Lần chỉnh sửa cuối:
Top Bottom