分享

一大坨文字,怎么拆分到Excel表?有点难度,新手慎看!

 Excel教程平台 2022-08-18 发布于四川

厌倦了车水马龙,

便想去看山川湖海;

吃腻了白菜豆腐,

便想来点鲜椒小炒;

学够了基础知识,

便想来点儿难度挑战一下。

今天就来出个思考题,

看看大家有没有长进。

数据不规范,加班两行泪。相信每一位Exceler都深有体会,但有些时候,总有一些不谙此道的同事或者XX领导,拿着不规范的数据来挑战你的极限,比如下面这个。

需求:将这样的文本快速地处理到excel中,并按下图所示的表头排列。

好家伙,数据不规范,准备工作倒是挺齐全。

如图所示,excel的表头字段顺序,与数据源的顺序不一致,并且有些字段无内容。

有没有同学想挑战一下的,可以将答案写在评论区哟~

下面,我们先抛砖引玉,给大家两种解决方案吧!

01
函数处理方法

解题思路:函数处理,必须要有辅助的处理过程,然后把处理区的内容“粘贴为数值”到保存区中,按上图布局。

1、在B4:J4单元格区域,输入辅助列,指明文本字符串中的某一部分是字段对应的内容,没有内容的字段不用填,如下:

2、在B7:J7单元格区域输入函数:

=IF(B4="","",TRIM(MID(SUBSTITUTE($B$3,",",REPT(" ",100)),B4*100-99,100)))

向右拉至J7单元格,填充函数,就得到了区分好的内容。

3、最后再复制B7:J7,粘贴数值到下面的“数据保存区”就可以了。

【函数解析】

这是一个经典的按分隔符取字符串的嵌套函数。

首先,使用REPT函数,制作100个空格的字符串,再使用SUBSTITUTE函数将原字符串中的英文逗号都替换成100个空格,

然后,使用MID函数结合我们刚才在第4行加的辅助列,提取从2*100、5*100…为第一位开始的字符串100位,因为空格中都有实际的字符串占位,所以这样就断出我们要的内容了,如果原字符串字数过多,可以调整空格的长度。

最后,用TRIM函数将字符串的左右两端空格去掉,即完成我们的工作了

02
VBA处理方法

如果有VBA基础的,这道题用VBA来解决是最高效的,给大家看看效果。

点击【执行】按钮,就可以快速得到想要的效果,是不是很炫酷呢!

代码分享如下:

代码太长,请向上滑动阅览

Sub 提取() '''工程命名语句

  With Sheets("代码方法") '''使用《代码方法》工作表

    If .[B3] = "" Then '''如果单元格B3为空

      Exit Sub '''结束代码

    Else '''如果单元格B3不为空的情况

      s = .[B3] '''将单元格B3中的值,放入变量s

    End If '''if语句的结束语句

    a = .[B1000000].End(3).Row '''确定B列被操作的最末一行

    If IsNumeric(.Range("B" & a)) = True Then '''为了得到序号,如果B列最后一个不为空的单元格是数值

      xh = .Range("B"& a) + 1  '''说明有初始序号,则此时累加1即可

    Else

      xh = 1 '''说明没有初始序号,序号从1开始计数

    End If

  End With '''with语句的结束语句

  ReDim arr(1 To 1, 1 To 9) '''定义一个1行9列的二维数组arr,装拆分后的数据使用

  s1 = Split(s, ",") '''split函数拆分字符串,赋值到一个数组s1中,此时的s1是一维数组

  '''注意:一维数组s1的初始序号是从0开始的

  arr(1, 1) = xh '''序号列

  arr(1, 2) = s1(1) '''下单时间

  arr(1, 3) = s1(4) '''类型

  arr(1, 4) = s1(0) '''姓名

  arr(1, 5) = s1(2) '''手机

  arr(1, 6) = s1(3) '''地址

  arr(1, 7) = "" '''状态,因为没有字符串可提取,所以也可以不写此句

  arr(1, 8) = "" '''完成时间,因为没有字符串可提取,所以也可以不写此句

  arr(1, 9) = s1(5) '''备注

  With Sheets("代码方法")

    .Range("B" & a + 1).Resize(1, 9) = arr '''在B列被操作的最末一行的下面一行,将arr数组赋值到单元格

  End With

  Erase arr '''清空数组arr

  Erase s1 '''清空数组s1

End Sub '''工程结束语句

记得最后保存的时候,要把文件另存为.xlsm(启用宏的文件)即可完成啦!

注意事项:

这个世界上不存在完美的字符串提取方法,只有写的完美的字符串。

再完善的解决方案,也是建立在文本串本身的规律之上。

如上面的两种方式,都是因为找到了其规律——即5个英文的逗号间隔6个区域的内容。内容可以缺省,间隔符不能少。

如果有不按规矩来的,今天的正确答案便是你眼中的错误答案,“二次操作”肯定是少不了的。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多