Excel 从另一张图纸粘贴前导公共子字符串

Excel 从另一张图纸粘贴前导公共子字符串,excel,excel-formula,lookup,Excel,Excel Formula,Lookup,在Excel的Sheet1中,我在一张包含名称的工作表中有以下列: 在Sheet2中,我有一个名为substring的列,如下面的屏幕截图所示(为简单起见,我只使用了1行): 对于Sheet1中的每个名称,我想检查它是否包含Sheet2中的任何子字符串,在本例中为“abreu”。如果名称包含Sheet2中的子字符串,且子字符串位于名称的开头,则将子字符串粘贴到其旁边的单元格中。如果名称不包含子字符串,则不要执行任何操作。所需的输出应如下面的屏幕截图所示: 我试过VLOOKUP,但效果不太好

在Excel的Sheet1中,我在一张包含名称的工作表中有以下列:

在Sheet2中,我有一个名为substring的列,如下面的屏幕截图所示(为简单起见,我只使用了1行):

对于Sheet1中的每个名称,我想检查它是否包含Sheet2中的任何子字符串,在本例中为“abreu”。如果名称包含Sheet2中的子字符串,且子字符串位于名称的开头,则将子字符串粘贴到其旁边的单元格中。如果名称不包含子字符串,则不要执行任何操作。所需的输出应如下面的屏幕截图所示:


我试过VLOOKUP,但效果不太好,因为它要么是完全匹配,要么是部分匹配,没有一个适合我的情况。我还尝试了搜索功能,它也不会检测子字符串是否位于名称的开头。非常感谢您的帮助。

像这样的方法应该可以奏效。我在同一张图纸上有两个列表,但您可以轻松修改公式以反映两张图纸的设置

=INDEX($D$2:$D$4,AGGREGATE(15,6,ROW($A$1:$A$3)/ISNUMBER(SEARCH($D$2:$D$4,LEFT(A2,LEN($D$2:$D$4)))),1))


如果不匹配,您也可以添加一个
IFERROR
以返回

子字符串是否总是有6个字符?@teylyn否,子字符串的长度可能会有所不同。如果您的子字符串同时包含
abreu
abre
abre
,即另一个子字符串中的子字符串,你想返回哪一个,匹配是否区分大小写?@TerryW,它不区分大小写,如果有“abreu”、“abre”和“abre”,我将返回最小长度的一个。在这种情况下,它将是“abRE”。为了加快计算,可以考虑使用VBA或POWER查询。对于VBA方法,您可以向@BigBen寻求帮助。如果您想了解Power Query方法,请告诉我,这不是一个非常直接的解决方案,但我相信与使用公式相比,它应该可以为您节省大量运行时间。谢谢@BigBen!这对我的例子有效,所以我接受了答案。有没有办法把这个公式截断一点?我的实际工作表在第一张表中有24000行,在第二张表中有数千个子字符串,计算需要很长时间。嗯,我不确定。它可能会转换为VBA解决方案。成千上万的子字符串会减慢计算速度,这与公式的长度无关。使用VBA,您可以将子字符串列表读入一个数组,将sheet1上的每个单元格与该数组进行比较,然后在找到匹配项时立即退出,从而节省一些计算。如果我的子字符串包含“abreu”和“abre”,即另一个子字符串中的子字符串,您的公式会返回它看到的第一个吗(在本例中为“abreu”)?是的。我想知道您的子字符串是否存在此问题(同样,这不是公式的缺陷,这是您的设置,您必须决定返回哪一个,对吗)?