Validation 指向源单元格的数据验证
我在A列中使用了数据验证,如果输入了重复数据,则会显示错误消息。它只是显示错误,但没有告诉我数据在列中的位置 我想知道的是Excel是否可以导航到源单元格,在该单元格中对重复值进行比较Validation 指向源单元格的数据验证,validation,excel,compare,excel-2003,vba,Validation,Excel,Compare,Excel 2003,Vba,我在A列中使用了数据验证,如果输入了重复数据,则会显示错误消息。它只是显示错误,但没有告诉我数据在列中的位置 我想知道的是Excel是否可以导航到源单元格,在该单元格中对重复值进行比较 如果单元格A2=12345,并且我尝试更新A50=12345,Excel会生成一条错误消息,但它是否可以将光标指向单元格A2,因为比较数据就在这里?我有相同的任务输入和输出。我的解决办法是 接收两个范围(targetcell、datarange)的通用重复检查例程 一个工作表\u Change()事件触发重复检查
如果单元格A2=12345,并且我尝试更新A50=12345,Excel会生成一条错误消息,但它是否可以将光标指向单元格A2,因为比较数据就在这里?我有相同的任务输入和输出。我的解决办法是
工作表\u Change()
事件触发重复检查我想要的列DupeCheck()
开始。。。它在一个范围(DataRange
)中运行,并返回第一个单元格,该单元格的值与要测试的目标值相同。此函数驻留在自己的模块中。这样,同一工作簿中的多个工作表就可以使用它
Function DupeCheck(Target As Range, DataRange As Range) As Range
Dim DataCell As Range
Set DupeCheck = Nothing
' compare each cell of DataRange with Target
For Each DataCell In DataRange.Cells
' exclude Target which may be part of DataRange per se
If Intersect(DataCell, Target) Is Nothing Then
If DataCell = Target Then
' duplicate found ... terminate on first find
Set DupeCheck = DataCell
Exit For
End If
End If
Next DataCell
End Function
现在让我们看一下工作表\u Change
事件,它位于它所作用的工作表的代码区域中。在我的例子中,我有很多验证,但我简化了示例,只包含相关的代码。。。在这里,我们检查单元格更改是否适用于列A,在这种情况下,我们启动DupeCheck()
函数,并根据返回值,将错误消息设置或清除到工作表中名为[ErrorMessage]的单元格中。。。在这里,我们当然可以将光标定位到重复单元格中(例如,TempR.Select
…口味问题)
嗨,迈克,请原谅我的无知。但我不完全理解你的答案。我对Excel不太了解,因为我的经验有限,一直在使用教程来达到我所处的阶段。再次为不理解您的答案而道歉。对不起。。。也许我认为[excel vba]的存在过于文字化。。。我的建议是写一些VBA代码,我明白了,如果你愿意建议我应该怎么做的话。我知道如何将vba代码输入工作表,但编程不是我的专长。然而,我愿意学习,因为我怀疑这是一个很好的技能,以达到。增加的例子作为一个开端。。。让我知道你是否/如何将其开发为自己的解决方案嗨,迈克,我会尝试一下并将其纳入我的文件中。到目前为止,你帮了大忙,谢谢你。如果我的工作表有助于您理解我正在使用的工作表背后的想法,我会附上一张工作表的屏幕截图。您能提供您在a列中使用的数据验证公式吗?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TempR As Range
' various validations
' always break on first error found
' output to named range ErrorMessage
' Dupe Check for PoP ID (column A)
If Target.Column = 1 Then
Set TempR = DupeCheck(Target, Range("A1:A50"))
If Not TempR Is Nothing Then
[ErrorMessage] = "Duplicate ID in " & TempR.AddressLocal
Else
[ErrorMessage] = ""
End If
' ElseIf Target.Column = 4 Then ' other validations (deleted)
' ....
End If
End Sub