Cảnh báo mã IMEI đã nhập trong 2 vùng dữ liệu

Liên hệ QC

notabin

Thành viên mới
Tham gia
8/10/06
Bài viết
4
Được thích
0
Chào các bạn,

Mình đang muôn làm báo cáo nhập số IMEI trên vùng dữ liệu C2: G21 va C25: G45. Yêu cầu cảnh báo không được nhập trùng số IMEI đã nhập. Dùng if .. then như sau quê mùa quá mà lại không dùng được cho số ô lớn (khoảng 200 ô).

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("C5").Value <> 0 And Range("C5").Value = Range("C2").Value _
Or Range("C5").Value <> 0 And Range("C5").Value = Range("C3").Value _
Or Range("C5").Value <> 0 And Range("C5").Value = Range("C4").Value Then
MsgBox "Ma So IMEI " & Range("C5").Value & " da nhap roi. Vui long nhap lai!", vbExclamation, "Du lieu khong hop le!"
Range("c5").ClearContents
Range("c5").Select
Else
...
end sub

Các bạn chỉ giúp mình với. Cảm ơn rất nhiều.
 
Bạn đưa file lên luôn được không? Nhìn đoạn code mà không biết cấu trúc dữ liệu như thế nào thì mình cũng không biết sửa như thế nào cả?!
 
Upvote 0
Chào các bạn,

Mình đang muôn làm báo cáo nhập số IMEI trên vùng dữ liệu C2: G21 va C25: G45. Yêu cầu cảnh báo không được nhập trùng số IMEI đã nhập. Dùng if .. then như sau quê mùa quá mà lại không dùng được cho số ô lớn (khoảng 200 ô).

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("C5").Value <> 0 And Range("C5").Value = Range("C2").Value _
Or Range("C5").Value <> 0 And Range("C5").Value = Range("C3").Value _
Or Range("C5").Value <> 0 And Range("C5").Value = Range("C4").Value Then
MsgBox "Ma So IMEI " & Range("C5").Value & " da nhap roi. Vui long nhap lai!", vbExclamation, "Du lieu khong hop le!"
Range("c5").ClearContents
Range("c5").Select
Else
...
end sub

Các bạn chỉ giúp mình với. Cảm ơn rất nhiều.

bạn tham khảo nhé :

PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error GoTo EndSub
    If Intersect(Target, Range("C2:C10000")) Is Nothing Then Exit Sub
    If Target = "" Then Exit Sub
    If Target.Columns.Count * Target.Rows.Count <> 1 Then Exit Sub
    If WorksheetFunction.Match(Target, Range("C2:C" & Target.Row - 1), True) Then
        MsgBox "Ma So IMEI " & Target & " da nhap roi. Vui long nhap lai!", vbExclamation, "Du lieu khong hop le!"
        Target.ClearContents
        Target.Select
    End If
EndSub:
End Sub
Thân!
 
Upvote 0
Có khi yêu cầu này có thể dùng Validation để xử lý được đấy! Gọn nhẹ, lại có thể cảnh báo bằng tiếng Việt có dấu
Không biết bạn đã biết đến chức năng này chưa?
 
Upvote 0
Tránh nhập trùng: Cảnh báo mã IMEI đã nhập

Chào các bạn,

Mình đang muôn làm báo cáo nhập số IMEI trên vùng dữ liệu C2: G21 va C25: G45. Yêu cầu cảnh báo không được nhập trùng số IMEI đã nhập. Dùng if .. then như sau quê mùa quá mà lại không dùng được cho số ô lớn (khoảng 200 ô).
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("C5").Value <> 0 And Range("C5").Value = Range("C2").Value _
Or Range("C5").Value <> 0 And Range("C5").Value = Range("C3").Value _
Or Range("C5").Value <> 0 And Range("C5").Value = Range("C4").Value Then
MsgBox "Ma So IMEI " & Range("C5").Value & " da nhap roi. Vui long nhap lai!", vbExclamation, "Du lieu khong hop le!"
Range("c5").ClearContents
Range("c5").Select
Else
...
end sub
Các bạn chỉ giúp mình với. Cảm ơn rất nhiều.


