Excel非一致数据提取

我已经很难find一个解决scheme – 虽然我确定它在那里。 只是不确定的确切的措辞,以获得我在找什么。

我有一个庞大的数据集,其中的一些数据缺less信息,所以它是不统一的。 我想提取名称到一个列,电子邮件到下一列。

我可以缩小这个范围的最好方法是在每个唯一的条目之间有一个空格,并且名字总是在第一个空格中。

例:

John Doe
John Doe的公司
(555)555-5555
John.doe@johndoe.com

John Doe
(555)555-5555

John Doe
简·杜的公司
John.doe@johndoe.com

想要结果(在两个excel列中):

John Doe | john.doe@johndoe.com
John Doe |
John Doe | john.doe@johndoe.com

任何build议最好的方式来做到这一点将不胜感激。 如果没有电子邮件,使其变得复杂,我会想完全忽略该设置,但是我可以手动检查。

VBA编码:
1.在行1中指示数据开始的起始行。
2.在这种情况下放置一个标志“end”来表示信息的结尾。
3.创build第二张表

Sub ToList() Row1 = 1 'Row initial from data Row2 = 1 'Row initial to put list Do Name = False Do field = Trim(Sheets(1).Cells(Row1, 1)) If field <> "" And LCase(field) <> "end" And Not Name Then Sheets(2).Cells(Row2, 1) = field Name = True End If Row1 = Row1 + 1 Loop Until (IIf(field = "" Or LCase(field) = "end", True, False)) fieldprev = Sheets(1).Cells(Row1 - 2, 1) If InStr(fieldprev, "@") > 0 Then Sheets(2).Cells(Row2, 2) = fieldprev End If Row2 = Row2 + 1 Loop Until (IIf(LCase(field) = "end", True, False)) End Sub 

提取电子邮件地址不应该太困难,因为您只需要search包含@字符的string。 可以使用一系列search()和mid()函数来分离单个单词。 search空间的每个实例,并在mid()函数中使用该值。 然后在结果中search@并find电子邮件地址。 如果原始数据非常混乱,提取名称会更困难。

不过,我在上面关于使用外部脚本的评论,特别是对于大型数据集。 Excel并不是真正为你在这里描述的东西而devise的。