新同事昨天发来的一个信息表,气的想辞职!

这是一个只有一列的员工信息表(如下图A列),内容极其混乱。要求提取出收货人、手机号和地址(如下图BCD列)

  • 有的没联系人
  • 有的号码前没有手机,有的是手机,有的是手机号
  • 有的分隔符是分号,有的是逗号
  • 收货人、手机号和地址的前后顺序也不一致。

打开网易新闻 查看更多图片

可以有不少同学想试试Ctrl + E,小编就替你们试一下最简单的手机号:

打开网易新闻 查看更多图片

放弃幻想,只能想法写公式,结果还真写出来一个万能提取公式。

=LET(X,TEXTSPLIT(IF(COUNTIF(A3,"*收货人*")=0,"收货人: "&A3,A3),{",","收货人","地址",":","手机","手机号"},,1),SORTBY(X,LEN(X),1))

打开网易新闻 查看更多图片

是不是被长长的公式吓到了?嘿嘿,别怕,等小编把整个公式思路解析后就会明白原理,相们对于新手来说肯定会有很多收获的。

思路解析:

自从textsplit函数问世,拆分字符变得无比简单。本例也不例外,也要用到它。但问题是有的信息少了收获人,所以需要补齐(如果缺其他项,同样方法)

=IF(COUNTIF(A3,"*收货人*")=0,"收货人: "&A3,A3)

注:收获人后四个空格(一般人名最多4个字)

打开网易新闻 查看更多图片

接下来就可以用textsplit函数拆分了

=TEXTSPLIT(IF(COUNTIF(A3,"*收货人*")=0,"收货人: "&A3,A3),{",","收货人","地址",":","手机","手机号"},,1)

注:大号括{ }内是所有可能的拆分符。

打开网易新闻 查看更多图片

新问题来了,拆分出来的是乱序的。这时该sortby出场了,利用收货人、手机号和地址的字符串长度进行排序。最终公式为:

=LET(X,TEXTSPLIT(IF(COUNTIF(A3,"*收货人*")=0,"收货人: "&A3,A3),{",","收货人","地址",":","手机","手机号"},,1),SORTBY(X,LEN(X),1))

注:因为sortby要两次使用拆分后的内容,为了简化公式,用定义名称(x)的函数LET

打开网易新闻 查看更多图片