【发布时间】:2015-03-12 21:00:31
【问题描述】:
我在 Excel 中有 2 列数据,如下所示:
有人可以帮我在 C 列中编写一个公式,该公式将从 A 列中获取名字或姓氏,并将其与 B 列匹配,然后将值粘贴到 C 列中。下图将为您提供确切的想法我正在努力做。谢谢
【问题讨论】:
标签: excel excel-formula
我在 Excel 中有 2 列数据,如下所示:
有人可以帮我在 C 列中编写一个公式,该公式将从 A 列中获取名字或姓氏,并将其与 B 列匹配,然后将值粘贴到 C 列中。下图将为您提供确切的想法我正在努力做。谢谢
【问题讨论】:
标签: excel excel-formula
由于您的数据不是“常规”数据,您可以尝试使用通配符来查找姓氏的公式。
=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)))
【讨论】:
这似乎可以满足您的需求。
=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 脱离名称字段。
最后一个:
=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:
最后一个:
=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])
问题在于,如果您需要编辑,那将是地狱般的编辑,这就是为什么我建议在另一列中完成每一部分,然后参考前一列。 您还需要注意,此答案将被基本相同的名称绊倒 - 例如无论 ssmith 的第一个条目是什么,Sam Smith 和 Sasha Smith 都会匹配。这里的任何解决方案都可能有同样的陷阱。
【讨论】: