Help! Giúp viết code đánh dấu dữ liệu trùng nhau? (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

thanh78964

Thành viên mới
Tham gia
18/12/12
Bài viết
17
Được thích
0
Xin các cao thủ chỉ dùm.
Tôi có một vùng dữ liệu từ A2:C6 tại các cột:
Cột A: Họ tên
Cột B: Địa chỉ
Cột C: Nghề nghiệp
Bây giờ tôi muốn viết code VBA sao cho nếu dòng sau có họ tên, địa chỉ và nghề nghiệp giống các dòng trước thì tại cột D tương ứng đánh dấu X, ngược lại là "".
Mong được hồi âm. Thank!
 
Xin các cao thủ chỉ dùm.
Tôi có một vùng dữ liệu từ A2:C6 tại các cột:
Cột A: Họ tên
Cột B: Địa chỉ
Cột C: Nghề nghiệp
Bây giờ tôi muốn viết code VBA sao cho nếu dòng sau có họ tên, địa chỉ và nghề nghiệp giống các dòng trước thì tại cột D tương ứng đánh dấu X, ngược lại là "".
Mong được hồi âm. Thank!
Dùng hàm cũng được mà bạn.
 
Upvote 0
Cho xem hàm như thế nào mà chạy chậm.
 
Upvote 0
Xin các cao thủ chỉ dùm.
Tôi có một vùng dữ liệu từ A2:C6 tại các cột:
Cột A: Họ tên
Cột B: Địa chỉ
Cột C: Nghề nghiệp
Bây giờ tôi muốn viết code VBA sao cho nếu dòng sau có họ tên, địa chỉ và nghề nghiệp giống các dòng trước thì tại cột D tương ứng đánh dấu X, ngược lại là "".
Mong được hồi âm. Thank!

Gửi bạn file đính kèm.

Mọi lời lẽ đều có trong file đó.
 

File đính kèm

Upvote 0
SUMPRODUCT thường chỉ dùng để tính tổng, dùng cho cả cột thì nó hơi chậm.

Giải thuật: đếm các ô kể từ nó về trước, so sánh công ty và địa chỉ. Nếu số đếm lớn hơn 1 thì là nó bị trùng

=IF(COUNTIFS($A$3:$A3,$A3,$B$3:$B3,$B3,$D$3:$D3,$D3)>1,"X","")

Nếu là Excel 2003 thì không có hàm COUNTIFS, chịu khó dùng hàm AND và 3 con toán COUNTIF.

Bạn nói chuyện họ tên, địa chỉ, nghề nghiệp nhưng file bạn đưa ra (LOC THOIGIAN.xls) chỉ thấy công ty, địa chỉ, mặt hàng.

=== bổ túc đính chánh ===

Không thể dùng dùng hàm AND và 3 con toán COUNTIF vì số đếm tuy đúng nhưng chưa chắc đã cùng hàng. Có lẽ Excel 2003 bắt buộc phải dùng công thức mảng.
 
Lần chỉnh sửa cuối:
Upvote 0
SUMPRODUCT thường chỉ dùng để tính tổng, dùng cho cả cột thì nó hơi chậm.

Giải thuật: đếm các ô kể từ nó về trước, so sánh công ty và địa chỉ. Nếu số đếm lớn hơn 1 thì là nó bị trùng

=IF(COUNTIFS($A$3:$A3,$A3,$B$3:$B3,$B3,$D$3:$D3,$D3)>1,"X","")

Nếu là Excel 2003 thì không có hàm COUNTIFS, chịu khó dùng hàm AND và 3 con toán COUNTIF.

Bạn nói chuyện họ tên, địa chỉ, nghề nghiệp nhưng file bạn đưa ra (LOC THOIGIAN.xls) chỉ thấy công ty, địa chỉ, mặt hàng.

=== bổ túc đính chánh ===

Không thể dùng dùng hàm AND và 3 con toán COUNTIF vì số đếm tuy đúng nhưng chưa chắc đã cùng hàng. Có lẽ Excel 2003 bắt buộc phải dùng công thức mảng.
Đúng là dùng hàm thì đếm tuy đúng nhưng chưa chắc đã cùng hàng, vì vậy mình mới nhờ giúp mình viết code.
 
Upvote 0
Đúng là dùng hàm thì đếm tuy đúng nhưng chưa chắc đã cùng hàng, vì vậy mình mới nhờ giúp mình viết code.

Yêu cầu đọc lại cho kỹ. Tôi chỉ nói "Không thể dùng dùng hàm AND và 3 con toán COUNTIF". Dùng hàm COUNTIFS vẫn đúng như thường; ít nhất là đúng hơn cái ví dụ công thức mảng của bạn (1).

Bạn mang chủ quan đầu óc chỉ muốn dùng code VBA cho nên chỉ cần thấy người khác nhắc đến từ "vấn đề của hàm" là bạn hấp tấp nhảy vào liền.

Code VBA là chuyện dễ như trở lòng bàn tay. Dân chuyên nghiệp luôn luôn tìm cách dùng công thức thuần trước.

(1) Thật ra cái công thức mảng SUMPRODUCT của bạn mới sai trong trường hợp số đếm đúng nhưng không cùng hàng. Lúc tham chiếu vùng $B3:$Bn, bạn không khoá dòng số 3 ($3) cho nên công thức khai triển xuống bị sai.

(2) Nếu vấn đề do bạn dùng 2003 thì cũng nên nói rõ ra. Thiết nghĩ, với tình trạng chạy công thức mảng ì ạch như bạn diễn tả thì có lẽ bạn nên nâng cấp phiên bản Excel của mình cho rồi.
 
Lần chỉnh sửa cuối:
Upvote 0
Không ai giúp mình viết code à?

Giúp viết code hay là viết giùm?
Tôi kỵ viết giùm. Bạn cứ viết code, chỗ nào bí thì tôi giải.

Có hai cách giải:

1. Dùng sheet tạm:

1.a copy dữ liệu qua sheet tạm từng dòng một
1.b trong lúc copy, đặt thêm 1 cột, ghi số dòng của nó bên sheet đầu
1.c sort sheet tạm theo tiêu chuẩn 3 cột cần so sánh
1.d đặt một biến boolean tên là dauTien
1.e đọc dữ liệu đã sorted. Cứ mỗi lần gặp dữ liệu 3 cột mới thì set biến dauTien là True, nếu không thì set datTien là False
1.f Nếu dauTien là False thì dò theo số dòng đã ghi trước đây, trở lại sheet nguyên thuỷ đầu, đánh dấu "X"
1.g Tiếp tục cho đến khi đọc xong sheet tạm
1.h Xoá sheet tạm

2. Dùng Dictionary Object:

2.a lập dictionary object
2.b đọc từng dòng dữ liệu, cộng 3 cột cần dò thành 1 chuỗi
2.c tìm giá trị của chuỗi trong dictionary:
2.c.1 nếu không tìm được thì nó là trị đầu tiên, ghi vào dictionary và nhảy qua bước 2.d
2.c.2 nếu tìm được thì nó không phải là trị đầu tiên, ghi "X" vào dòng này
2.d tiếp tục cho đến hết bảng dữ liệu
2.e giải thoát dictionary.
 
Upvote 0
Giúp viết code hay là viết giùm?
Tôi kỵ viết giùm. Bạn cứ viết code, chỗ nào bí thì tôi giải.

Có hai cách giải:

1. Dùng sheet tạm:

1.a copy dữ liệu qua sheet tạm từng dòng một
1.b trong lúc copy, đặt thêm 1 cột, ghi số dòng của nó bên sheet đầu
1.c sort sheet tạm theo tiêu chuẩn 3 cột cần so sánh
1.d đặt một biến boolean tên là dauTien
1.e đọc dữ liệu đã sorted. Cứ mỗi lần gặp dữ liệu 3 cột mới thì set biến dauTien là True, nếu không thì set datTien là False
1.f Nếu dauTien là False thì dò theo số dòng đã ghi trước đây, trở lại sheet nguyên thuỷ đầu, đánh dấu "X"
1.g Tiếp tục cho đến khi đọc xong sheet tạm
1.h Xoá sheet tạm

2. Dùng Dictionary Object:

2.a lập dictionary object
2.b đọc từng dòng dữ liệu, cộng 3 cột cần dò thành 1 chuỗi
2.c tìm giá trị của chuỗi trong dictionary:
2.c.1 nếu không tìm được thì nó là trị đầu tiên, ghi vào dictionary và nhảy qua bước 2.d
2.c.2 nếu tìm được thì nó không phải là trị đầu tiên, ghi "X" vào dòng này
2.d tiếp tục cho đến hết bảng dữ liệu
2.e giải thoát dictionary.
Tôi không rành về code mới nhờ viết giúp, nếu biết thì tôi tự làm cần gì phải nhờ. Còn hàm thì tự tôi có thể làm đươc.
 
Upvote 0
Tôi không rành về code mới nhờ viết giúp, nếu biết thì tôi tự làm cần gì phải nhờ. Còn hàm thì tự tôi có thể làm đươc.

Như đã nói, tôi không viết giùm. Xin trân trọng trao lại cho bạn nào rảnh rỗi hơn.

Xin lỗi đã làm mất thì giờ của quý vị.
 
Upvote 0

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

Back
Top Bottom