Xác thực rằng một tổ hợp các ô là duy nhất trong một hàng trong Excel


2

Tôi có một bảng Excel trong đó 3 cột (A, B và C) tạo thành một mã định danh duy nhất cho mỗi hàng, nhưng các giá trị trong các cột không phải là duy nhất. Ví dụ:

   ABC    REF   001
   ABC    REF   002
   ABC    REF   003
   ABC    DOC   001
   ABC    DOC   002
   ABC    DOC   003

Các hàng trên là hợp lệ, vì không có hàng nào có cùng kết hợp các giá trị (ví dụ: không có hai hàng nào có "ABC REF002" ngay cả những hàng có các bản sao của cột B và C)

Làm cách nào tôi có thể thêm xác thực Excel sao cho nếu người dùng nhập kết hợp các giá trị trong các cột A, B và C khớp với kết hợp của một hàng khác thì sẽ xảy ra lỗi xác thực?

Câu trả lời:


2

Nhập macro sự kiện sau vào vùng mã bảng tính:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim I As Long, st As String, J As Long, k As Long
    Dim CH As String

    If Intersect(Range("A:C"), Target) Is Nothing Then Exit Sub
    CH = Chr(1)
    I = Target.Row
    J = Cells(Rows.Count, 1).End(xlUp).Row
    st = Cells(I, 1).Text & CH & Cells(I, 2).Text & CH & Cells(I, 3).Text

    For k = 1 To J
        If k <> I Then
            stk = Cells(k, 1).Text & CH & Cells(k, 2).Text & CH & Cells(k, 3).Text
            If st = stk Then
                MsgBox "Combination already in use:" & vbCrLf & stk
                Exit Sub
            End If
        End If
    Next k

End Sub

Vì là mã bảng tính nên rất dễ cài đặt và tự động sử dụng:

  1. bấm chuột phải vào tên tab gần cuối cửa sổ Excel
  2. chọn Xem mã - điều này sẽ xuất hiện một cửa sổ VBE
  3. dán nội dung vào và đóng cửa sổ VBE

Nếu bạn có bất kỳ mối quan tâm nào, trước tiên hãy thử nó trên bảng tính dùng thử.

Nếu bạn lưu sổ làm việc, macro sẽ được lưu cùng với nó. Nếu bạn đang sử dụng phiên bản Excel sau đó sau 2003, bạn phải lưu tệp dưới dạng .xlsm chứ không phải .xlsx

Để xóa macro:

  1. đưa lên các cửa sổ VBE như trên
  2. xóa mã ra
  3. đóng cửa sổ VBE

Để tìm hiểu thêm về macro nói chung, xem:

http://www.mvps.org/dmcritchie/excel/getstarted.htmlm

http://msdn.microsoft.com/en-us/l Library / ee814735 (v = office.14) .aspx

Để tìm hiểu thêm về Macro sự kiện (mã bảng tính), hãy xem:

http://www.mvps.org/dmcritchie/excel/event.htm

Macro phải được kích hoạt để làm việc này!


Macro này cho tôi lỗi sau: "Không thể lấy thuộc tính Text của lớp Range". Lỗi này xảy ra trên dòng có stkhai báo Đây là với Excel 2007
Scribpetacher

Rất lạ .............. Tôi không thấy lỗi này.
Học sinh của Gary

2
Có vẻ như nó có liên quan đến định dạng dữ liệu trong các ô tôi đang kiểm tra. Thay đổi tất cả các cột thành văn bản đã khắc phục vấn đề.
Scribpetacher

1
Làm tốt công việc sửa lỗi!
Học sinh của Gary

@Gary: Bạn có biết tại sao một lỗi 'RunTIme: 1007 - Lỗi Applicatiobn Defined hoặc Object Defined' ném ra không? Tôi chỉ thay đổi If conditon chỉ khi số cột của tôi nhiều hơn. Do đó, như 'Intersect (Phạm vi ("B: F"), Target)'. Bạn sẽ có thể giúp tôi?
hirosht
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.