验证单元格组合在Excel中的行中是唯一的


2

我有一个Excel工作表,其中3列(A,B和C)形成每行的唯一标识符,但列中的值不是唯一的。例如:

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

上面的行是有效的,因为没有行具有相同的值组合(例如,没有两行带有“ABC REF002”,即使那些列有B和C列的重复)

如何添加Excel验证,以便用户在列A,B和C中输入与另一行的组合匹配的值组合时,会发生验证错误?

Answers:


2

在工作表代码区域中输入以下事件宏:

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

因为它是工作表代码,所以很容易安装和自动使用:

  1. 右键单击Excel窗口底部附近的选项卡名称
  2. 选择查看代码 - 这会打开一个VBE窗口
  3. 粘贴内容并关闭VBE窗口

如果您有任何疑虑,请先在试用工作表上试用。

如果保存工作簿,宏将与其一起保存。如果您在2003年之后使用的是Excel版本,则必须将文件另存为.xlsm而不是.xlsx

要删除宏:

  1. 如上所述调出VBE窗口
  2. 清除代码
  3. 关闭VBE窗口

要了解有关宏的更多信息,请参阅:

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

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

要了解有关事件宏(工作表代码)的更多信息,请参阅:

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

必须启用宏才能使其正常工作!


这个宏给我以下错误:“无法获取Range类的Text属性”。这个错误发生在st声明的行上这是与Excel 2007
Scribblemacher 2015年

很奇怪..............我没有看到这个错误。
Gary的学生

2
它看起来与我正在测试的单元格中的数据格式有关。将所有列更改为文本可修复问题。
Scribblemacher 2015年

1
干得好调试!
Gary的学生

@Gary:任何想法为什么'RunTIme错误:1007 - Applicatiobn Defined或Object Defined Error'抛出?我只是因为我的列数更多而改变了if条件。因此,'相交(范围(“B:F”),目标)'。你能帮助我吗?
hirosht
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.