Cần giúp code thông báo dữ liệu trùng ... (1 người xem)

Liên hệ QC

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

thanh tong

Thành viên hoạt động
Tham gia
27/5/10
Bài viết
122
Được thích
11
Chào các bạn!
Mình nhờ các bạn giúp hộ mình đoạn code hiện thông báo dữ liệu trùng tại vị trí ..và nhấn OK để chỉnh sửa dữ liệu vừa nhập( trùng trên 1 dòng). Các bạn xem file mỉnh gửi và giúp mình nhé.
Cảm ơn các bạn.
 

File đính kèm

Chào các bạn!
Mình nhờ các bạn giúp hộ mình đoạn code hiện thông báo dữ liệu trùng tại vị trí ..và nhấn OK để chỉnh sửa dữ liệu vừa nhập( trùng trên 1 dòng). Các bạn xem file mỉnh gửi và giúp mình nhé.
Cảm ơn các bạn.
Yêu cầu của bạn có thể sử dụng Data Validation được mà, chỉ là Validation không thông báo được vị trí trùng thôi.

Nếu muốn sử dụng code thì bạn có thể sử dụng phương thức Find với sự kiện Worksheet_Change. Mỗi lần nhập 1 ô thì tìm trong vùng Intersect(Target.EntireRow,[C:L]) xem có giá trị nào giống với giá trị vừa nhập không, nếu có ô nào đó có giá trị giống giá trị vừa nhập (nhưng địa chỉ khác địa chỉ của Target) thì thông báo.

Mình gợi ý hướng giải quyết, bạn thử viết thành code xem sao.
 
Upvote 0
Mình không thạo về VBA nên mình muốn các bạn giúp mình đoạn code đó,nếu dùng Validation thì mình cũng biêt nhưng nó không có thông báo vị trí cột trùng đã có trước trong bảng.
 
Upvote 0
Mình không thạo về VBA nên mình muốn các bạn giúp mình đoạn code đó,nếu dùng Validation thì mình cũng biêt nhưng nó không có thông báo vị trí cột trùng đã có trước trong bảng.
Vậy thì bạn sử dụng code này cho Sheet1 nhé:
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
If Target.Count > 1 Or Intersect(Target, [C4:L12]) Is Nothing Then Exit Sub
If Target <> "" Then
Set Rng = Intersect(Target.EntireRow, [C:L]).Find(Target, , , xlWhole)
If Rng.Address <> Target.Address Then
MsgBox "Da nhap gia tri " & Target & " tai o " & Rng.Address(0, 0)
Target.ClearContents: Target.Select
End If
End If
End Sub[/GPECODE]
 
Upvote 0
Mình không thạo về VBA nên mình muốn các bạn giúp mình đoạn code đó,nếu dùng Validation thì mình cũng biêt nhưng nó không có thông báo vị trí cột trùng đã có trước trong bảng.
Dùng thử Validation như vầy xem, nhưng nếu hàng ngàn dòng, hàng trăm cột thì không nên dùng.
 

File đính kèm

Upvote 0
Code của bạn Nghĩa Phúc gần đúng ý của mình rồi chỉ có điều mình muốn nó hiện lên thông báo là ở cột thư mấy của bảng đó thôi chứ không phải là cột của sheet.Tức là cái số mình đã gi ở hàng trên cùng của bảng dữ liệu ấy (Tên của cột dữ liệu:1,2,3,4...hoặc A,B,C,D..).
Còn dùng Validation như của bạn Ba tê thì chưa đúng ý mình.
 
Lần chỉnh sửa cuối:
Upvote 0
Code của bạn Nghĩa Phúc gần đúng ý của mình rồi chỉ có điều mình muốn nó hiện lên thông báo là ở cột thư mấy của bảng đó thôi chứ không phải là cột của sheet.Tức là cái số mình đã gi ở hàng trên cùng của bảng dữ liệu ấy (Tên của cột dữ liệu:1,2,3,4...hoặc A,B,C,D..).
Còn dùng Validation như của bạn Ba tê thì chưa đúng ý mình.
Chỉ đơn giản là thay đổi lại nội dung của MsgBox thôi mà. Bạn thay dòng lệnh
PHP:
MsgBox "Da nhap gia tri " & Target & " tai o " & Rng.Address(0, 0)
bởi dòng lệnh
PHP:
MsgBox "Da nhap gia tri " & Target & " tai cot " & Intersect(Rng.EntireColumn, [C3:L3])
 
Upvote 0
Ồ! đúng ý mình rồi.
Cảm ơn bạn nhiều lắm
 
Upvote 0
Ngoài lề một chút: Bài toán này có vẻ giống bài toán phân công giám thị coi thi hay là bài toán xếp thời khóa biểu ấy nhỉ?! Hai bài toán này cũng được đề cập khá nhiều trên GPE, bạn có thể tìm và tham khảo.
 
Upvote 0
Đúng vậy bạn ạ nhưng mình test thì có vấn đề rồi, một số ô không hoạt động hơn nữa một số dòng chỉ nhập từ trái qua phải mới có thông báo. Bạn xem lại hộ mình nhé
 

File đính kèm

Upvote 0
Đúng vậy bạn ạ nhưng mình test thì có vấn đề rồi, một số ô không hoạt động hơn nữa một số dòng chỉ nhập từ trái qua phải mới có thông báo. Bạn xem lại hộ mình nhé
Bạn sửa lại câu lệnh này một chút:
Mã:
Set Rng = Intersect(Target.EntireRow, [C:L]).Find(Target, , , xlWhole)
thành:
Mã:
Set Rng = Intersect(Target.EntireRow, [C:L]).Find(Target, [COLOR=#ff0000][B]Target[/B][/COLOR], , xlWhole)
 
Upvote 0
Mình mới test qua thấy OK rồi.
Nhưng lại mới phát sinh một vấn đề mới đó là khi mình áp dụng thì các ô có dữ liệu trùng đó nó không phải là mình trực tiếp nhập vào mà nó được liên kết từ ô khác do nên không hoạt động code được. Bạn có thể giải quyết vấn đề này giúp mình được không?
 
Lần chỉnh sửa cuối:
Upvote 0
Mình mới test qua thấy OK rồi.
Nhưng lại mới phát sinh một vấn đề mới đó là khi mình áp dụng thì các ô có dữ liệu trùng đó nó không phải là mình trực tiếp nhập vào mà nó được liên kết từ ô khác do nên không hoạt động code được. Bạn có thể giải quyết vấn đề này giúp mình được không?
Cái vụ không phải nhập trực tiếp mà là liên kết từ ô khác thì đương nhiên là anh chàng Worksheet_Change bó tay rồi. Khi đó muốn kiểm tra thì phải có sub riêng và gọi nó mỗi khi muốn kiểm tra. Mà cứ nghĩ tới code cho phức tạp chứ có khi Conditional Formatting giải quyết vụ này lại êm đẹp gọn gàng hơn đấy. Chỉ cần Conditional Formatting và hàm CountIf thôi mà. Bạn thử xem!
 
Upvote 0

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

Back
Top Bottom