1

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

示例:“酷产品 14C”

有没有办法转换数据评估选项,以便它现在警告我,以防我输入“非常酷的产品 14B”或任何包含已经存在的字符串(例如,超过 4 个)的字符串,例如“酷 produKt 14C”但是还有“好产品15”之类的?

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

非常感谢!

4

1 回答 1

0

如果您想涵盖拼写错误、自动换行、图形排列等。也许SOUNDEX算法会适合您的问题。这是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)您要确保如果并且确实是相同的单元格,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)作为第二个参数,因为如果没有进一步的预防措施,函数往往会变得非常慢

于 2015-03-10T08:21:26.483 回答