如何将范围从三个单独的范围移动到一个范围

时间:2018-08-10 18:21:24

标签: excel vba excel-vba

我在工作表中有一个数据集

A1 | Cost | B1 | Cost | C1| Cost
A2 | Cost | B2 | Cost | C2| Cost
...

我想将它们移动到一列,如下所示:

A1 | Cost
B1 | Cost
C1 | Cost
A2 | Cost
B2 | Cost
...

我环顾四周,但我并不擅长VBA,这是我认为最好使用的方法。我必须做100多次,并且表很大,并且可能必须足够重复地复制它,以使得有用的东西并为我节省很多工作。

不确定从哪里开始。我尝试了宏录制,但是粘贴偏移量覆盖了先前的粘贴内容,因为行偏移量位于当前行而不是目标的最后一行。

这是我的数据集的样本。尝试从蓝色变为黄色-或从每个列集中获取一组,依次添加到“黄色”列集中,然后下一行并重复进行,直到第一列中没有更多内容为止

click for image

2 个答案:

答案 0 :(得分:1)

E1 中输入:

=INDEX($A$1:$C$2,ROUNDUP(ROWS($1:1)/3,0),MOD(ROWS($1:1)-1,3)+1)

并向下复制:

enter image description here

如果您的数据降至 C100 ,则用正确的值替换公式中的 $ C $ 2

答案 1 :(得分:1)

这是我对您的问题的解释方式:

我在H2中输入了以下公式:

=INDEX(dataset,TRUNC((ROW(H2)-ROW($H$2))*2/COLUMNS(dataset))+1,MOD((ROW(H2)-ROW($H$2))*2,COLUMNS(dataset))+1)

这是I2中的

=INDEX(dataset,TRUNC((ROW(I2)-ROW($I$2))*2/COLUMNS(dataset))+1,MOD((ROW(I2)-ROW($I$2))*2,COLUMNS(dataset))+1+1)

将范围“数据集”分配给包含您的数据的行。

将它们复制到行中给了我

Sample Data

我希望我早些注意到您的样本数据。我所做的是将数据集范围扩展到了较早的范围之外的一列,这样它就有了9列(我可能可以在实际范围中增加一列,但是我很懒。)我对公式进行了一些修改,以解决空列的问题,如下所示:

在K2中:

=INDEX(dataset,TRUNC((ROW(K2)-ROW($K$2))*3/COLUMNS(dataset))+1,MOD((ROW(K2)-ROW($K$2))*3,COLUMNS(dataset))+1)

在L2中:

=INDEX(dataset,TRUNC((ROW(L2)-ROW($L$2))*3/COLUMNS(dataset))+1,MOD((ROW(L2)-ROW($L$2))*3,COLUMNS(dataset))+1+1)

在此版本中,范围“数据集”为:$ A $ 3:$ I $ 8

修改后的图片如下所示: enter image description here