2015-09-16 26 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打开对话框并运行宏。

相关问题