Chào các bạn,
Mình đã tìm ra giải pháp tránh phải viết lệnh dài cho 200 ô nhưng chưa được hoàn thiện
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If WorksheetFunction.CountIf(Range("$C$15:$G$56"), ActiveCell) > 1 Then
With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Font
        .Color = -16711681
        .TintAndShade = 0
    End With
MsgBox "So IMEI " & ActiveCell.Value & " da nhap roi. Vui long nhap lai!", vbExclamation, "Du lieu khong hop le!"
ActiveCell.ClearContents
With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Font
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
    End With
End If
End Sub
Vì cái Worksheet_Change nó chỉ có tác dụng khi copy và paste còn nhập trực tiếp rồi enter thì không có tác dụng. Nếu đổi sang worksheet_selêctionchang thì cũng không có hiệu lực khi nhấn enter sau nhập. Chỉ có hiệu lực khi chọn vào ô nhập xong.
Mình muốn sau khi nhập => enter là có tác dụng ngay. Ai có thể giúp mình được không? Cảm ơn nhiều.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Có khi yêu cầu này có thể dùng Validation để xử lý được đấy! Gọn nhẹ, lại có thể cảnh báo bằng tiếng Việt có dấu
Không biết bạn đã biết đến chức năng này chưa?

Trong Validation làm thế nào để kiểm tra xem các ô có trùng nhau không hả bạn, mình vào thử mà chỉ thấy có between rồi greater, less than.. không hà.
 
Upvote 0
Trong Validation làm thế nào để kiểm tra xem các ô có trùng nhau không hả bạn, mình vào thử mà chỉ thấy có between rồi greater, less than.. không hà.
Có lẽ bạn hiểu sai vấn đề thì phải: Validation không dùng để KIỂM TRA XEM CÁC CELL CÓ TRÙNG HAY KHÔNG NẾU NHƯ NÓ ĐÃ ĐƯỢC NHẬP TRƯỚC ---> Nếu là yêu cầu này thì phải Conditional Formating
Còn ở đây, tác giả có nói rằng:
Chào các bạn,

Mình đang muôn làm báo cáo nhập số IMEI trên vùng dữ liệu C2: G21 va C25: G45. Yêu cầu cảnh báo không được nhập trùng số IMEI đã nhập
Tức là đang nhập liệu, nếu trùng thì cảnh báo ---> Cái này đương nhiên Validation thừa sức làm được
Bạn hiểu chứ?
Trên GPE thiếu gì loại bài toán dạng này ---> Bạn tìm xem!
 
Upvote 0
Tránh nhập trùng: Cảnh báo mã IMEI đã nhập

bạn tham khảo nhé :

PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error GoTo EndSub
    If Intersect(Target, Range("C2:C10000")) Is Nothing Then Exit Sub
    If Target = "" Then Exit Sub
    If Target.Columns.Count * Target.Rows.Count <> 1 Then Exit Sub
    If WorksheetFunction.Match(Target, Range("C2:C" & Target.Row - 1), True) Then
        MsgBox "Ma So IMEI " & Target & " da nhap roi. Vui long nhap lai!", vbExclamation, "Du lieu khong hop le!"
        Target.ClearContents
        Target.Select
    End If
EndSub:
End Sub
Thân!

Cảm ơn anh. Cái này dùng vẫn không hiện thông báo ngay khi nhấn Enter. Dùng countif rồi validation cũng không được.
 
Upvote 0
Upvote 0
Tức là đang nhập liệu, nếu trùng thì cảnh báo ---> Cái này đương nhiên Validation thừa sức làm được
Bạn hiểu chứ?
Trên GPE thiếu gì loại bài toán dạng này ---> Bạn tìm xem!

Mình thử Validation được rồi, tuy nhiên nếu mình nhập trùng thì nó báo lỗi chứ nếu mình kéo fill thì nó không báo gì hết.
 
