2015-03-13 49 views
0

我需要一些帮助,以便在某种循环中将几个数据块“转置”到工作表的另一个区域。该数据是目前确定按如下:在Excel中转​​置数据段VBA

Rob Dave John Peter Jane Lily Mel Amy 
1  4  7  3  2  5  8  6 
blue green brown black purple orange yellow white 
apple pear grape lemon banana kiwi mango strawberry  

我不知道是否有人会知道一些相关的VBA代码,可能让我将其转换为以下几点:

Rob Dave John Peter 
1  4  7  3 
blue green brown black 
apple pear grape lemon 
Jane Lily Mel Amy 
2  5  8  6 
purple orange yellow white 
banana kiwi mango strawberry 

这只是两个组水平排列的数据,我想转移到垂直块。实际的工作簿包含更多的数据块,因此可能需要某种循环。提前致谢。

+0

您的数据集是否始终均匀并包含4行? – Kory 2015-03-13 17:19:15

+0

嗨Kory。是的,它总是4列宽(大约200块4列在水平方向上水平运行)。行数也是不变的。 – Rob 2015-03-13 17:25:27

回答

2

设置变量的nblocks你有和4×4块总数运行:

Sub BlockMover() 
    Dim nBlocks As Long, N As Long, i As Long 
    Dim r1 As Range, r2 As Range 
    nBlocks = 3 
    For i = 2 To nBlocks 
     N = Cells(Rows.Count, "A").End(xlUp).Row + 1 
     Set r1 = Range(Cells(1, 4 * (i - 1) + 1), Cells(4, 4 * (i - 1) + 4)) 
     Set r2 = Range("A" & N) 
     r1.Copy r2 
     r1.Clear 
    Next i 
End Sub 
+0

谢谢加里的学生。这很适合我需要它。我唯一的问题是被移动的数据块包含单元格引用(相对不绝对)到原始数据表。当上述重新定位块时,相对引用指向原始数据表中的错误信息。在上面的宏重新排列块之前,是否有一种简单的方法将所有这些单元格引用转换为绝对值? – Rob 2015-03-14 09:53:53

+0

@Rob .................也许................我必须调查.......... ...... – 2015-03-14 10:11:10

+1

我找到了解决方法。我已将'r1.Copy r2'行修改为'r1.Cut r2',然后删除'r1.Clear'行。似乎要做的伎俩。过去我注意到,如果你将一个单元格切割(而不是复制)到表单的不同区域,它将保留绝对参考。感谢您的帮助和快速回复。你为我节省了很多时间! – Rob 2015-03-14 10:24:22

-1

我会使用内置的功能Transpose()

+0

我会对如何适合的一些细节感兴趣。 – pnuts 2015-03-14 03:55:21