Excel,Excel VBA,Excel 2010,Excel公式
我有这样的数据。请注意abc
和xyz
。其余的文字只是随机的。
数据
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
我在另一张表中也有关键字。请再次注意abc
和xyz
。其余的文字只是随机的。
关键字
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
基本上,根据子字符串匹配选择正确的关键字。 我想将关键字中的完整单词(由两个空格分隔)匹配到数据表中的完整单词(用两个空格分隔)。
我尝试了Lookup公式,但它给了我错误。在数据单元格B1中,我尝试了
=LOOKUP(data!A1,keyword!A1:A2,keyword!A1:A2)
这对某些人来说似乎有效,对某些情况不起作用。 (我的数据有4000行,关键字有100行)。不知道为什么。
我将很高兴能够修改我的公式以完成这项工作。如果VBA会这样做,那也没关系!
答案 0 :(得分:2)
以下用户定义函数(又名 UDF )会将您的关键字字符串拆分为空格并依次对其进行测试。把它放到VBE中的模块代码表中( Alt + F11 , Alt + I , M , Ctrl + 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。
答案 1 :(得分:0)
将其放入B1中的数据表并向下拖动:
=IF(FIND("abc",A1),data!$A$1,IF(FIND("xyz",A1),data!$A$2,""))