我有两列分成两个单独的表格。在第一个C1
中,我有1000行包含文本,在第二列C2
中我有2000行也包含文本。
我需要做的是选择所有C2
行,其中至少(确切地说)包含在任何C1
行中的所有文本。
例如,假设数据是这样的:
C1 C2
Eval 1 Eval 101 doc
Eval 1 Eval 1 project
Eval 100 Eval 1 doc
Ev 1 Eval 19
Eval1 Ev 2
最后,我想在第二张表中仅选择以下单元格:
C2
Eval 1 doc
Eval 1 project
我对Excel不是很熟悉,但是我产生了以下功能:
=IF(ISNUMBER(FIND(<C1 cell>, <C2 cell>)),"OK", "Not OK")
然后它应该只是根据“OK”过滤数据。
问题是该函数仅适用于单个C1
值,但如果我根据需要选择整个C1
列,则不会...
我还想过使用VLOOKUP,但是我需要的不是C2
值与C1
值完全匹配,但正如我之前所说的那样至少} 包含C1
单元格的整个文本..
任何建议都将受到高度赞赏,
斯特凡诺
答案 0 :(得分:1)
好的,试试这个,它不是很好,但我认为它对你有用:
将以下代码添加到标准模块中的工作簿中,然后保存工作簿
Public LookInCollection As New Collection
Function SetUpCollection(range)
'Load data into collection
On Error Resume Next
For Each Cell In range
LookInCollection.Add 1, Cell.Text
Next
On Error GoTo 0
End Function
Function MatchValue(Value)
Dim ValueArray As Variant
Dim Lenght As Long
ValueArray = Split(Value, " ")
'Loop String backwars remving words each time
For i = 0 To UBound(ValueArray)
If InCollection(Left(Value, Len(Value) - Lenght)) Then
MatchValue = 1
Exit Function
End If
Lenght = Len(ValueArray(UBound(ValueArray) - i)) + 1
Next
MatchValue = 0 'Cound not match
End Function
Private Function InCollection(Key) As Variant
On Error Resume Next
InCollection = LookInCollection(Key)
End Function
接下来在第2列的页面上添加一个像这样的公式
= SetUpCollection(Column1_Range)
然后在C2中的每个单元格旁边添加forumla,
=匹配值(ReftoCelltoCheck)
根据评论更新
代码有3个部分。第一个函数构建一个由main函数使用的集合,这就是它只使用一次的原因。最后一个函数只是检查密钥是否在集合中。
第二个功能完成工作。它获取值以检查并将每个单词加载到数组中,这是split函数。 for循环向后工作,考虑值,从原始值中删除单词并根据集合中的键检查此新值。匹配返回1并退出函数,否则继续,直到检查完所有单词。