这个数据整理技巧,真的帮了我大忙!节约了几天时间!

具体我们直接来看案例:附件下载见文末
▼ 案例数据
我们需要把这种横向登记的表格转成四列一维表,以便我们后续分析,如果没有工具,我们需要复制粘贴多次!也不能简单的逆透视,毕竟属性相同的多组!
处理这个问题,最合适的工具就是Power Query或者使用VBA代码写成自动化,两种我们都写一下,难度不大!
Power Query处理

步骤1:将在数据进入PQ编辑器
演示使用的版本:O365。2016版本大同小异!
点击数据区域任意位置,点击 【数据】- 【来自表格/区域】,结果确定即可进入PQ编辑器中!
步骤2 :使用M函数转换处理
转换后的结果效果如下图!
▼ 结果部分截图
▼对应的M函数及注释说明
▼源码
let
    源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    // 按列转成列表
    toC= Table.ToColumns(源),

// 两列一组
    toGroup = List.Split(toC,2),

// 姓名和费用列
    headCol = toGroup{0},

// 对日期和金额列,两个一组和姓名和利用组合
    trans = List.Transform(List.Skip(toGroup),each
        Table.FromColumns( // 从列的列表转成table
                headCol & _,
                {"姓名","费用类型","日期","金额"}
                )
            ),

// 将每组的table合并
    res = Table.Combine(trans)

in
    res

注释说明的已经比较详细,其中的大部分函数,之前的M函数教程也都有所提及,部分没有提及的,这里简单说一下!
M函数解析
List.Split(列表,几个元素一组)
案例说明:讲1-4的列表,按每两个元素拆成一个小的List
如果你由于版本等因素无法使用PQ或者不想使用PQ,那么请看下面的VBA处理吧!
List.Skip(列表):跳过列表中的第一个元素
当然这只是他的一种常见用法,其中他支持第二参数条件判断过滤
第二参数 用法1:指定跳过几个元素
第二参数 用法2:指定条件过滤元素

第二种用法,新手可能比较迷惑!这里我们多做一些说明。List.Skip的作用是跳过列表中的元素,也就是说,从第一个元素开始,使用第二参数的条件依次判断,如果满足条件就会被删除掉,直接第一个不满足条件的元素停止执行,结果就是第一个不满足条件的元素开始到剩下的全部元素!
其他相关的M函数,大家可以点击公众号名称-在底部菜单中-找到PQ和M函数相关的系列教程,进行更加系统和深入的学习!
VBA模板
▼ 动画演示
▼ 代码截图
代码中把转换结果转入数组,一次性写入表格,速度相对较快,尤其对于大量数据效果尤为明显!
新手可以使用复制粘贴的方式,思路比较简单,6列三组 日期和金额,循环复制三次前两列+对应的日期和金额列即可!
对应代码已含对应的Excel文件中,请大家在文末自行下载测试和练习!
其中包括Power Query和VBA两种解法的源码,但是更希望大家能自己动手写一遍,效果更佳!!

本文由“壹伴编辑器”提供技术支持

附件下载:复制下面地址,粘贴到浏览器中即可下载使用

https://share.weiyun.com/MtwMA9s7

感谢(收藏、点赞、在看、转发),您的鼓励是小编不断创作的动力!

(0)

相关推荐