知乎上有一个题主提问,要求将A1:B12中的数据,按照4行一组,每组重复3次,然后是下一组,同样的每组重复3次... 为方便理解,源数据我只保留了3组(也就是12行)。
当然,解决方法可以多种多样,可以编程,也可以使用公式,这里我分享一个使用函数的思路,主要是思维过程。
归根到底,我们需要得到的就是从源数据(A1:B12)当中按照规律提取行,提取行就可以想到要使用chooserows()函数了,那提取行的规律呢?
要提取的是第1,2,3,4,1,2,3,4,1,2,3,4,5,6,7,8,5,6,7,8,5,6,7,8...
可以简化为{1,2,3,4}, 依次+常量数组{0,0,0,4,4,4,8,8,8}?
{1,2,3,4}+{0}={1,2,3,4}, 所以0,0,0分别同{1,2,3,4}相加,就等于{1,2,3,4}重复了3次。
以上规律还可以进一步的简化为{1,2,3,4}+4*y
y={0,0,0,1,1,1,2,2,2}, 这个规律性就很强了,很明显可以使用INT()函数来创建一个循环:INT((ROW(1:9)-1)/3)={0,0,0,1,1,1,2,2,2}
因此思路就很清楚了,可以使用REDUCE()遍历函数,遍历{0,0,0,1,1,1,2,2,2},将它各个元素依次+{1,2,3,4}(可以表示为row(1:4)),然后套用CHOOSEROWS()函数提取所需行,然后每次遍历的结果纵向叠加(这就要用到VSTACK()函数了)。所以可以使用复合公式:
=DROP(REDUCE("",INT((ROW(1:9)-1)/3),LAMBDA(x,y,VSTACK(x,CHOOSEROWS(A1:B12,ROW(1:4)+y*4)))),1)
最后再套用一个DROP()函数是将第一行删掉(作为累加器的起始值)。