Upvote 0
Mình thử Validation được rồi, tuy nhiên nếu mình nhập trùng thì nó báo lỗi chứ nếu mình kéo fill thì nó không báo gì hết.
Đương nhiên ---> Đó và tính năng của Validation mà ---> Có cả ưu điểm lẩn nhược điểm:
- Dể dùng, gọn nhẹ
- Mất cảnh báo khi bị chép đè
 
Upvote 0
Cảm ơn anh. Cái này dùng vẫn không hiện thông báo ngay khi nhấn Enter. Dùng countif rồi validation cũng không được.

Mình quên mất, do mình lấy từ Code của bạn nên không để ý phần sự kiện.
Sửa lại chút xíu:

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo EndSub
    If Intersect(Target, Range("C2:C10000")) Is Nothing Then Exit Sub
    If Target = "" Then Exit Sub
    If Target.Columns.Count * Target.Rows.Count <> 1 Then Exit Sub
    If WorksheetFunction.Match(Target, Range("C2:C" & Target.Row - 1), False) Then
        MsgBox "Ma So IMEI " & Target & " da nhap roi. Vui long nhap lai!", vbExclamation, "Du lieu khong hop le!"
        Target.ClearContents
        Target.Select
    End If
EndSub:
End Sub
Thân!
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn anh. Cái này dùng vẫn không hiện thông báo ngay khi nhấn Enter. Dùng countif rồi validation cũng không được.

Mình kiếm được file này trên diễn đàn, bạn bôi đen cột số ghế rồi vào Validation để xem Custom Formulas nhé.
 

File đính kèm

  • SoGhe.xls
    13.5 KB · Đọc: 22
Upvote 0
Còn đây là Code cảnh báo cả khi thay đổi nhiều ô (hoặc 1 ô) cùng lúc : kéo xuống, copy . .

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo EndSub
    If Intersect(Target, Range("C2:C10000")) Is Nothing Then Exit Sub
    If Target.Columns.Count > 1 Then GoTo EndSub
    If Target.Rows.Count = 1 Then
    If Target = "" Then Exit Sub
    If WorksheetFunction.Match(Target, Range("C2:C" & Target.Row - 1), False) Then
        MsgBox "Ma So IMEI " & Target & " da nhap roi. Vui long nhap lai!", vbExclamation, "Du lieu khong hop le!"
        Target.ClearContents
        Target.Select
    End If
    Else
        Dim MyCell As Range
        For Each MyCell In Target
            If WorksheetFunction.Match(MyCell, Range("C2:C" & MyCell.Row - 1), False) Then
                With MyCell.Font
                      .Strikethrough = True
                      .ColorIndex = 3
                End With
            End If
        Next
    End If
EndSub:
End Sub

Thân!
 
Upvote 0
Cảm ơn các bạn rất nhiều. Mình tóm lược lại nhé.
Mỗi bạn đều có ý kiến hay.
Thứ nhất: Dùng Validation với countif thì được trong trường hợp gõ dữ liệu rồi enter, nếu copy và paste thì không có tác dụng. Hơn nữa mình đang validation để tránh nhập thiếu hoặc thừa 15 số IMEI nên không dùng thêm validation được nữa.
Thứ hai: Dùng VBA như bạn giúp thì rất ổn nhưng mình muốn mở rộng ra 2 vùng dữ liệu C14:G28 và C32:G46. Trong cả 2 vùng này không được phép trùng số IMEI
 

File đính kèm

  • Danh sach IMEI.rar
    31.2 KB · Đọc: 34
Upvote 0
Ặc ặc, bác hướng dẫn khủng quá làm e mới theo mướt:
+ Bôi đen cột số ghế.
+ Data Validation \ Allow: Custom & Formula:=(COUNTIF(B:B,B1)=1)
(tiện sau này mò lại cho nhanh)
Thank bác chủ.
 
Upvote 0
Web KT
Back
Top Bottom