
今天我们来介绍一个利用小学数学来清洗数据的小技巧。
首先看一下今天需要用到的基础知识。
最重要的当然是是定位函数Indirect,可以参见之前的文章:
然后还要介绍一个获取单元格行数信息的函数ROW。这个函数只接受一个参数,就是单元格位置,然后会返回行数。比如ROW(A1)=1,ROW(B2)=2。很好理解。这个函数的特殊之处就在于它的输入参数可以输入单元格自己,让我们能够获取到正在操作的单元格的行数信息。比如我们可以在A1单元格输入:

可以看到获取到A1单元格的行数信息为1。
基础知识就以上这些。
下面老规矩,我们来看一个场景。
我拿到一份奇怪格式的数据,因为导出的原因导致原始数据格式错乱,所有的数据都挤到了同一列中间:

这在OCR识别结果,或者一些CSV文件导入时时有发生。
这个数据肯定是没法直接用的,我们现在就需要将这个单列的数据按照规律整理成数据表。
我们一步一步来做分析。
首先观察一下原始数据,很明显,这个例子里面的原始数据由3部分组成:序号,公司名,金额。并且不断重复。
很容易想到,我们可以根据这个规律要取到单元格的内容。要取单元格的内容,肯定首选Indirect函数,考虑到我们需要根据单元格的行数来设计一个取数规律,那当然需要使用R1C1样式。想好了以后开始着手整理,我们从取公司名开始。
首先构造一个最终需要呈现的表格的样式,很显然大概应该长这样:

然后尝试写下几个包含公司名的单元格的位置信息:

并且使用Indirect函数取数:

确认取数的结果正确以后,我们尝试利用row函数列出这些单元格的位置信息,并且观察与取数位置的规律:

通过简单的归纳总结我们可以发现,行数和取数位置的规律如下:

这样我们就可以把取数位置中的行数,利用函数运算结果来代替,结果如下:

然后粗暴的自动填充,哇啦,公司名已经整整齐齐的排好了。
后面只需要大概修改取数公式,我们就可以把金额也取出来,这样自动填充后我们就完成了原始数据的整理。

为了防止图片清晰度问题,下面贴上这个例子的公式样本:
=INDIRECT("R"&((ROW(B2)-1)*3-1)&"C1",FALSE)
如果对Excel的一些偏门小技巧或者想了解VBA、Python等一些办公自动化的知识的话关注我吧!