Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于搜索部分匹配和对齐行的Excel公式_Excel_Excel Formula - Fatal编程技术网

用于搜索部分匹配和对齐行的Excel公式

用于搜索部分匹配和对齐行的Excel公式,excel,excel-formula,Excel,Excel Formula,我在Excel中有两列数据,如下所示: 有人能帮我在C列中写一个公式,从a列中取名字或姓氏,并将其与B列匹配,然后将值粘贴到C列中。下面的图片将告诉您我正试图做什么。谢谢 这似乎是你想要的 =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,(

我在Excel中有两列数据,如下所示:

有人能帮我在C列中写一个公式,从a列中取名字或姓氏,并将其与B列匹配,然后将值粘贴到C列中。下面的图片将告诉您我正试图做什么。谢谢


这似乎是你想要的

=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))
=VLOOKUP([lastfirst equation from above]&"*",$B$1:$B$4,1,FALSE)
首先:

=LOWER(MID(A1,1,1))&LOWER(MID(A1,(SEARCH(" ",A1)+1),LEN(A1)))
=VLOOKUP([firstlast equation from above]&"*",$B$1:$B$4,1,FALSE)
然后,我们使用通配符为这些设置2个VLookup:

LastF:

=LOWER(MID(A1,(SEARCH(" ",A1)+1),LEN(A1)))&LOWER(MID(A1,1,1))
=VLOOKUP([lastfirst equation from above]&"*",$B$1:$B$4,1,FALSE)
首先:

=LOWER(MID(A1,1,1))&LOWER(MID(A1,(SEARCH(" ",A1)+1),LEN(A1)))
=VLOOKUP([firstlast equation from above]&"*",$B$1:$B$4,1,FALSE)
然后把它们包在Iferro里,这样它们就都可以试一下了:

=IfError([firstLast vlookup],[lastfirst vlookup])
问题是,如果你需要的话,这将是一个很难编辑的地方,这就是为什么我建议在另一个专栏中做每一篇文章,然后参考上一篇。 您还需要注意,这个答案会被本质上相同的名字绊倒-例如,Sam Smith和Sasha Smith都会匹配ssmith的第一个条目。这里的任何解决方案都可能有相同的陷阱。

由于您的数据不是“常规”的,您可以尝试使用通配符查找姓氏的公式

=INDEX($B$1:$B$4,MATCH("*" &MID(A1,FIND(" ",A1)+1,99)&"*",$B$1:$B$4,0))
如果第一部分遵循一些规则会更简单,但有些部分在开头有名字的首字母;最后还有其他人

编辑:(添加说明)

FIND
返回第一个
空格的字符号
加上1,得到下一个单词的字符号 使用
MID
提取该单词

匹配中使用该单词(前后带有通配符),在电子邮件地址数组中查找该单词。这将返回它在数组中的位置(行号)

将该行号用作
INDEX
函数的参数,以返回实际电子邮件地址

如果您想首先检查电子邮件地址,您需要确定哪些字母构成姓氏。因为根据您的示例,这不是常规的,所以您需要检查这两个选项

您将无法从电子邮件中查找名字,因为它不存在

如果你能保证第一部分将遵循一个或另一个的规则,例如:要么

  • FirstInitialLastName或
  • LastNameFirstInitial
然后你可以试试这个:

=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)))

伟大的它起了神奇的作用!只查找姓氏很酷,因为大多数电子邮件id都包含姓氏。1) 但是如果我只想查找名字,我需要在公式中修改什么?、2)如果我想反转,即从邮件id搜索“wyatt”wyattm@uapb.edu'和对齐'吉祥物怀亚特'&3)如果我从电子邮件id中查找名字并对齐全名。这三个公式是什么,你能回答吗?这不是一个代码/公式编写网站。我将在我的回答中补充解释它是如何工作的。这将使您能够了解如何根据您想要执行的操作对其进行修改。