Validation 指向源单元格的数据验证

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()事件触发重复检查

我在A列中使用了数据验证,如果输入了重复数据,则会显示错误消息。它只是显示错误,但没有告诉我数据在列中的位置

我想知道的是Excel是否可以导航到源单元格,在该单元格中对重复值进行比较


如果单元格A2=12345,并且我尝试更新A50=12345,Excel会生成一条错误消息,但它是否可以将光标指向单元格A2,因为比较数据就在这里?

我有相同的任务输入和输出。我的解决办法是

  • 接收两个范围(targetcell、datarange)的通用重复检查例程
  • 一个
    工作表\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