附件的图像(链接:https://i.stack.imgur.com/w0pEw.png)显示了我从网络上导入的表格中的一系列单元格(B1:B7)。我需要一个公式,允许我从每个单元格中提取名称。在这种情况下,我的目标是生成以下名称列表,其中每个名称都在其自己的单元格中:Erik Karlsson,P.K. Subban,John Tavares,Matthew Tkachuk,Steven Stamkos,Dustin Brown,Shea Weber。
我一直在阅读有关左,右和中间功能的信息,但是我对不规则的空格和特殊字符(即某些名称旁边带有问号的框)感到困惑。
有人可以帮我提取姓名吗?谢谢
答案 0 :(得分:1)
假设您的单元格遵循相同的格式,则可以使用各种文本函数来获取名称。
此功能需要以下格式:
CHAR(10)
使用这种格式,您可以使用以下公式(假设您的数据在Excel表中,初始数据列名为文本):
=MID([@Text],SEARCH(CHAR(10),[@Text],SEARCH(CHAR(10),[@Text])+1)+1,SEARCH(" ",MID([@Text],SEARCH(CHAR(10),[@Text],SEARCH(CHAR(10),[@Text])+1)+1,LEN([@Text])),SEARCH(" ",MID([@Text],SEARCH(CHAR(10),[@Text],SEARCH(CHAR(10),[@Text])+1)+1,LEN([@Text])))+1)-1)
要想出这个公式,我们采取以下步骤:
首先,我们确定名称的开头。我们知道这是在2行之后发生的,因此我们使用:
=SEARCH(CHAR(10),[@Text],SEARCH(CHAR(10),[@Text])+1)+1
内部{出现的第二行} SEARCH
找到第一行,而外部{发生的第一行}找到第二行。
现在我们有了该值,我们可以使用它来确定字符串的其余部分(在2行之后)。假设先前的公式存储在名为Start of Name
的表列中。第二个公式将是:
=MID([@Text],[@[Start of Name]],LEN([@Text]))
请注意,我们使用的是整个文本的长度,根据定义,该长度超出了我们的需要。但是,这不是问题,因为Excel返回MID
的最后一个参数与文本的实际长度之间较小的值。
一旦我们有了从名字开始的文本,我们就需要计算第二个空格的位置(名字结尾处)。为此,我们需要计算第一个空间的位置。这类似于我们较早地计算名称的开头(在两行后开始)。我们需要的功能是:
=SEARCH(" ",[@[Rest of String]],SEARCH(" ",[@[Rest of String]])+1)-1
现在,我们知道名称的开头(两行后)和结尾的位置(第二行后)。假设我们将这些数字分别存储在名为Start of Name
和To Second Space
的列中,我们可以使用以下公式获取名称:
=MID([@Text],[@[Start of Name]],[@[To Second Space]])
这等效于第一个公式:不同之处在于,第一个公式不使用任何“帮助列”。
当然,如果任何单元格与此格式都不匹配,那么您将很不走运。使用Excel公式解析文本可能是挑剔而僵硬的。例如,如果某人有一个中间名,或某人的名字首字母带有空格(例如,P.K。Subban是P.K. Subban),或者有Jr.
之类的东西,您的工作就会困难得多。
另一种替代方法是使用正则表达式获取所需的数据。我建议使用this thorough answer作为入门。尽管名称格式仍然存在相同的问题。
最后,有一个强制性Falsehoods Programmers Believe About Names作为警告,禁止使用任何标准化的名称格式。