【问题标题】:Excel Data checking to flag up duplicatesExcel 数据检查以标记重复项
【发布时间】:2017-06-26 04:42:41
【问题描述】:

我正在尝试使用@Wolfie Excel Data Checking 提交的代码来标记日期和特定代码匹配的重复条目。在我的数据库中,日期在 B 列,唯一代码在 L 列,由 2 个字母和 2 个数字组成(即 AA22)

数据库有 A 到 Q 列,它可能有的行数没有限制。

我已尝试将您的代码修改为以下 -

Dim q As Long
Dim matched As Boolean
matched = False

' Loop over all used rows
For q = 1 To ActiveSheet.UsedRange.Rows.Count

    ' Check if concatenated string of date & name is unique
    ' e.g. '01/01/17john'
    If ActiveSheet.Cells(q, "B").Text & ActiveSheet.Cells(q, "L").Text = _
       myUserForm.DateField.Text & myUserForm.NameField.Text Then

        MsgBox "This Duty / Date combination has already been entered, please check for previous entry"

        matched = True

        Exit For

    End If

Next q

If matched = False Then

    ' Name/Date combination is unique, send data to sub or whatever...

End If

我认为我的数据库没有设置为用户表单,所以这可能是导致问题的原因?

如果有人能指出我缺少什么,我将不胜感激。

如果有人觉得自己非常慷慨,还有一个额外的调整对我来说非常棒。我有一列 (K),只允许 3 个选项 HGW; RDW 和 O/T。如果选择了 HGW 或 RDW,则必须显示重复标志。但是,如果选择了 O/T,则它不会标记为重复。

希望这是有道理的!

【问题讨论】:

    标签: excel


    【解决方案1】:

    如果您只想匹配用户输入的数据是否重复,则可以在没有 VBA 的情况下完成。当通过用户表单输入数据时,上面的代码似乎会检查这一点。

    如果您不使用用户表单输入数据,您也可以使用带有公式的辅助列

    =if(isnumber(match(B2&L2,Index($B$1:$B1&$L$1:L1,0),0)),"duplicate","")
    

    或者,您可以使用带有类似于上述代码的 worksheet_change 事件。

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim q As Long
    Dim matched As Boolean
    matched = False
    
    If Not Intersect(Target, Range("L:L")) Is Nothing Then
    
    ' Loop over all used rows
    For q = 1 To ActiveSheet.UsedRange.Rows.Count -1
    
        ' Check if concatenated string of date & name is unique
        ' e.g. '01/01/17john'
        If ActiveSheet.Cells(q, "B").Value & ActiveSheet.Cells(q, "L").Value = _
           Target.Offset(0, -10).Value & Target.Value Then
    
            MsgBox "This Duty / Date combination has already been entered, please check for previous entry"
    
            matched = True
    
            Exit For
    
        End If
    
    Next q
    End If
    
    If matched = False Then
    
        ' Name/Date combination is unique, send data to sub or whatever...
    
    End If
    End Sub
    

    【讨论】:

    • 感谢@teylyn 尝试提出一种可行的方法。我已将 VBA 代码添加到数据库中,但由于某种原因,它显示信息重复的消息,但这发生在每个条目上,而不仅仅是在找到重复项时!我会上传数据库给你看,只是我不知道它是怎么做的!!
    • 您可能需要调整公式以应用于正确的列和行。如果公式从第 5 行开始,您当然不能使用match(B2&L2,如果日期和名称不在 B 和 L 中,那么您也需要对其进行调整。正如您在我的屏幕截图中看到的那样,该公式有效。因此,现在只需确保将其正确应用于您的数据。
    • 感谢@teylyn 回复我,我没有尝试过公式版本,因为我不想在数据库中添加额外的列(它已经很宽了!)。如果您可以让公式在找到重复项时提供启动屏幕,那么我可以创建该列,然后将其隐藏以便它在后台工作。我曾尝试使用 vba 脚本,但我遇到了将每个条目突出显示为重复项的问题!我需要从第 3 行开始检查代码,最终检查的行数没有限制,因为新实体将被添加到列表的底部。
    • 公式无法触发消息框。我发布的代码在输入数据的行上运行,从而触发消息。我将代码调整为不使用当前行For q = 1 To ActiveSheet.UsedRange.Rows.Count - 1
    • 嗨@teylyn,我一直在修改数据库以尝试使其正常工作。您的 vba 代码有效,但方向错误!当我在 B 列中添加日期和在 L 列中添加税号 (AA21) 时,没有显示重复消息,没有任何反应。只有当我删除 L 栏中的税号时,才会出现该消息!但是,当我删除日期时,不会出现重复的消息。
    猜你喜欢
    • 1970-01-01
    • 2014-10-12
    • 2021-10-19
    • 1970-01-01
    • 2011-12-06
    • 2021-03-31
    • 2016-06-23
    • 2023-04-09
    • 2020-10-05
    相关资源
    最近更新 更多