在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(...)
如果LookCell
和LookFor(Idx)
真的是同一个单元格,就会产生误报。 所以你会重写语句
... ... If InStr(1, LookCell, LookFor(Idx)) <> 0 And _ Not (LookCell.Row = Arg.Row And LookCell.Column = Arg.Column) _ Then
暗示
不要使用完整的列(例如$ C:$ C)作为第二个参数,因为如果没有进一步的预防措施,函数会变得非常慢