我在Excel中有2个列数据,如下所示:
有人可以帮助我在C列中编写一个公式,该公式将从列A中取名字或姓氏,并将其与列B匹配,并将值粘贴到列C中。下图将为您提供准确的说明我想做。感谢
答案 0 :(得分:0)
这似乎做你想要的。
=IFERROR(VLOOKUP(LOWER(MID(A1,(SEARCH(" ",A1)+1),LEN(A1)))&LOWER(MID(A1,1,1))&"*",$B$1:$B$4,1,FALSE),VLOOKUP(LOWER(MID(A1,1,1))&LOWER(MID(A1,(SEARCH(" ",A1)+1),LEN(A1)))&"*",$B$1:$B$4,1,FALSE))
它非常疯狂,可能更容易消化和调试分解成列而不是一个巨大的公式。
它基本上通过拆分空间使得FLast和FirstL不在名称字段中。
LastF:
=LOWER(MID(A1,(SEARCH(" ",A1)+1),LEN(A1)))&LOWER(MID(A1,1,1))
和FirstL:
=LOWER(MID(A1,1,1))&LOWER(MID(A1,(SEARCH(" ",A1)+1),LEN(A1)))
然后我们使用通配符为这些做出2次vlookup:
LastF:
=VLOOKUP([lastfirst equation from above]&"*",$B$1:$B$4,1,FALSE)
和FirstL:
=VLOOKUP([firstlast equation from above]&"*",$B$1:$B$4,1,FALSE)
然后将它们包装在IfError中,这样它们都会被尝试:
=IfError([firstLast vlookup],[lastfirst vlookup])
如果你需要的话,那就是编辑的地狱,这就是为什么我建议你在另一个专栏中做每个部分然后引用前一个部分。 你还需要知道这个答案会被基本相同的名字绊倒 - 例如Sam Smith和Sasha Smith都会匹配ssmith的第一个条目。这里的任何解决方案都可能存在同样的缺陷。
答案 1 :(得分:0)
由于您的数据不是"常规",您可以尝试使用通配符查找姓氏的公式。
=INDEX($B$1:$B$4,MATCH("*" &MID(A1,FIND(" ",A1)+1,99)&"*",$B$1:$B$4,0))
如果第一部分遵循一些规则会更简单,但有些规则在开头有第一个名字的第一个首字母;和其他人在最后。
修改: (已添加说明)
FIND
会返回第一个space
的字符编号
添加1以获取下一个单词的字符编号
使用MID
提取该字词
在MATCH
(使用之前和之后的通配符)中使用该字词,以便在电子邮件地址数组中找到它。这将返回它在数组中的位置(行号)
使用该行号作为INDEX
函数的参数,以返回实际的电子邮件地址。
如果您想首先检查电子邮件地址,您需要确定哪个字母包含姓氏。根据您的示例,这不是常规的,您需要检查两个选项。
您将无法从电子邮件中查找名字,因为它不存在。
如果您可以保证第一部分将遵循其中一条或另一条规则,例如:
然后你可以试试这个:
=IFERROR(INDEX($B$1:$B$4,MATCH(MID(A1,FIND(" ",A1)+1,99)& LEFT(A1,1) &"*",$B$1:$B$4,0)),
INDEX($B$1:$B$4,MATCH( LEFT(A1,1)&MID(A1,FIND(" ",A1)+1,99) &"*",$B$1:$B$4,0)))