如果您想涵盖拼写错误、自动换行、图形排列等。也许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
这有点粗略……但它的作用如下
- 将单个单元格参数分成几部分并将其放入数组中-->
split()
- 处理每一块 -->
For Idx = ...
- 在另一个范围内搜索包含该片段的字符串 -->
For Each ...
- 将找到它的单元格的片数和行号添加到结果字符串中
您可以在每个单元格输入旁边输入/复制此公式,并立即知道您是否输入了很酷的输入。
单元格 D8 的值为 [asd:3, wer:4]
注意在查找范围开始时使用绝对寻址;这样你就可以很好地复制公式了。
2015 年 3 月 17 日编辑
进一步评论 Joanna 2015 年 3 月 17 日,如果搜索参数是您正在扫描的范围的一部分,例如=FINDSPLIT(C5; C1:C12) 如果LookCell 和LookFor(Idx) 确实是同一个单元格,您要确保If Instr(...) 不会命中,因为这会产生误报。因此,您将语句重写为
...
...
If InStr(1, LookCell, LookFor(Idx)) <> 0 And _
Not (LookCell.Row = Arg.Row And LookCell.Column = Arg.Column) _
Then
提示
不要使用完整的列(例如 $C:$C)作为第二个参数,因为如果没有进一步的预防措施,函数会变得非常慢