需求
由于多种原因(比如从网上下载的数据)我们拿到手的原始数据,虽然是有多个字段,但是所有数据却被集中到一列之中那么我们该如何将一列数据展开成原本的多列数据呢?

原始数据
如图所示原始数据,原本是5列数据,但是集中在一列之中。

预期结果
将原始数据的一列重新展开成5列

操作步骤
方法一
分别在C2、D2、E2、F2、G2单元格输入以下公式,然后向下拖动即可获得结果数据。
C2单元格
=INDEX(A:A,(ROW()-2)*5+1)D2单元格
=INDEX(A:A,(ROW()-2)*5+2)E2单元格
=INDEX(A:A,(ROW()-2)*5+3)F2单元格
=INDEX(A:A,(ROW()-2)*5+4)G2单元格
=INDEX(A:A,(ROW()-2)*5+5)
备注:上面的5个公式,其实除了最后一个数字递增外其他都相同,因此我们还可以将C2单元格简化成一个公式
=INDEX($A:$A,(ROW()-2)*5+COLUMN(A1))
然后向右向下拖动即可。
方法二
分别在C2、D2、E2、F2、G2单元格输入以下公式,然后向下拖动即可获得结果数据。
C2单元格
=OFFSET($A$1,(ROW()-2)*5,0,1,1)D2单元格
=OFFSET($A$1,(ROW()-2)*5+1,0,1,1)E2单元格
=OFFSET($A$1,(ROW()-2)*5+2,0,1,1)F2单元格
=OFFSET($A$1,(ROW()-2)*5+3,0,1,1)G2单元格
=OFFSET($A$1,(ROW()-2)*5+4,0,1,1)

备注:同理以上公式可以简化成一个公式,在C2单元格中输入公式=OFFSET($A$1,(ROW()-2)*5+COLUMN(A1)-1,0,1,1)然后向右向下拖动即可。
公式解析
该需求解决思路很简单,利用原始数据中每个字段相邻两个值,是相差5行的等差数列这一特性,可以通过拖动来获取相应字段的每个值的引用位置。
不管方法一还是方法二其核心是通过row()函数向下拖动来构造获得对应字段中每个值在A列中的位置。以方法一中的C列为例:
C2单元格公式 ROW()=2,(ROW()-2)*5+1=1 对应第1个姓名A1单元格的 1
C3单元格公式 ROW()=3,(ROW()-2)*5+1=6 对应第2个姓名A6单元格的 6
C4单元格公式 ROW()=4,(ROW()-2)*5+1=11 对应第3个姓名A11单元格的 11