2

这个问题源于我的另一个帖子。(请参阅在 excel 中的列中搜索特定字符串,其中字符串在每个单元格中是随机的

工作簿示例

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

在此处输入图像描述

4

2 回答 2

11

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

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

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

于 2012-06-20T15:14:19.980 回答
4

另一种可能性,这可能比 assylias 最初发布的更容易理解,但也可能会花费更多时间(尽管有 1,000 行,但我认为这并不重要)如下。

这要求您将 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 的代码来获取列旁边的名称。您可以在工作表上放置一个按钮,或者只使用“宏”对话框来运行宏。

于 2012-06-20T14:35:50.533 回答