【问题标题】:Excel 2010 search for text in IF function - separate cell dataExcel 2010 在 IF 函数中搜索文本 - 单独的单元格数据
【发布时间】:2014-01-29 20:57:32
【问题描述】:

程序: 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))))))

当我试图区分 First、Middle、Last (email) 时,我也遇到了诸如 W.H. Minder (m@e.net) 之类的名字

执行多个步骤是否更容易?

提前谢谢你。

【问题讨论】:

  • @pnuts 我使用 Text to Columns 进行日期转换,我可以看到它与它一起工作。所以,继续我的做法,“基本版本”,然后在我最终的“复制/值”之后,然后拆分单元格,返回并删除 K 列?
  • @pnuts,谢谢,我稍后再试。

标签: excel if-statement excel-formula excel-2010


【解决方案1】:

解析名称并不简单,因为存在各种变化。正如您所展示的,您的数据存在一个问题,它将测试 First Name 是否真的是 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))

名字将是第一个“单词”,因此您可以测试一下是先生还是夫人或您不想返回的东西。

当且仅当存在三个名字时才会返回中间名,但可以重写以返回除名字和姓氏之外的所有名字

【讨论】:

  • 谢谢。我的数据中没有 Mr、Mrs、Ms,我应该将其表示为 Joe、Jen、Jac 等。这看起来很棒,我会在我的数据上尝试一下。但这仍然只有在数据清理后才有效?期间不?无法写入原始数据解析? =IF($C7=1,B13,"")(如果没有也没关系,但如果可能的话,我宁愿跳过这一步)。我总是在单元格中填写姓名(1,2 或 3 个部分以及 () 中的电子邮件不会更改)
  • 我不知道你所说的“数据清理”是什么意思。在您之前和之后的示例中,Orig2 和 NameAll 中的数据似乎是相同的。该公式应该适用于该格式的数据——FN [MN] LN(电子邮件)所以我不知道您要对名称(电子邮件)数据做什么。正如您可以通过使用 TRIM 看到的那样,这些公式将删除多余的空格。请提供您认为是“脏”数据的示例。也许就像将公式包装成一个结构一样简单,例如 =if(a1="order",one_of_the_formulas,"")
  • 这是我的工作表:imgur.com/hLBh6na 这是我必须复制和粘贴的销售历史记录,我清理并订购它,每个订单的数据总是 9 行 2 列。标题 (A),价值 (B)。我通过使用锚将数据的每个部分移动到 1 order = 1 行:(C7)->=IF(A7="Order",1,"") 然后是数据(第 7 行以上,Col A-Z)=IF($C7=1,B13,"")。 (P,Q,R)当我自动填充(C7)中的其余信息时,我想要分解名称。我目前必须移动名称,然后将其分解,我想在移动时尝试分解它。我希望能更好地解释它:)谢谢。
  • 我花了一点时间,但我重新审视了你写的和我的代码,现在我有了它:) 完美运行。我的中间名有问题,我不知道我可以在 1 公式中有 2 个 IF。我现在这样做:) =IF($C8=1,(IF(LEN(TRIM(K107))-LEN(SUBSTITUTE(K107," ",""))&lt;&gt;3,"",LEFT(MID(TRIM(K107),FIND(" ",TRIM(K107))+1,99),FIND(" ",MID(TRIM(K107),FIND(" ",TRIM(K107))+1,99))-1)))) 根据需要给我“H”,现在要在我的整个工作表上运行它。杰出的!谢谢你。如果您对我发布的工作表有任何建议,我会很乐意阅读。 :D
  • 我很高兴你的公式能正常工作。是的,您可以在一个公式中包含多个 IF。公式长度和嵌套是有限制的,但你不应该遇到那些你正在尝试做的事情。关于您的工作表,您发布了一张图片,因此我无法在不做大量工作的情况下使用它。但我最初的印象是,使用 VBA 宏将所需信息提取到某种报告中会容易得多。您需要了解 VBA 和使用宏,但从长远来看,这可能是值得的。
猜你喜欢
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 2021-11-18
相关资源
最近更新 更多