1 cáchNhờ anh chị và các bạn viết dùm đoạn code cảnh báo nhập dữ liệu. Yêu cầu như trong file đính kèm.
Chân thành cảm ơn!
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.CountLarge > 1 Then Exit Sub
If Intersect(Target, Range("D3:D3000")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Application.EnableEvents = True
End Sub
Sub abc()
Dim i&, j&
Application.ScreenUpdating = False
For j = 3 To 15
For i = 3 To 509
If Cells(i, j).Value > Cells(i, j + 1).Value And Cells(i, j + 1) <> 0 Then
MsgBox " Xem lai DL nhap!" & " " & Cells(i, j + 1).Address
Cells(i, j + 1).ClearContents: Cells(i, j + 1).Select
End If
Next
Next
Application.ScreenUpdating = True
End Sub
1 cách
+ Cho cho Module:
PHP:Sub abc() Dim i&, j& Application.ScreenUpdating = False For j = 3 To 15 For i = 3 To 500 If Cells(i, j).Value > Cells(i, j + 1).Value And Cells(i, j + 1) <> 0 Then MsgBox " Xem lai DL nhap!" & Cells(i, j + 1).Address Cells(i, j + 1).ClearContents: Cells(i, j + 1).Select End If Next Next Application.ScreenUpdating = True End Sub
+ Code Sheet:Cám ơn Bạn nhiều.
Với yêu cầu đầu tiên code đã đáp ứng tốt. bạn có thể code thêm yêu cầu thứ 2 dùm mình đước không
Nếu sử dụng kỳ hiện tại Cột P (giá trị ở cột P = kỳ sau - kỳ trước ) mà lớn hơn 1,5 lần hoặc gấp đôi kỳ trước (cột S) thì sẽ có cảnh báo kiểm tra ghi chỉ số hoặc nhập dữ liệu .
Chân thành cảm ơn bạn!
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.CountLarge > 1 Then Exit Sub
If Intersect(Target, Range("C3:O509")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Call abc
Call xyz
Application.EnableEvents = True
End Sub
Sub abc()
Dim i&, j&
Application.ScreenUpdating = False
For j = 3 To 15
For i = 3 To Cells(Rows.Count, 1).End(3).Row
If Cells(i, j).Value > Cells(i, j + 1).Value And Cells(i, j + 1) <> 0 Then
MsgBox " Xem lai DL nhap!" & " " & Cells(i, j + 1).Address
Cells(i, j + 1).ClearContents: Cells(i, j + 1).Select
End If
Next
Next
Application.ScreenUpdating = True
End Sub
Sub xyz()
Dim i&
Application.ScreenUpdating = False
For i = 3 To Cells(Rows.Count, 1).End(3).Row
If Cells(i, 16).Value > 1.5 * Cells(i, 19).Value Then
MsgBox " Xem lai gia tri:" & vbLf & Cells(i, 16).Address & vbLf & Cells(i, 19).Address
End If
Exit Sub
Next
Application.ScreenUpdating = True
End Sub
Cám ơn bạn nhiều.Bạn thử:
PHP:Sub abc2() Dim i&, j& Application.ScreenUpdating = False For j = 3 To 15 For i = 3 To 500 If Cells(i, j).Value > Cells(i, j + 1).Value And Cells(i, j + 1) <> 0 Then MsgBox " Xem lai DL nhap!" & " " & Cells(i, j + 1).Address Cells(i, j + 1).ClearContents: Cells(i, j + 1).Select End If If Cells(i, 16).Value > 1.5 * Cells(i, 19).Value Then MsgBox " Xem lai gia tri:" & vbLf & Cells(i, 16).Address & vbLf & Cells(i, 19).Address Exit Sub End If Next Next Application.ScreenUpdating = True End Sub
Tôi đã sửa lại, tất cả trong bài #4.Cám ơn bạn nhiều.
Chúc ngủ ngon!
Cám ơn bạn nhiều, để mình test lại nhé!Tôi đã sửa lại, tất cả trong bài #4.
Lần này thì chuẩn rồi bạn, không còn lỗi nữa. Chân thành cảm ơn bạn!Tôi đã sửa lại, tất cả trong bài #4.
Không phải cái gì cũng phải cần đến code, chỉ cần làm đơn giản vầy thôi.Nhờ anh chị và các bạn viết dùm đoạn code cảnh báo nhập dữ liệu. Yêu cầu như trong file đính kèm.
Chân thành cảm ơn!
Bạn vui lòng kiểm tra lại dùm mình, trường hợp thứ 2 Nếu sử dụng kỳ hiện tại Cột P (giá trị ở cột P = kỳ sau - kỳ trước ) mà lớn hơn 1,5 lần hoặc gấp đôi kỳ trước (cột S) thì sẽ có cảnh báo kiểm tra ghi chỉ số hoặc nhập dữ liệu . code chỉ đáp ứng dòng đầu tiên trong bảng dữ liệu, từ dòng thứ 2 trở đi không đúng, hôm qua mình cũng chỉ test dòng đầu tiên.Tôi đã sửa lại, tất cả trong bài #4.
Tôi nghĩ trường hợp thứ 2 của bạn, dùng Code dưới đây sẽ đơn giản và liệt kê được tất cả các trường hợp không thỏa mãnBạn vui lòng kiểm tra lại dùm mình, trường hợp thứ 2 Nếu sử dụng kỳ hiện tại Cột P (giá trị ở cột P = kỳ sau - kỳ trước ) mà lớn hơn 1,5 lần hoặc gấp đôi kỳ trước (cột S) thì sẽ có cảnh báo kiểm tra ghi chỉ số hoặc nhập dữ liệu . code chỉ đáp ứng dòng đầu tiên trong bảng dữ liệu, từ dòng thứ 2 trở đi không đúng, hôm qua mình cũng chỉ test dòng đầu tiên.
Cám ơn bạn nhiều!
Sub xyz2()
Dim i&
Application.ScreenUpdating = False
For i = 3 To Cells(Rows.Count, 1).End(3).Row
If Cells(i, 16).Value > 1.5 * Cells(i, 19).Value Then
Debug.Print Cells(i, 16).Address & "-" & Cells(i, 19).Address
End If
Next
Application.ScreenUpdating = True
End Sub
Cám ơn bạn. Mình đã test riêng từng sub trong bài #4 thì đáp ứng đúng yếu cầu.Tôi nghĩ trường hợp thứ 2 của bạn, dùng Code dưới đây sẽ đơn giản và liệt kê được tất cả các trường hợp không thỏa mãn
[/php]
Trở lại bài #4, bạn thay Sub xyz bằng Sub xyz2Cám ơn bạn. Mình đã test riêng từng sub trong bài #4 thì đáp ứng đúng yếu cầu.
nhưng nếu gọi 2 sub tròng cùng sự kiện Worksheet_Change thì sẽ có 1 trong 2 sub chạy không đúng ( tùy mình gọi sub nào trước). Nếu có thể bạn fix lại dùm mình.
Chân thành cảm ơn bạn!
Không được bạn ạ, Nếu gọi sub abc trước thì sub xyz2 sẽ không chạy, cũng giống như trường hợp sub xyz vậy.Trở lại bài #4, bạn thay Sub xyz bằng Sub xyz2
Bạn thử lại nhé.
Tôi nói với bạn là chép Sub xyz2 dán vào Sub xyz.Không được bạn ạ, Nếu gọi sub abc trước thì sub xyz2 sẽ không chạy, cũng giống như trường hợp sub xyz vậy.
Mình không rành về code nhưng mình thử msgbox Cells(i, 16) lúc nào cũng trả về $P$3 và $S$3
Dù sao cũng cám ơn bạn rất nhiều.!
mình đã làm như bạn nóiTôi nói với bạn là chép Sub xyz2 dán vào Sub xyz.
Mình không rành về code nhưng mình thử msgbox Cells(i đã viết:Ý mình không phải là cái msgbox trong code của bạn, Ý mình là cho dù mình nhập liệu tới dòng nào đi nữa mình thay cái Msgbox của bạn bằng cái msg box của mình nó đều trả về giá trị của ô đầu tiên ở cột P (cụ thể là ô P3).
Có khi nào tại số lượng sheet trong file mình đang làm nó nhiều quá nên kết quả không đúng không?
File mình nhờ bạn giúp là sheet mình tách ra từ file mình đang làm không khác gì với file mình đã up.
Mình sẽ kiểm tra lại lần nữa xem sao.
Cám ơn bạn!
Bạn gửi File có hình chụp lên đây tôi xem nó thế nào nhé.