我从 2 个不同的数据库中提取信息。这两个数据库对完全相同的项目/指定位置使用不同的命名协议,但它们的名称中总有某些共同的部分。这些名称的长度在每个数据库中可能有所不同(见下图),因此我认为计算字符数不会有帮助。我需要一个公式(可能是某种 vlookup/match/index)将第二个数据库名称中的名称与第一个数据库名称配对,然后将其放在 Sheet1 上的相邻列(B2)中。到目前为止,我不得不手动将配对从一张工作表匹配、复制和粘贴到另一张工作表,这需要很长时间。任何帮助都将不胜感激!!!
例如:
Sheet1,A2 中的 Database1 名称: 728x90_Allstate_629930_ALL_JUL_2013_MASSACHUSETTSAUTO_BAN_MSN_ROSMSNAUTOSMASSACHUSETTS_7.2.13
Sheet2, A13 中的数据库2名称: BAN_MSN_ROSMSNAUTOSMASSACHUSETTS728X90_728X90_DFA
共同因素: “俄罗斯联邦汽车工业公司”和“728X90” 因此 A2 和 A13 需要配对
在某些情况下,数据库 1 和 2 会具有共同的名称方面,但大小会有所不同。它们需要具有共同的两个方面才能配对,因此我会不是想要下面的例子配对。
Sheet1,A2 中的 Database1 名称: 728x90_Allstate_629930_ALL_JUL_2013_MASSACHUSETTSAUTO_BAN_MSN_ROSMSNAUTOSMASSACHUSETTS_7.2.13
Sheet2, A12 中的数据库2名称: BAN_MSN_ROSMSNAUTOSMASSACHUSETTS300X250_300X250_DFA
公约数: 仅“ROSMSNAUTOSMASSACHUSETTS”匹配。“728x90”不等于“300X250”-尺寸不同,因此不应该配对。
答案1
如果至少有一每个命名约定的一致方面,您可以使用通配符和公式来找到匹配。
例如,如果您知道 DB1 的命名约定始终遵循size_company_date_...格式,您可以使用类似这样的方法在第一个 DB ID 中查找大小:
=MID(A1,1,FIND("_",A1,1)-1)
其中MID
通过查看单元格()返回大小A1
并从第一个字符开始返回一定数量的字符(这是当您用来Find
查找字符串的第一个下划线的位置号减 1 时)。
如果您知道第二个匹配值在命名约定中始终位于何处,那么您可以使用公式来找到匹配的第二部分。本文给出了一个提示。
利用这些知识,如果您知道第二个匹配值始终是左侧九个下划线,则可以使用此公式返回第二个匹配值的起始位置:
=FIND(CHAR(1),SUBSTITUTE(G1,"_",CHAR(1),9))+1
现在我们知道如何找到尺寸和其他匹配值,我们可以使用Vlookup
和通配符以匹配其余部分。(抱歉公式太长……)
=VLOOKUP("*" & MID(A1,FIND(CHAR(1),SUBSTITUTE(A1,"_",CHAR(1),9)),FIND(CHAR(1),SUBSTITUTE(A1,"_",CHAR(1),10))-FIND(CHAR(1),SUBSTITUTE(A1,"_",CHAR(1),9))) & "*" & MID(A1,1,FIND("_",A1,1)-1) & "*",B:B,1,FALSE)
此公式做出以下假设:
1. Database1 命名约定始终以大小开头。2
. Database1 命名约定在第二个匹配值之前始终有九个下划线。3
. Database1 值在列中A
(上述公式引用了中的第一个 DB1 值A1
)。4
. DB2 值在列中B
。
我使用了这个公式和你的例子,Excel 2010
它对我有用。祝你好运!