在Excel中防止部分重复

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

例如:“酷产品14C”

有没有一种方法来转换数据评估选项,以便它现在警告我,如果我把“非常酷的产品14B”或任何包含已经存在的string(比如说,超过4),如“酷produkt 14C”,但是还有“好产品15”等等?

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

非常感谢!

如果你想覆盖错字,文字换行,graphics排列等,也许一个SOUNDEXalgorithm适合你的问题。 这是一个Excel的实现 …

因此,如果您将其作为用户定义函数插入,并为每个产品行创build一个列=SOUNDEX(A1) ,则在input新产品名称时,可以筛选具有相同SOUNDEX值的所有产品行。 你可以进一步自动化,让用户input新的名字到一个对话框的forms中,做validation,给他们一个可能有重复的combobox等等等。

编辑:

小函数来查找部分string在一个范围内的空白(在回答你的评论)

 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 

这有点粗糙,但是它的作用是如下

  • 拆分单个单元格参数,并将其放入数组 – > split()
  • 处理每件作品 – > For Idx = ...
  • search另一个范围的string包含片 – > For Each ...
  • 将find的单元格的块号和行号添加到结果string中

您可以在每个单元格input旁边input/复制此公式,并立即知道是否已经完成了一个很酷的input。

在这里输入图像说明

单元格D8的值是[ asd:3,wer:4 ]

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

编辑17-Mar-2015

如果search参数是你正在扫描的范围的一部分,例如=FINDSPLIT(C5; C1:C12)那么你要确保If Instr(...)如果LookCellLookFor(Idx)真的是同一个单元格,就会产生误报。 所以你会重写语句

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

暗示

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

Interesting Posts