分享

Excel多列内容首尾相连合并为一列,学会了绝对涨姿势

 weimiao 2018-07-17

我们在平时处理数据的过程中,经常会遇到如下图1的数据形式,类似的数据格式在下一步的各种数据分析过程中是很不方便的,为此我们常常需要将数据转换为图2的形式。

Excel多列内容首尾相连合并为一列,学会了绝对涨姿势

图1

Excel多列内容首尾相连合并为一列,学会了绝对涨姿势

图2

那么,我们如何能够快速的将数据转换为图2要求的格式呢?下面介绍两种方法。

一、公式法

使用IF、SMALL、RIGHT、TEXT、ROW、COLUMN、INDIRECT函数的配合,可以实现本功能。公式如下:

部门:=INDIRECT(TEXT(RIGHT(SMALL(IF($A$2:$E$16<>'',ROW($2:$16)*10+COLUMN($A:$E)*10001,99999),ROW(A1)),1),'r1c0'),)&''

姓名:=INDIRECT(TEXT(RIGHT(SMALL(IF($A$2:$E$16<>'',ROW($2:$16)*10+COLUMN($A:$E)*10001,99999),ROW(A1)),3),'r0c0'),)&''

结果为:

Excel多列内容首尾相连合并为一列,学会了绝对涨姿势

该公式看起来非常复杂,下面以姓名为例对该公式做一下解释:

$A$2:$E$16<>'':根据A2:E16是否为空,生成一个逻辑数组,该数组为15行5列。{TRUE,TRUE,TRUE,TRUE,TRUE; TRUE,TRUE,TRUE,TRUE,TRUE;……},表格示意如下:

Excel多列内容首尾相连合并为一列,学会了绝对涨姿势

ROW($2:$16)*10:行数组成的数组,该数组为15行1列。{20;30;40……160};

COLUMN($A:$E)*10001:列数组成的数组,该数组为1行5列。{10001,20002,3003,40004,50005};

ROW($2:$16)*10+COLUMN($A:$E)*10001:以上两个数组相加,根据数组运算法则,生成15行5列的数组。{10021,20022,30023,40024,50025;10031……}。表格示意如下:

Excel多列内容首尾相连合并为一列,学会了绝对涨姿势

IF():根据前面的逻辑数组,如果为空的全部填充为99999。{10021,20022,30023,40024,50025;10031……},表格示意如下:

Excel多列内容首尾相连合并为一列,学会了绝对涨姿势

SMALL(……,ROW(A1)):依次从小到大取出上述数组中的数据。

RIGHT(……,3):取出上述数据的后3位,上述的数据中最后一位表示单元格的列号,倒数第二位表示行号。

TEXT(……,'r0c0'):将上一步取出来的数字格式化为RC格式的单元格引用。

INDIRECT(……,):将文本变为单元格的引用,第二个参数省略代表引用为RC模式。

二、POWER QUERY工具

Excel官方发布了POWER QUERY工具,可以更加方便的对数据进行处理,在Excel 2016中已经自带了本工具,其他版本的Excel可以在微软官方网站下载安装包。

Excel多列内容首尾相连合并为一列,学会了绝对涨姿势

下面就演示使用该工具实现上述的功能,在工具面板中选择'从表/范围',弹出编辑PQ的编辑界面。

Excel多列内容首尾相连合并为一列,学会了绝对涨姿势

在【转换】选项卡下选择【逆透视列】,就可以得到需要的结果啦,然后将结果上载回工作表。

Excel多列内容首尾相连合并为一列,学会了绝对涨姿势

Excel多列内容首尾相连合并为一列,学会了绝对涨姿势

怎么样,PQ工具的实现是不是很简单呢?同时,该工具还提供了其他非常多的使用功能呢,大家可以多了解一下,同时再后期我也会持续给大家分享相关功能,希望大家一如既往的关注哟。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多