多行多列转单列(按列的方向)

将下列二维区域中的名字按列的方向转为单列,结果如F列所示。对于这种问题,我们的思路是以终为始,也就是由结果往回推。方法是用引用函数+构造序列数。

-01-

offset函数

第一种方法先用offset来做,想要得到F列的结果,先要知道F列结果所对应的单元格是哪些。观察一下可以发现分别为A2,A3,A4,A5,B2,B3,B4,B5,C2……,如G列所示。

也就说我们能引用到G列的这些单元格,就能得到想要的结果。那如何引用到G列的这些单元格呢?我们可以用offset函数以A2单元格为起点进行偏移。偏移的行列如I列和J列所示。比如A2偏移0行0列,还是A2,偏移1行0列,为A3,……,以此类推。

这样问题就进一步转化为如何构造出这2个序列数,只要能构造出这2个序列数,就能用offset函数以A2为起点偏移到我们想要的目标单元格。

I列是一个循环序列数,我们可以用mod函数轻松构造出来。公式为=MOD(ROW(A1)-1,4)。除数为4,余数只能是0,1,2,3。被除数从0开始。
J列是一个重复递增的序列数,可以用int函数轻松构造出来。公式为=INT((ROW(A1)-1)/4)。序号从0开始,重复4次就除以4,最后用int取整。
这2个序列数构造好了,就可以用offset函数以A2单元格为起点进行偏移了,在F2单元格输入下面的公式,下拉填充,就完成了。

=OFFSET(A$2,MOD(ROW(A1)-1,4),INT((ROW(A1)-1)/4))&""


-02-

indirect函数

我们也可以用indirect这个函数来做。思路是一样的,由结果往回推,先找到F列结果所对应的单元格地址,分别为A2,A3,A4,A5,B2,B3,B4,B5,C2……,如G列所示。

只要能构造出G列的这些单元格地址,就能通过indirect函数返回目标单元格的值。

我们可以把G列单元格地址的列标和行号拆分为2列,分别构造。如I列和J列所示。I列是A、A、A、A、B、B、B、B、C……的重复递增序列,同样可以用int函数构造。公式为=CHAR((ROW(A1)-1)/4+65)。

我们知道A对应的code码为65,B为66,C为67,我们可以先将65,66,67各重复4次,再用char将其转为A,B,C。
J列是2,3,4,5的循环序列,同样用mod函数构造,公式为=MOD(ROW(A1)-1,4)+2。先用mod构造出0,1,2,3的循环序列,再加2,就得到了2,3,4,5的循环序列。

2个序列构造好了,就可以组合在一起,用indirect返回目标单元格了。在F2单元格输入下面的公式,下拉填充,完成。

=INDIRECT(CHAR((ROW(A1)-1)/4+65)&MOD(ROW(A1)-1,4)+2)&""

学完今天的方法,你能否按行的方向转为单列呢?

文件链接:

https://pan.baidu.com/s/1P_qHxj88RUjknWFVkYFNTA

提取码:4a3z
(0)

相关推荐