我有一张 Excel 工作表,其中包含两张表和两列,每张表包含以下输入:
表 1 数据:
column1 column2
------- -------
/a/b/c/d/good_1_test.mp
/d/e/f/g/test_2_xyz_pqr.pset
/a/b/g/d/good_1_test2.mp
/d/e/f/g/test_2_xyz_pqr.pset
表 2 数据:
column1 column2
------- -------
good_1 orange
test_2 apple
我希望 Sheet 1 的输出如下所示:
column1 column2
------- -------
/a/b/c/d/good_1_test.mp orange
/d/e/f/g/test_2_xyz_pqr.pset apple
/a/b/g/d/good_1_test2.mp orange
/d/e/h/g/test_2_xyz_pqr.pset apple
答案1
以下适用于任何路径长度,即不仅包括/a/b/c/d/test_2_xyz_pqr.pset
,还包括/pump/up/the/jam/pump/it/up/test_2_xyz_pqr.pset
。它提取最后一个 之后的第一个 6 个字符的字符串/
,并在 Sheet 2 表中查找它。
将其粘贴到单元格中B1
并向下拖动:
=VLOOKUP(MID(A1,FIND(CHAR(1),SUBSTITUTE(A1,"/",CHAR(1),LEN(A1)
-LEN(SUBSTITUTE(A1,"/",""))))+1,6), Sheet2!A:B, 2, FALSE)
假设您的“工作表 1 的第 1 列”数据从 开始A1
,而您的“工作表 2”数据位于 A 列和 B 列(最好这些列中没有其他任何内容)。
test_4
此外,它假设查找表中只有 6 个字符的字符串(例如)。如果您想考虑不同长度的字符串,那么答案将更加复杂。
答案2
对于您所描述的具体情况,请在第 2 列中尝试此操作并向下拖动(确保根据需要更改单元格或列):
=VLOOKUP(MID$($A2,10,6), Sheet2!A:B, 2, False)
答案3
如果您可以使用用户定义函数。这是从以下函数改编而来的:超级用户 作者:@Hidden Koala
Option Compare Text
Public Function RETURNTEXT(src As Range, crt As Range, col as Integer) As String
s = Trim(src.Value)
For Each c In crt
If InStr(1, s, Trim(c.Value)) Then newstr = WorksheetFunction.VLookup(Trim(c.Value), crt, col, False)
Next c
RETURNTEXT = newstr
End Function
定义要查找和返回的字符串的范围在此示例中为 Sheet2!$A$1:$B$2
...添加了一个要返回的列,使其更加通用,类似于 vlookup 函数
然后输入的函数为 =RETURNTEXT(A3,Sheet2!$A$1:$B$2,2)