如何将excel中的一列用作另一列中的search参数,仅输出某些string

这个问题引起了我的另一个职位。 (请参阅在Excel中通过search字段查找string在每个单元格中随机的特定string )

工作簿示例

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

在这里输入图像描述

另一种可能性,最初可能比较容易理解,但也可能有点耗时(尽pipe有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 

因为我也是在你原来的问题上工作,所以我build议通过Siddharth的答案来获得计数,然后运行这个或者assylias的代码来获得列旁边的名字。 你可以把一个button放在工作表上,或者使用macros对话框来运行macros。

对于工作表函数方法,您可以inputC3并填写下面的公式:

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

常数8 ^ 5 = 32768被select为大于最大可能的string长度,以便LOOKUP返回最后的匹配值。 如果找不到string,则公式将返回#N / A。