如何将多列数据合并为一列(公式法)

这是一个利用 OFFSET 函数嵌套 MOD函数、INT函数、ROW函数 来实现将多列数据合并为单列数据的教程。
 
    本文中的 OFFSET 公式由 WPS论坛 @落寞冬日 提供,特此表示感谢!

 


    如图,我们有3列数据,每列有4行,要将其按列合并为一列,应该如何操作呢?
多项1

 


    我们可以使用 OFFEST 函数嵌套 MODINTROW 等函数,来实现这一个需求。

    公式 1

  1. =OFFSET($A$2,MOD(ROW(A2)-2,4),INT((ROW(A2)-2)/4))

    公式讲解

多项2 

    1OFFSET函数:

    offset 在英语中是偏移量的意思。OFFSET 函数的作用,就是以一个指定的单元格为参照系,然后通过列、行的偏移,返回一个新的引用。
    比如我想求得图1中,A2单元格向下3列,向右2列的单元格的值,可以使用下面的公式:

  1. =OFFSET(A2,3,2) 

多项3

多项4

 


    A1单元格向下偏移3行,向右偏移2列,最终到达的是C5单元格。因此计算结果为C5单元格的值:C4

    回到题目,要达到多列数据合并为一列的需求,我们也可以用 OFFSET 函数来实现。

    我们先把构建这个公式所需要的各个参数列举出来:


多项5

 


    第一个参数,参照区域,我们采用数据区左上角的单元格,A2。为保证将来公式填充后这个参数的数值不变,我们给它加上绝对引用,变为 $A$2

    第二个参数所需列偏移量和第三个参数所需行偏移量,需要再另外构建公式。

    2、构建列偏移量

    从上图我们可以看到,我们所需的列偏移量是一组数列:0, 1, 2, 3, 0, 1, 2, 3, ... 构建这个数列,我们可以采用下面的公式:

  1. =MOD(ROW(A2)-2,4)
多项6

     
    ① 求单元格 A2 的行号,计算结果为2
    ② 此处填写数据区左上角所在单元格的行号。在本例中,数据区左上角为 A2 单元格,可以直接填写 A2 单元格的行号2,也可以填写为公式:ROW($A$2) 
    ③ ①-,计算结果为0
    ④ 此处填写数据区的总行数。在本例中,数据一共有4行,可以直接填写4,也可以填写公式:ROWS($A$2:$A$5)
    整个公式表示:求A2单元格的行号,然后减去2,所得结果再除以4,最后求所得余数。计算结果为0

    下图是构建列偏移量公式时的思路,可参考。


多项7

 


    3、构建行偏移量

    从上图我们可以看到,我们所需的行偏移量是一组数列:0, 0, 0, 0, 1, 1, 1, 1, ... 构建这个数列,我们可以采用下面的公式:

  1. =INT((ROW(A2)-2)/4))
多项8

      


    ① 求单元格 A2 的行号,计算结果为2
    ② 此处填写数据区左上角所在单元格的行号。在本例中,数据区左上角为 A2 单元格,可以直接填写 A2 单元格的行号2,也可以填写为公式:ROW($A$2)
    ③ ①-,计算结果为0
    ④ 此处填写数据区的总行数。在本例中,数据一共有4行,可以直接填写4,也可以填写公式:ROWS($A$2:$A$5)
    整个公式表示:求A2单元格的行号,然后减去2,所得结果再除以4,将所得结果向下取整。计算结果为0
    下图是构建行偏移量公式时的思路,可参考。
 

多项9


    除了上面的 OFFSET 函数外,INDEX 函数也可以完成这一需求:

     公式 2

  1. =INDEX($A$2:$C$5,MOD(ROW(A2)-2,4)+1,INT((ROW(D2)-2)/4)+1)

      可以看出,两者的原理是相似的。公式 使用 INT 函数和 ROW 函数来计算列偏移量,公式 用它来计算列序数。公式 使用 MOD 函数和 ROW 函数来计算行偏移量,公式 用它来计算行序数。但公式 的第一个参数只需要设定数据区左上角单元格的地址($A$2), 公式 却需要设定整个数据区的地址($A$2:$C$5);而且 公式 在计算行序数、列序数时也比 OFFSET 在计算行偏移量、列偏移量时多了一步(最后面的"+1"),所以如果严格比较,还是使用 OFFSET 函数来计算更方便些。

标签:WPS 2012 ET表格教程 数据合并 WPS 2012 ET表格教程 数据合并 WPS 2012 ET表格教程 数据合并 打印此页】 【关闭