程序: Excel 2010
要求:一种将名字、姓氏、电子邮件提取到单个单元格的方法。
数据:我的数据有一个带有原始“脏数据”的表,它是原始的而且一团糟。我用一个简单的 =IF(A7="Order",1,"")
来整理它,然后其余单元格如下:=IF($C7=1,B13,"")
例子:
(A) | Orig2 | Header? (C) | NameAll (K) | Price |
----------------------------------------------------------------------------------------
Order | Ms Admin (e@m.com) | =IF(A7="Order",1,"") | =IF($C7=1,B13,"") | =IF($C7=1,B5,"")
Order | Mr Joe (e@m.com) | =IF(A8="Order",1,"") | =IF($C8=1,B14,"") | =IF($C8=1,B6,"")
Order | Ms Fred (e@m.com) | =IF(A9="Order",1,"") | =IF($C9=1,B15,"") | =IF($C9=1,B7,"")
结果是:
(A) | Orig2 | Header? (C) | NameAll (K) | Price |
------------------------------------------------------------------------
Order | Ms Admin (e@m.com) | 1 | Ms Admin (e@m.com) | 13.99
Order | Mr Joe (e@m.com) | 1 | Mr Joe (e@m.com) | 15.99
Order | Ms Fred (e@m.com) | 1 | Ms Fred (e@m.com) | 17.99
工作 在我复制单元格值之后,然后在我的工作表上“复制/值”,然后我可以在
(U7)
中使用以下(从()之间提取电子邮件)=IFERROR(MID(K7,(SEARCH("(",K7)+1),((SEARCH(")",K7)-(SEARCH("(",K7)+1)))),"")
我想要做的是从数据移动的开始,所以我可以完全错过复制旧的步骤,到新的,然后是数据提取
试过:失败的
=IFERROR($C7=1,B13(MID(B13,(SEARCH("(",B13)+1),((SEARCH(")",B13)-(SEARCH("(",B13)+1))))))
当我试图区分第一个、中间、最后一个(电子邮件)时,我也遇到了这样的名字:W. H. Minder (m@e.net)
执行多个步骤是否更容易?
先感谢您。
最佳答案
由于所有的变化,解析名称并不简单。正如您所展示的那样,您的数据存在一个问题,它将测试名字是否真的是像 Mr Ms 等这样的头衔。
我的偏好是使用 VBA 和正则表达式来执行此操作,但这里有一些您可以使用的公式:
Email: =MID(TRIM(A1),FIND("(",TRIM(A1))+1,FIND(")",TRIM(A1))-FIND("(",TRIM(A1))-1)
First Name: =LEFT(TRIM(A1),FIND(" ",TRIM(A1))-1)
Middle Name: =IF(LEN(TRIM(A1))-LEN(SUBSTITUTE(A1," ",""))<>3,"",LEFT(MID(TRIM(A1),FIND(" ",TRIM(A1))+1,99),FIND(" ",MID(TRIM(A1),FIND(" ",TRIM(A1))+1,99))-1))
Last Name: =TRIM(RIGHT(SUBSTITUTE(TRIM(LEFT(A1,FIND("(",A1)-1))," ",REPT(" ",99)),99))
名字将是第一个“单词”,因此您可以测试它是先生还是夫人或您不想返回的东西。
当且仅当存在三个名字时才会返回中间名,但可以重写以返回除名字和姓氏之外的所有名字
关于Excel 2010 在 IF 函数中搜索文本 - 单独的单元格数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21442485/