这个用VB来得快一点,不过个人习惯性用公式,所以就先说一下公式的算法。
用公式之前,先要观察原始数据特性;题主给的特性还是很明显:
1、每行、每列的数据数量一样;
2、不需要调整数据次序,只需要将第一行的数据转移完再转移第二行即可。
3、从表1的1、2、3行,转移到表2的第一行,即需要跨表格引用。
那么就可以写了:
=OFFSET(Sheet1!$A$1,IF(MOD(COLUMN(),COUNT(Sheet1!1:1))=0,COLUMN()/COUNT(Sheet1!1:1)-1,INT(COLUMN()/COUNT(Sheet1!1:1))),MOD(COLUMN()-1,COUNT(Sheet1!1:1)))
解析:
1、OFFSET():基于某一单元格进行上下移动相应的行、列,返回数据。这里我们固定基于表1的A1单元格。
2、因为需要移动的行和列,是个变量,所以需要在公式中引入一个变量。因为原始数据每列的数据量是一样的,所以我们这里就只引入列号,用COLUMN()得到,至于行号,则用列号除以3,在公式中即除以COUNT(Sheet1!1:1)。
有了上面的基础思路,然后就好办了,直接进行公式的整合就可以了。
如果觉得麻烦,都可以直接将COUNT(Sheet1!1:1)改成3,这样公式就清晰很多;当然也可以定义名称,不过自己用的话就不必那么麻烦了。下面是换成3的公式。
=OFFSET(Sheet1!$A$1,IF(MOD(COLUMN(),3)=0,COLUMN()/3-1,INT(COLUMN()/3)),MOD(COLUMN()-1,3))
还有疑问的话,可以后面复我。
后面有空再写VB,以及其它的做法。