在 Excel 2013 中,我想在 B 列中查找字符串与 A 列中的字符串匹配的值。复杂之处在于 A 列中的字符串可以比所寻找的值字符串短。示例:
Column A Column B
ABCD- Result1
EF Result2
BCD Result3
现在,应该返回的字符串示例...
"Result1": "ABCD-", "ABCD-EFG", "ABCD-H"
"Result2": "EF", "EFG", "EFGHIIJKL"
"Result3": "BCD", "BCDXY"
“ABCD”不应返回任何结果。
假设所寻找的字符串位于单元格 C1 中。
我是否必须借助宏或者是否存在公式?
更新型多巴胺:将有多个要查找的字符串实际上位于另一张表的列中,并且开头不会有任何通配符。我要查找的值可以放在要查找的字符串列旁边的列中。
UPD2:假设 Sheet1 上的 A 列和 B 列内容以及 Sheet2 上的内容如下:
SoughtString ResultFound
ABCD- Result1
EF Result2
BCD Result3
BCDXY Result3
EFG Result2
ABCD-EFG Result1
EFGHIIJKL Result2
ABCD-H Result1
ABCD No match
将单元格 B2 中接受的答案中稍微修改后的数组公式复制下来:
=IFERROR(INDEX(Sheet1!B$2:B$4;MATCH(1;COUNTIF(A2;Sheet1!A$2:A$4&"*")*(Sheet1!A$2:A$4<>"");0));"No match")
答案1
假设你有第 2 行至第 10 行的数据,你可以使用这个“数组公式”
=IFERROR(INDEX(B$2:B$10,MATCH(1,COUNTIF(C1,A$2:A$10&"*")*(A$2:A$10<>""),0)),"No match")
已确认CTRL++SHIFTENTER
答案2
目前尚不清楚 C1 扮演什么角色。如果所寻求的字符串已存在于某一列中,则可以将其用作 Sheet2 的 Col A。如果它们在其他地方,您可以通过引用其他列表中的关联单元格来构建 Col A。例如,如果列表位于 Col Z,从第 2 行开始,A2 将是=Z2
,您可以将该公式复制到 Col A 以预填充比您需要的更多的单元格(这些单元格将保持空白,直到需要为止)。
如果每次创建一个新条目来创建所寻找的字符串列表,那么您只需将新条目放在任一列表(列 Z 或列 A)的下一个位置即可。如果新条目必须放入 C1 中,并且每个新条目都会替换之前的条目,那么您将需要一个宏或 VBA 程序来根据 C1 条目构建列表。
从通过上述任何一种方法在 A 列中找到所需字符串的点开始,这就是 B 列中的内容。假设 Result1 在 B2 中。B2 中的公式将是:
=IF(ISERROR(FIND(Sheet1!A2,A2)),"NO MATCH",IF(FIND(Sheet1!A2,A2)=1,A2,"NO MATCH"))
将公式复制到 B 列,复制所需的数量。您可以预先在 B 列中填充任意数量的条目,这些条目将保持空白,直到 A 列中关联的单元格中出现产生结果的值。