【问题标题】:Return keyword if part matches如果部分匹配,则返回关键字
【发布时间】:2015-11-17 06:56:31
【问题描述】:

Excel、Excel VBA、Excel 2010、Excel 公式

我有这样的数据。请关注abcxyz。其余的文字是随机的。

数据

               Column A
1.             abc rew rpoi uis
2.             qwert xyz wed ref teg
3.             oene abc odsmd 
4.             xyz qwpeo kosd 
5.             abc
6.             xyz

我在另一张表中也有关键字。同样,请注意abcxyz。其余的文字是随机的。

关键字

               Column A
1.             abc qwe ertqeweq loiu
2.             asd xyz uji 

我正在寻找在我的数据表中执行此操作的 excel 解决方案

数据

               Column A                       Column B
1.             abc rew rpoi uis               abc qwe ertqeweq loiu
2.             qwert xyz wed ref teg          asd xyz uji 
3.             oene abc odsmd                 abc qwe ertqeweq loiu
4.             xyz qwpeo kosd                 asd xyz uji
5.             abc                            abc qwe ertqeweq loiu
6.             xyz                            asd xyz uji

基本上,根据子字符串匹配选择正确的关键字。 我想将关键字中的完整单词(由两个空格分隔)与数据表中的完整单词(由两个空格分隔)匹配。

我尝试了查找公式,但它给了我错误。在数据的单元格 B1 中,我尝试了

=LOOKUP(data!A1,keyword!A1:A2,keyword!A1:A2) 

这似乎适用于某些情况,但不适用于某些情况。 (我有 4000 行数据和 100 行关键字)。不知道为什么。

如果我能修改我的公式来完成这项工作,我将不胜感激。如果 VBA 能做到,那也没关系!

【问题讨论】:

  • 您能否将关键字分成三列并从连接所有三个单独关键字的第四列返回?
  • 关键字是随机长度。感谢@Jeeped 指出。将更新问题!
  • 标准工作表函数不能很好地处理未知长度的字符串或不定数量的“拆分”元素。向 VBA 寻求答案,因为可以更轻松地处理可变长度和关键字数量。
  • 当然。将更新问题以包含 vba 标签。谢谢!
  • “xyz”、“abc”等值是否存储在某个地方?还是您将它们手动放入?

标签: excel excel-formula excel-2010 vba


【解决方案1】:

以下用户定义函数(又名 UDF)将在空格处拆分您的关键字字符串并依次测试每个字符串。将其放入 VBE 中的模块代码表 (Alt+F11, Alt+I, MCtrl+V)。

Function InThereSomewhere(rThat As Range, rThis As Range, _
                          Optional bCS As Boolean = False)
    Dim r As Long, k As Long, vKEYs As Variant

    InThereSomewhere = vbNullString  'maybe "No Match"
    For r = 1 To rThis.Rows.Count
        vKEYs = Split(rThis(r).Value2, Chr(32))
        For k = LBound(vKEYs) To UBound(vKEYs)
            If CBool(InStr(1, rThat.Value2, vKEYs(k), _
              IIf(bCS, vbBinaryCompare, vbTextCompare))) Then
                InThereSomewhere = rThis(r).Value2
                Exit Function
            End If
        Next k
    Next r
End Function

在工作表中使用就像任何其他本机工作表公式一样。

      

可选的 bCS 参数确定搜索是否区分大小写。它默认为不区分大小写。 B6:B8 认为这是 TRUE。

【讨论】:

  • 完美!这太棒了,而且有效。万分感谢!! :)
【解决方案2】:

把这个放到你B1的数据表中然后往下拉:

=IF(FIND("abc",A1),data!$A$1,IF(FIND("xyz",A1),data!$A$2,""))

【讨论】:

  • 嗨,我有大约 100 个关键字,所以不确定这是否可行!
  • 不会的。让我考虑一下。
猜你喜欢
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-07
相关资源
最近更新 更多