新 Outlook (Office 365) 中用户名和邮件地址的分隔 Excel 公式
Separation of user names and mail address in new Outlook (Office 365) by Excel formula
我在使用新版 Outlook (Office 365) 时遇到问题,他们通过删除我之前用于将邮件地址与用户分开的 <
和 >
字符来“改善用户体验”名字.
我从 Outlook 复制了所有地址,粘贴到邮件正文中,单击用段落标记替换 ; <
,这给了我一个列,我将其复制到 Excel column A
.我在 B column
中有一个公式 =IFERROR(MID($A2;FIND("<";$A2)+1;LEN(A2)-FIND("<";$A2));A2)
,结果,即仅清除邮件地址,我可以出于各种目的检查我们的内部数据库。
现在我无法使用这些括号 - 我可以定位 search/find 公式来找到句号 .
字符;我也知道地址从它左边的第一个 space 开始,但由于我们员工的疯狂多样性,它可能是左边第二个、第三个或第四个 space。
示例地址可以是Woodward, Robert Paul robert.woodward@ourcompany.com
,或Myname, Petr petr.myname@ourcompany.com
,或Xyz, Roxana Denise Ariela roxana.xyz@ourcomany.com
。我不确定我是否应该尝试以某种方式更改 Outlook 设置,以便它再次开始显示括号(尝试但未能找到),或者是否有一个公式在 [=17 的左侧寻找第一个 space =].
=find()
公式是从左往右看的(除非我改变写作方向),所以经过多年的经验,我一无所知,但希望不是我一个人遇到同样的问题。
一个非常普遍的想法是在特定字符上“拆分”一个字符串(space 在你的例子中)。您可以使用:
B1
中的公式:
=FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s[last()]")
"<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>"
- 这会创建一个有效的 XML 字符串。
- 在
FILTERXML()
的帮助下,我们可以使用给定的有效 XPATH 表达式分析这个 XML 字符串:"//s[last()]"
,意思是:return最后一个节点.
有关 FILTERXML()
的更多信息以及它用于在任何给定字符上“拆分”字符串,请参阅 较早的 post。
作为替代方案,您可以使用以下公式-
=TRIM(RIGHT(SUBSTITUTE(A1," ", REPT(" ",200)),200))
好吧,我暂时解决了这个问题,虽然很笨拙,把这个公式放到B列中。
"=MID(A2;FIND(" ";A2)+1;LEN(A2)-FIND(" ";A2)+1)"
(EN 设置需要用逗号替换分号),并将相同的公式复制到 C、D 和 E 列,直到我在整个列中得到所有结果无空格(我那里有 150 行)。
因为当找不到更多空格时会产生 "#VALUE!"
错误,所以我将错误处理放在那里:"=IFERROR(IFERROR(MID(D2;FIND(" ";D2)+1;LEN(D2)-FIND(" ";D2)+1);D2);C2)"
,它将公式重定向到下一个左边的非错误结果. (我什至可以用实际的 D2 和 C2 公式替换 D2 和 C2,并且可以将它们全部放在一列中,但考虑到文本公式通常是为了快速需要而完成的,并且创建起来应该更快比起手工一条一条的处理记录,简直称不上“优雅”)。
我可以考虑创建一个 UDF 函数来检查从右到左方向的空格,但这不值得。
我在使用新版 Outlook (Office 365) 时遇到问题,他们通过删除我之前用于将邮件地址与用户分开的 <
和 >
字符来“改善用户体验”名字.
我从 Outlook 复制了所有地址,粘贴到邮件正文中,单击用段落标记替换 ; <
,这给了我一个列,我将其复制到 Excel column A
.我在 B column
中有一个公式 =IFERROR(MID($A2;FIND("<";$A2)+1;LEN(A2)-FIND("<";$A2));A2)
,结果,即仅清除邮件地址,我可以出于各种目的检查我们的内部数据库。
现在我无法使用这些括号 - 我可以定位 search/find 公式来找到句号 .
字符;我也知道地址从它左边的第一个 space 开始,但由于我们员工的疯狂多样性,它可能是左边第二个、第三个或第四个 space。
示例地址可以是Woodward, Robert Paul robert.woodward@ourcompany.com
,或Myname, Petr petr.myname@ourcompany.com
,或Xyz, Roxana Denise Ariela roxana.xyz@ourcomany.com
。我不确定我是否应该尝试以某种方式更改 Outlook 设置,以便它再次开始显示括号(尝试但未能找到),或者是否有一个公式在 [=17 的左侧寻找第一个 space =].
=find()
公式是从左往右看的(除非我改变写作方向),所以经过多年的经验,我一无所知,但希望不是我一个人遇到同样的问题。
一个非常普遍的想法是在特定字符上“拆分”一个字符串(space 在你的例子中)。您可以使用:
B1
中的公式:
=FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s[last()]")
"<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>"
- 这会创建一个有效的 XML 字符串。- 在
FILTERXML()
的帮助下,我们可以使用给定的有效 XPATH 表达式分析这个 XML 字符串:"//s[last()]"
,意思是:return最后一个节点.
有关 FILTERXML()
的更多信息以及它用于在任何给定字符上“拆分”字符串,请参阅
作为替代方案,您可以使用以下公式-
=TRIM(RIGHT(SUBSTITUTE(A1," ", REPT(" ",200)),200))
好吧,我暂时解决了这个问题,虽然很笨拙,把这个公式放到B列中。
"=MID(A2;FIND(" ";A2)+1;LEN(A2)-FIND(" ";A2)+1)"
(EN 设置需要用逗号替换分号),并将相同的公式复制到 C、D 和 E 列,直到我在整个列中得到所有结果无空格(我那里有 150 行)。
因为当找不到更多空格时会产生 "#VALUE!"
错误,所以我将错误处理放在那里:"=IFERROR(IFERROR(MID(D2;FIND(" ";D2)+1;LEN(D2)-FIND(" ";D2)+1);D2);C2)"
,它将公式重定向到下一个左边的非错误结果. (我什至可以用实际的 D2 和 C2 公式替换 D2 和 C2,并且可以将它们全部放在一列中,但考虑到文本公式通常是为了快速需要而完成的,并且创建起来应该更快比起手工一条一条的处理记录,简直称不上“优雅”)。
我可以考虑创建一个 UDF 函数来检查从右到左方向的空格,但这不值得。