2015-09-16 23 views
-3

我有數據從A1到BOO66262,我需要將所有內容放在七列中,而不管行數。我目前有:如何將每7列移動到下一個空行?

 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | ... | BOO 
1 | x | x | x | x | x | x | x | x | x | x | x | x | x | x | ... | x 
... | . | . | . | . | . | . | . | . | . | . | . | . | . | . | ... | . 
66262| x | x | x | x | x | x | x | x | x | x | x | x | x | x | ... | x 

我需要的工作表只有像這樣的七列:

| A | B | C | D | E | F | G 
1 | x | x | x | x | x | x | x 
... | x | x | x | x | x | x | x 
n | x | x | x | x | x | x | x 

每組有7列,但行的數量而變化。有誰知道如何用VBA做到這一點?

這裏是我的電子表格目前的樣子截圖:Screenshot

+0

聚合7列中的總行數是否超過1048576? – Jeeped

+0

大約有502萬個非空單元,因此大約會有70多萬行。 @Jeped 編輯:我錯了。只有220萬個單元會產生300,000行。 – user5111109

+0

一般而言,在Excel論壇中預計會有一個解決方案的初始努力。從你最後一個(優秀)關於r,quantmodr和mysql的問題來看,我相信你理解了[SO](http://stackoverflow.com/tour)的過程。 – Jeeped

回答

0

打開VBE與Alt鍵 + F11並把下列模塊代碼表。

Sub play_tetris() 
    Dim rws As Long, cls As Long, i As Long 
    Dim v As Long, vs As Long, vTMP As Variant, vVALs As Variant 

    Application.ScreenUpdating = False 

    With Worksheets("Sheet1") 
     With .Cells(1, 1).CurrentRegion 
      ReDim vVALs(1 To Application.CountA(.Cells)/7, 1 To 7) 
     End With 
     For cls = 1 To Range("BOO1").Column Step 7 
      rws = .Cells(Rows.Count, cls).End(xlUp).Row 
      vTMP = .Cells(1, cls).Resize(rws, 7).Value2 
      For v = LBound(vTMP, 1) To UBound(vTMP, 1) 
       vs = vs + 1 
       For i = 1 To 7 
        vVALs(vs, i) = vTMP(v, i) 
       Next i 
      Next v 
     Next cls 
     With .Cells(1, 1).Resize(UBound(vVALs, 1), 7) 
      .Value = vVALs 
      .Rows(1).Copy 
      .PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ 
          SkipBlanks:=False, Transpose:=False 
      .Resize(1, Range("BOO1").Column).Offset(0, 7).EntireColumn.Delete 
     End With 
    End With 

    Application.ScreenUpdating = True 

End Sub 

調整工作表.Name property在第四行,如果你不是在Sheet1工作。點擊Alt鍵 + Q返回到工作表,然後Alt鍵 + F8打開對話框並運行宏。

相關問題