2015-03-13 66 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