在Excel中防止部分重复

时间:2015-03-10 07:53:16

标签: excel duplicates multiple-entries

我有一个包含产品的工作表,我办公室的人员可以添加新职位。我们遇到的问题是产品有规格但不是每个人都把它们放入(或输入错误)。

实施例: "酷产品14C"

有没有办法转换数据评估选项,以便现在警告我,以防我放置非常酷的产品14B"或任何包含已存在的字符串(例如,长于4)的内容,例如" cool produKt 14C"而且"好产品15"等等?

我知道我可以使用COUNTIF防止100%匹配,并使用LEFT / RIGHT以相同的方式发现/结束单词,但我也需要在条目中发现部分匹配。

非常感谢!

1 个答案:

答案 0 :(得分:0)

如果您想要覆盖拼写错误,自动换行,数字排列等,可能SOUNDEX算法适合您的问题。这是implementation for Excel ...

因此,如果您将其作为用户定义的函数插入,并为每个产品行创建列=SOUNDEX(A1),则在输入新的产品名称时,您可以筛选具有相同SOUNDEX值的所有产品行。您可以通过让用户首先在对话框中输入新名称,进行验证,向他们提供可能重复的组合框下拉等等来进一步自动化。

修改

小函数,用于查找范围内的空格终止的部分字符串(回答您的评论)

Function FindSplit(Arg As Range, LookRange As Range) As String
Dim LookFor() As String, LookCell As Range
Dim Idx As Long

    LookFor = Split(Arg)
    FindSplit = ""

    For Idx = 0 To UBound(LookFor)

        For Each LookCell In LookRange.Cells
            If InStr(1, LookCell, LookFor(Idx)) <> 0 Then
                If FindSplit <> "" Then FindSplit = FindSplit & ", "
                FindSplit = FindSplit & LookFor(Idx) & ":" & LookCell.Row
            End If
        Next LookCell
    Next Idx

    If FindSplit = "" Then FindSplit = "Cool entry!"
End Function

这有点粗糙......但它的作用是以下

  • 将单个单元格参数拆分并将其放入数组中 - &gt; split()
  • 处理每件 - &gt; For Idx = ...
  • 搜索包含该片段的字符串的另一个范围 - &gt; For Each ...
  • 将找到它的单元格的行号和行号添加到结果字符串

您可以在每个单元格输入旁边输入/复制此公式,并立即知道您是否进行了很酷的输入。

enter image description here

细胞D8的值为[ asd:3,wer:4 ]

注意在查找范围的开始使用绝对寻址;这样你可以很好地复制公式。

编辑2015年3月17日

进一步评论Joanna 2015年3月17日,如果搜索参数是您正在扫描的范围的一部分,例如=FINDSPLIT(C5; C1:C12)如果If Instr(...)LookCell实际上是同一个单元格,那么您需要确保LookFor(Idx)没有被点击,因为这会产生误报。所以你要将语句重写为

...
    ...
        If InStr(1, LookCell, LookFor(Idx)) <> 0 And _
           Not (LookCell.Row = Arg.Row And LookCell.Column = Arg.Column) _
        Then

<强>暗示

不要使用完整的列(例如$ C:$ C)作为第二个参数,因为如果没有进一步的预防措施,函数会变得很慢