如何在excel中使用一列作为另一列中的搜索参数,以仅输出某些字符串

时间:2012-06-20 14:01:26

标签: excel excel-vba vba

这个问题源于我的另一篇文章。 (见Search through column in excel for specific strings where the string is random in each cell

Workbook example

使用上面的图像作为参考,我试图使用E列作为“查找值”搜索B列(实际上超过1000行)。最终目标是“仅”显示在C列中显示的名称。技巧是所有随机生成的字符包含名称。以下是我希望数据表的样子。公式或模块应该可以工作,但vlookup和其他查找功能我无法工作。

enter image description here

2 个答案:

答案 0 :(得分:11)

对于工作表函数方法,您可以输入C3并填写此公式:

=LOOKUP(8^5,SEARCH(E$3:E$7,B3),E$3:E$7)

选择常数8 ^ 5 = 32768大于最大可能的字符串长度,以便LOOKUP返回最后一个匹配的值。如果没有找到字符串,则公式返回#N / A.

答案 1 :(得分:4)

另一种可能性,可能更容易理解,然后最初的assylias帖子,但也可能是更多时间消费(虽然有1000行,我认为它不会很重要)在下面。

这要求您将E列中的范围命名为myNames(或任何您想要的名称,只需更新代码 - 或者,您只需编写Range(“E1:E6”))。此外,如果您从列B移动随机值,也要在代码中更新它。

Sub findString()

Dim celString As Range, rngString As Range, celSearch As Range, rngSearch As Range
Dim wks As Worksheet

Set wks = Sheets("Sheet1") 'change sheet reference to whatever your sheet name is

Set rngString = wks.Range("myNames")
Set rngSearch = Intersect(wks.UsedRange, wks.Range("B1").EntireColumn)

For Each celString In rngString
    For Each celSearch In rngSearch
        If InStr(1, celSearch.Text, celString.Value) > 0 Then
            celSearch.Offset(, 1) = celString.Value
        End If
    Next
Next

End Sub

因为,我也在研究你的原始问题,我建议通过Siddharth的答案获取计数,然后运行这个,或上面的assylias代码来获取列旁边的名称。您可以在工作表上放置一个按钮,或者只使用“宏”对话框来运行宏。