这是一个利用 OFFSET 函数嵌套 MOD函数、INT函数、ROW函数 来实现将多列数据合并为单列数据的教程。
本文中的 OFFSET 公式由 WPS论坛 @落寞冬日 提供,特此表示感谢!
如图,我们有3列数据,每列有4行,要将其按列合并为一列,应该如何操作呢?
我们可以使用 OFFEST 函数嵌套 MOD、INT、ROW 等函数,来实现这一个需求。
公式 1
- =OFFSET($A$2,MOD(ROW(A2)-2,4),INT((ROW(A2)-2)/4))
公式讲解
1、OFFSET函数:
offset 在英语中是偏移量的意思。OFFSET 函数的作用,就是以一个指定的单元格为参照系,然后通过列、行的偏移,返回一个新的引用。
比如我想求得图1中,A2单元格向下3列,向右2列的单元格的值,可以使用下面的公式:
A1单元格向下偏移3行,向右偏移2列,最终到达的是C5单元格。因此计算结果为C5单元格的值:C4。
回到题目,要达到多列数据合并为一列的需求,我们也可以用 OFFSET 函数来实现。
我们先把构建这个公式所需要的各个参数列举出来:
第一个参数,参照区域,我们采用数据区左上角的单元格,A2。为保证将来公式填充后这个参数的数值不变,我们给它加上绝对引用,变为 $A$2。
第二个参数“所需列偏移量”和第三个参数“所需行偏移量”,需要再另外构建公式。
2、构建列偏移量
从上图我们可以看到,我们所需的列偏移量是一组数列:0, 1, 2, 3, 0, 1, 2, 3, ... 构建这个数列,我们可以采用下面的公式:
① 求单元格 A2 的行号,计算结果为2。
② 此处填写数据区左上角所在单元格的行号。在本例中,数据区左上角为 A2 单元格,可以直接填写 A2 单元格的行号”2”,也可以填写为公式:ROW($A$2)
③ ①-②,计算结果为0。
④ 此处填写数据区的总行数。在本例中,数据一共有4行,可以直接填写4,也可以填写公式:ROWS($A$2 A$5)
整个公式表示:求A2单元格的行号,然后减去2,所得结果再除以4,最后求所得余数。计算结果为0。
下图是构建列偏移量公式时的思路,可参考。
3、构建行偏移量
从上图我们可以看到,我们所需的行偏移量是一组数列:0, 0, 0, 0, 1, 1, 1, 1, ... 构建这个数列,我们可以采用下面的公式:
① 求单元格 A2 的行号,计算结果为2。
② 此处填写数据区左上角所在单元格的行号。在本例中,数据区左上角为 A2 单元格,可以直接填写 A2 单元格的行号”2”,也可以填写为公式:ROW($A$2)
③ ①-②,计算结果为0。
④ 此处填写数据区的总行数。在本例中,数据一共有4行,可以直接填写4,也可以填写公式:ROWS($A$2 A$5)
整个公式表示:求A2单元格的行号,然后减去2,所得结果再除以4,将所得结果向下取整。计算结果为0。
下图是构建行偏移量公式时的思路,可参考。
除了上面的 OFFSET 函数外,INDEX 函数也可以完成这一需求:
公式 2
- =INDEX($A$2C$5,MOD(ROW(A2)-2,4)+1,INT((ROW(D2)-2)/4)+1)
可以看出,两者的原理是相似的。公式 1 使用 INT 函数和 ROW 函数来计算列偏移量,公式 2 用它来计算列序数。公式 1 使用 MOD 函数和 ROW 函数来计算行偏移量,公式 2 用它来计算行序数。但公式 1 的第一个参数只需要设定数据区左上角单元格的地址($A$2), 公式 2 却需要设定整个数据区的地址($A$2 C$5);而且 公式 2 在计算行序数、列序数时也比 OFFSET 在计算行偏移量、列偏移量时多了一步(最后面的"+1"),所以如果严格比较,还是使用 OFFSET 函数来计算更方便些。
|
快表帝国客服