Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何将一个范围从三个单独的范围移动到一个范围_Vba_Excel - Fatal编程技术网

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

Vba 如何将一个范围从三个单独的范围移动到一个范围,vba,excel,Vba,Excel,我在工作表中有一个数据集 A1 | Cost | B1 | Cost | C1| Cost A2 | Cost | B2 | Cost | C2| Cost ... 我想把这些移到一列,如下所示: A1 | Cost B1 | Cost C1 | Cost A2 | Cost B2 | Cost ... 我环顾四周,但我并不擅长VBA,我认为这是最好的使用方法。我必须这样做100多次,而且表格很大,而且可能必须经常复制,这样做会很有用,并节省我几天的工作 不知道从哪里开始。我尝试了宏录制,但

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

A1 | Cost | B1 | Cost | C1| Cost
A2 | Cost | B2 | Cost | C2| Cost
...
我想把这些移到一列,如下所示:

A1 | Cost
B1 | Cost
C1 | Cost
A2 | Cost
B2 | Cost
...
我环顾四周,但我并不擅长VBA,我认为这是最好的使用方法。我必须这样做100多次,而且表格很大,而且可能必须经常复制,这样做会很有用,并节省我几天的工作

不知道从哪里开始。我尝试了宏录制,但粘贴偏移会覆盖上一次粘贴,因为行偏移位于当前行,而不是目标的最后一行

这是我的数据集的一个示例。尝试从蓝色变为黄色-或从每个列集合中提取一个集合添加到黄色列集合,然后添加到下一行并重复,直到第一列集合中没有更多集合


E1中输入:

=INDEX($A$1:$C$2,ROUNDUP(ROWS($1:1)/3,0),MOD(ROWS($1:1)-1,3)+1)
并向下复制:


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

以下是我对您问题的解释:

我把下面的公式放在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)
将范围“dataset”指定给包含数据的行

将它们沿行复制给我的结果是:

我要是早点注意到你的样本数据就好了。我所做的是将数据集范围扩展到先前范围之外的一列,以便它有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

这个,修改后的图片是这样的:

请提供您尝试过的所有代码。StackOverflow是一个协作网站,用于帮助解决特定的编码问题,而不是为您服务的代码。如果您只是需要入门帮助,请使用Excel“开发人员”选项卡中的宏记录器。@Cyril这不正确。有一个失败的尝试不是询问堆栈溢出问题的要求。这只是调试的一个要求/“为什么这段代码不起作用”问题。[链接]蓝色是我想要的,黄色是我想要达到的。这对我需要的非常有效。我甚至不会想到这一点。你愿意仔细看一下并解释一下吗?不太熟悉ROW的工作原理,不过我现在会查找它。谢谢您的帮助。你帮我节省了好几天的工作时间。上次我在回答中加入了一个解释,它被删除了。我所做的是这样的:TRUNC((第(U2)排)-第(U$2)排)作品从第一排开始计数(从U2开始的当前行为$U$2,每行递增一次。我使用MOD按行或列将其拆分。这样,它会在最后一行重置以再次开始计算列,或在最后一列重置以再次开始计算行。新集合中的3乘数(以及先前集合中的2乘数)调整这些值,以便将列分组为3(或2)列。不知道为什么要添加列,但让我来试试。再次感谢您的帮助最初,我看到消息中的6列并将其设置为6列,但后来我看到链接图像文件中的8列,并意识到我的公式没有考虑到中间的额外列。因为我很懒,我将其调整为使用9列mns(三组,共3组)虽然只有8个。我本可以在分母上加1,但已经做了很多其他的工作,所以我很懒,只是假设数据右侧有一个空白列,而不是修正我的公式。