1

我有两列分为两个单独的工作表。在第一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

任何建议将不胜感激,

斯特凡诺

4

1 回答 1

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 中的每个单元格旁边添加论坛,

=MatchValue(ReftoCelltoCheck)


根据评论更新

代码有 3 个部分。第一个函数构建一个集合,供主函数使用,这就是它只使用一次的原因。最后一个函数只是检查键是否在集合中。

第二个函数完成这项工作。它获取要检查的值并将每个单词加载到数组中,这就是拆分函数。for 循环向后考虑值,从原始值中删除单词并根据集合中的键检查这个新值。匹配返回 1 并且我们退出函数,否则继续执行直到所有单词都被检查。

于 2013-11-08T13:02:40.347 回答